参数类型
数字integer、字符型、搜索型、JSON等
select * from user where name='ford'
字符型需要单引号或双引号括起来,才被认定为字符串,所以字符型参数肯定有符号
name=name=_GET['x'];
select * from user where name='$name';
?x=ford and 1=1
select * from user where name='ford and 1=1';
1=1加上’变成单纯的字符串了
sql数据库识别字符串必须是加''的
数据库的通配符是 % %
select * from user where name like '%ford%'
sql语句干扰符号:',",%,),}等,看代码写法而定
json
{
"user"="ford and 1=1",
"pass"="ford"
}
即数组形式的键值对
同其他参数类型相比只是格式变了
接收值即注入点:ford' and 1=1
加':
select * from users where username='{$name}' {}是数组形式就得加,无关闭合
纯数字的话不用闭合,字符的话需要闭合'
请求方法:更改请求方式尝试绕过WAF
GET,POST,COOKIE,REQUEST,HTTP头等
不同请求方式上传文件大小、类型都不同
get请求的数据包写在get后面 上传大数据不合适,用post
get的参数只要在后面跟数据包就能接收到,不管请求方式是否为get
post=post=_POST['p'];
接收的数据写在请求体中
c=c=_COOKIE['c'];
写在数据包的请求头里
Cookie: c=111
先手动添加cookie再get数据包中更改cookie
r=r=_REQUEST['r'];
全部接收,放在任意位置都能接收
s=s=_SERVER['********'];
uagent =uagent=_SERVER['HTTP_USER_AGENT'];
IP =IP=_SERVER['REMOTE_ADDR'];
接收不同的数据有不同参数写法 设备信息语言等等
数据库接收数据包中数据,因此产生的注入称为http头部注入
符号'--+'和'#'注释符,将后面的内容注释掉
127.0.0.1:8088/Less-5/?id=1' --+
--+ 或者 # 具体用哪个根据数据库而定,不一定哪个能用
只要是对数据库进行操作的函数都可以注入,无论是select或是insert,数据包位置uagent还是post提交的参数