---恢复内容开始---

序->

  在学习了一年多渗透测试之后,深觉手工的重要性,一直以来没有时间深入研究,本次打算通过sqli-labs来学习一下sql注入的一些基本知识,让自己得到提高--

less 1   GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)->

  第一步:报错  输入'或者\等字符扰乱后台sql语句,使其报错,以此来分析后台sql语句的结构 输入单引号'后 产生以下报错

  

SQLStatementParser 处理单反斜杠_单引号

 去掉两个',根据报错,我们可以猜测后台sql语句为



selcect * from table where id='$id' limit 0,1



  第二步:构造闭合语句:1.闭合前面的语句:' or 1=1   2:注释后面的语句:--+或者#



select * from table where id='1' or 1=1 --+'



  第三步:构造查询语句:根据数据库,表,字段的顺序进行查询 Mysql中information_schema数据库记录了所有数据库名,表名,字段名的信息 分别为SCHEMATA,TABLES,COLUMNS表

SQLStatementParser 处理单反斜杠_单引号_02

根据order by 语句我们可知列数量为3 同可根据union 1,2,3等来判断

PS:union用来连接两个sql语句,要求前后两个select语句拥有相同的列数,根据这一特性猜解出数据列数

SQLStatementParser 处理单反斜杠_单引号_03

一般情况下,输出用户名,密码等会在后台才用mysql_fetch_array(),mysql_fetch_row()等函数进行分解,仅运行一次,因此前面使union前面的语句为空,便能执行union后面的语句,这里出现两个显示位,我们查询的数据就在这两个位置显示出来

剩下的就是构造语句以数据库,表,字段查询,不详述。。

less-2 GET - Error based - Intiger based (基于错误的GET整型注入)->

与上相同,基于数字型没有两边单引号,与上相同,闭合不需单引号

less 3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)->

SQLStatementParser 处理单反斜杠_数据库_04

发现报错信息提示右边)未闭合,因此闭合左边(就行了

SQLStatementParser 处理单反斜杠_单引号_05

其他与less-1同

less 4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)->

加单引号页面没有变化,加入\发现报错

SQLStatementParser 处理单反斜杠_sql语句_06

报错语句填补的部分即是我们需要闭合的部分,构造") or 1=1 --+