前面简单的略,记点备注,不能局限于
DVWA,补一下基础一般来说提交
id=-1防止请求的输出占据注入输出的位置不能用
#注释了,换用--+,其中+是url编码中的空格对库名查询的时候要
group_concat(table_name),否则只会输出第一个表名下面很多题都有关键词替换,双写绕过或者大小写
对于过滤了空格,可以用空格的
url编码%0a绕过
$less6$ 报错注入
先试出是双引号闭合,
id=1"发现不能判断回显位报错注入:通过特殊函数错误的使用,使其输出错误结果
BigInt(虽然这个不能用)exp(int)计算e的次方,足够大的x会使函数的结果数据类型溢出导致报错,例:1
?id=1 and exp(~(SELECT * FROM (SELECT user()) a)) --+
将
a作为SELECT user()语句的结果,并用SELECT * FROM查询查询语句成功执行返回 $0$ ,所以取反作为
x,使数据溢出同理
pow()也可以仅当
MySql版本在5.5.5~5.5.49函数参数格式错误
用到了
updatexml()与extractvalue()updatexml(XML_document,Xpath_string,new_value):分别是文档对象名称,字符串,格式,例如下:1
/?id=1 and updatexml(1,concat(0x7e,user(),0x7e,version(),0x7e),3) --+
虽然这题是双引号闭合,但加上以后代码块不能高亮了
0x7e是ASCII下的~,习惯把它放在注入函数的两端用以区分系统报错和所需信息主键重复(冲突)
鸽,等我遇到题再说
$less29/30/31$
http参数污染参数污染:
HTTP允许提交同名参数,而服务器及安全狗WAF的选取参数不一致,导致可以绕过WAF而提交渗透指令例:提交
/?id=111&id=222不同类型服务器会选取
111或者222或者两者都有作为id值,具体如下表
当
WAF被架设在Tomcat上,而服务器在Apache上时,可以在前一个提交合法参数,后一个提交渗透指令来绕过WAF但令人感慨的是
less29/30/31并不需要绕过(大嘘
$less32/33/34/35/36/37$ 宽字节注入
原理:
PHP自带了如addslashes()等转义函数,通过在'前面加上反斜杠变为\'将其转化为字符串,防止闭合。而当服务器端编码方式为gbk时,可以通过加上特殊字符与反斜杠构成中文来绕过转义若服务器存在指令
1
2
3SET NAMES 'gbk'
或者
SET character_set_client =gbk则存在该漏洞
比如被转义成的
\'在gbk下编码为%5c%27如果我们提交
%bb'转义编码后为%bb%5c%27,当ASCII>128时,sql会认为前后两个共同组成一个汉字,即%bb%5c是一个宽字符,以此绕过对'的转义值得注意的是并不一定使用
%bb,只需要满足存在后一个编码为%5c的宽字符即可,理论上%81-%FE均可
注意第 $34$
输入被当作了字符串而非在
url栏中输入时转为 $16$ 进制但
burp抓包提交就神奇的可以了,其他绕过包括改burp中的HEX直接改十六进制,以及提交汉,原因是存在需要三个编码的汉字,汉恰好是前两位,加上%5c后能构成新的汉字
注意第 $35$
逆天惯性思维,注意标题
who care for addslash()数字型,直接注入
$less38/39/40/41/42/43/44/45$ 堆叠注入 stacked injection
通过在
sql语句后面加上;可以同时执行多条语句,这与union select的区别是union select只能执行查询语句,而堆叠注入可以执行任何操作但需要注意的是,第二条语句以后常常没有回显,而由于权限不足,可能执行的操作没有成功而无法得知
其局限性还在于数据库引擎或者
API可能不支持,如Oracle注意 $less43$ 在
username处进行了过滤,那么通过passwd处注入即可