
本文共 2090 字,大约阅读时间需要 6 分钟。
CTFHub-技能树-命令执行
1.命令注入
给了源码:
// 关键代码
根据第五行代码,这里直接拼接就行
看到有一个php文件,8061098418328.php
,直接用cat,但是没有显示
考虑到有特殊字符,无法回显,使用base64编码,拿到flag。
这里用到了管道符|
,表示把上一条命令的输出作为下一条命令的输入
2.过滤cat
过滤cat,类似cat的指令有一堆
和上一题思路一样,拼接语句
先用ls查看文件名
再用一个类似于cat的指令查看内容并以base64格式输出
下一题
3.过滤空格
空格用${IFS}
代替即可,还可以使用IFS$9、%09、<、>、<>、{,}、%20
来代替空格
其余思路和上一题一样
4.过滤目录分隔符
emmmm,我想的是,过滤了目录分隔符/
那我就不用了,
直接用;
拼接命令即可,其余思路一样
payload: 127.0.0.1;cd flag_is_here;cat flag_159229063344.php | base64
5.过滤运算符
前边只有base64编码的时候用到了运算符,而file | base64
也可以写成base64 file
剩下的思路以之前一致
6.综合过滤练习
过滤了|,&,;, ,/,cat,flag,ctfhub
空格可以用${IFS}
cat可以用more
flag可以用正则f***
ctfhub应该用不到
查了一下,在linux下,命令分隔符除了;
还能用%0a
(换行符)
有了;就可以不用运算符了
然后按着之前的思路去做就可以了
最终的payload
!这里要注意,因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码
查看目录127.0.0.1%0als
查看文件夹内容127.0.0.1%0acd${IFS}f***_is_here%0als
查看flag127.0.0.1%0acd${IFS}f***_is_here%0abase64${IFS}f***_31393309531738.php
7.eval执行
题目
直接运行cmd参数,没有过滤,使用system函数即可执行bash命令
解题
eval():将传入的参数当作php代码执行,所以传参需要传入
;
ls/find找到flag,再cat即可
8.文件包含
题目内容
index.php
i have a shell, how to use it ?i have a shell, how to use it ?如果GET参数file中没有关键词
flag
,则包含file参数所指文件include、require等包含类文件,会把指定文件中的内容当作php代码执行,当然不同函数有区别,开源在php manual查一下
shell.txt
shell.txt是php一句话马
解题过程
构造payload,包含
shell.txt
并执行传入的参数?file=shell.txt&ctfhub=PHP_CODE;
因为不能含有关键词
flag
,所以最后利用通配符*
来完成文件读取,fla*
9.php://input
题目内容
index.php
i don't have shell, how to get flag? phpinfoi don't have shell, how to get flag?phpinfo如果GET参数file的开头为
php://
则包含filephpinfo
给了phpinfo,看了下
allow_url_include/fopen
都为On,那么就可以利用php伪协议进行命令执行/文件读取
解题过程
既然题目是
php://input
,那就用它吧php://input === POST包的body
那么
/?file=php://input
,最终效果为include(php://input);
我们只需要把POST的body设置为我们要执行的php代码即可
10.读取源代码
题目内容
index.php
i don't have shell, how to get flag? flag in/flag
i don't have shell, how to get flag?flag in /flag包含部分代码和上一题一样,php://开头即可
此外,题目指出flag位置
/flag
解题过程
使用php伪协议
php://filter
进行文件读取,因为是flag,所以不需要编码构造payload:
?file=php://filter/read/resource=/flag
11.远程包含
题目内容
和
php://input
一样,本意应该是让我们把php脚本传到自己的vps上,然后使用url远程包含,达到rce的目的即file===你的url
解题过程
因为vps暂时没法用,偷懒一下,和
php://input
用的一样的解
发表评论
最新留言
关于作者
