作者名:Demo不是emo
主页面链接:主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:web安全,后渗透技术每日emo:我已经很努力在让自己变好了,求求你再等等我可以吗
从今天开始我们就进入命令执行主题的靶场训练环节了,如果对命令执行不太熟悉或者想学习的小伙伴也可以看看我的这篇博客,链接如下
http://t.csdn.cn/ulmxh
目录
一、命令执行过滤绕过
二、命令执行函数绕过
三、参数嵌套绕过
一、命令执行过滤绕过
题目:web29
训练平台:ctfshow
题目描述:命令执行,需要严格的过滤
容器打开如下
一看就又是一个代码分析题,老样子再来分析一下代码逻辑,如下
首先GET方式传入一个c变量,再用preg_match()函数执行一个正则表达式匹配,这个正则表达式匹配的意思就是当c中存在flag时就为真,所以这里的代码逻辑就是传入的c中不包含flag这个字符串时就将c变量的值作为命令执行,如下
所以我们就要传入一个不包含“flag”字符串的php代码作为r的值传入,先看看当前文件夹下有什么文件,如下
?c=system("ls");
效果如下
?c=system("cat flag.php");
但是执行后发现没有任何回显,而刚才ls都能有回显,说明这里有过滤,那就只能不断尝试绕过了,这里我是使用了通配符和tac命令配合绕过的,看wp中还有多种解法,这里就不多讲了,我的绕过方式如下
?c=system("tac fla*.php");
效果如下
成功拿下flag
二、命令执行函数绕过
题目:web30
训练平台:ctfshow
题目描述:命令执行,需要严格的过滤
容器打开环境如下
简单看了一下代码,跟web29区别不大,只是多过滤了一个system和php,所以我们这也也要尝试绕过
首先就是system函数的绕过,因为执行命令的函数有很多,我们换成其他的就可以了,这里简单给大家列出来了一些命令执行的函数,如下
system(),exec(),shell_exec(),passthru(), pcntl_exec(), popen(), proc_open(),反引号
这里我们换成passthru()函数试试,如下
c=passthru(ls);
成功执行命令,接着就是php的过滤,也是直接用通配符就绕过了,如下
c=passthru("tac fla*****");
如下
三、参数嵌套绕过
题目:web31
训练平台:ctfshow
题目描述:命令执行,需要严格的过滤
容器打开后也,页面如下
这里过滤的就更多了,其实更多的就是小数点被过滤比较难搞,这里我们直接是用参数嵌套的方法来绕过,如下
c=eval($_GET[1]);&1=passthru("tac%20fla*****");
效果如下
拿下拿下,今天的ctf训练到这里就结束了,明天再见