官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
通常会遇到需要发包,去观察返回结果。通过返回结果去判断命令是否执行。在一大段返回文本中去匹配字符查看命令是否执行。
由于对于服务器是未知的,我们无法判断服务器的系统类型。如windows/linux。这就造成了命令选取的差异,如查询ip,在windwos下是ipconfig,linux下是ifconfig。
我查询了一些同行的脚本编写,
案例1 如下,通过执行ip a 然后在返回结果中查看是否包含inet 和inet6判断命令是否执行。
案例2 如下,通过执行netstat -ano 去判断命令是否执行,这个命令同时满足了windows/linux两个系统。我觉得可用性非常高。
但是在后续的批量测试中,我似乎发现了这种验证方式的弊端,批量测试我需要一个时间,netstat命令有时候返回的时间太长,会有连接超时的情况,在批量测试下会有很多地址测试不到。
那么有没有一个命令能满足我的需求,返回结果速度快,且误报率小;
通过查询资料我想到我可以用&进行连接 & 之后的命令无论如何都会被执行;
如下 ifconfig&ipconfig:
但是这并不是最优解,后续我并不知道匹配哪一段文字会让我的误报最小。
于是有了如下命令:
echo 1^2^3^4^5 1\2\3\4\5
windows 执行效果:
linux 执行效果:
我只需要构建一个我认为根本不可能存在的字符串,然后去判断结果中是否存在这个字符串。就能得到我想要的测试效果:
ps.脚本利用的是ognl命令执行,有点特殊,4个\代表一个。