作者名:Demo不是emo
主页面链接:主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:web安全,后渗透技术每日emo:真的还有相见的机会吗
目录
一、tac命令绕过
二、内敛执行绕过
三、双重参数覆盖(2022.12.31)
命令执行也是ctf题型中比较常见的,这这些天ctf的训练中我也学到了很多新姿势,就想着写个博客记录一下,希望也能对大家解这类型的题提供帮助和思路
因为我还在不停的练习ctf,所以会不断记录一些新奇的解题姿势,也就是这篇博客会持续更新,建议点赞关注
在真实环境的命令执行漏洞的过滤中,cat命令一直是防范的重点,那cat命令被写死无法绕过的时候就可以试试这个命令——tac
可能很多小伙伴没听过过这个命令,其实这个命令功能跟cat命令差不多,看下面这个图你应该就明白了,这两个命令效果差不多
cat exp.pytac exp.py
怎么样,这下清楚了吗?cat是从上往下查看,tac就是从下往上就查看而已,但是tac命令知道的人少,所以很多都没有对tac命令进行一个过滤,所以cat命令被过滤时就可以尝试使用tac命令
`命令`和$(命令)都是执行命令的方式
反引号``是命令替换,命令替换是指Shell可以先执行``中的命令,将输出结果暂时保存,在适当的地方输出。语法:`command`
实例如下,可以看到同样的系统命令使用这两种方法都能执行,下面这两个命令的效果就相同
echo $(ifconfig);echo `ifconfig`;
跟上面的tac是一个道理,$(命令)的方法被大多数人熟知,一般都存在过滤,而`命令`的方法相对来说被过滤的可能性就低了许多
就是将eval()函数的参数的值用另外一个参数传入,例如,这两句话效果是相同的
c=eval(phpinfo());c=eval($_GET[1]);&1=system(phpinfo());
都能达到显示phpinfo的目的,如下
这个还是很有用的,用的也比较多
上面的eval()函数也可以换成include(),并且include可以不要括号,但是得配合伪协议中的php://filter来使用,如下
c=include($_GET[1])?>&1=php://filter/read=convert.base64-encode/resource=flag.php
或者加上括号也可以,如下
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
这就是经过base64编码后的flag.php的内容
这个方法怎么说呢,有点另辟蹊径的感觉,大多数ctf题的命令执行都是对一些系统函数进行绕过,并没有限制写入文件什么的,所以可以直接利用file_put_content()函数或者其他的写入文件的函数,直接写一句话木马然后连接,一样能看到flag,如下
file_put_contents("abc.php", '');
但有些出题人也会把权限写死,所以这种方法还是比较看运气的