轉(zhuǎn)自:https://security.tencent.com/index.php/blog/msg/66
waf報(bào)警情況:
當(dāng)waf利用正則匹配檢測(cè)union select類型的關(guān)鍵語(yǔ)句時(shí)報(bào)警央串,且/**/被過(guò)濾
過(guò)濾方法:
一、利用fuzz手段檢測(cè)%a0,%0d(換行) 如:id=-1 union%a0select 1,2,
二食听、利用union/*%aa*/select漆腌。原本屬于/*xxx*/應(yīng)該是被防護(hù)了,由于中文字符的特性利用诞仓,中文字符配合注釋符繞過(guò)所有規(guī)則幕与。利用%e4等只要是中文字符開(kāi)頭的,就可以完成繞過(guò)檢測(cè)价淌!%a0之類的申眼。原理,讓服務(wù)器不認(rèn)識(shí)union+特殊字符+select之間的部分蝉衣,因此特殊字符不能構(gòu)成中文被識(shí)別出來(lái)括尸。
三、專屬于MYSQL進(jìn)行l(wèi)oad_file
當(dāng)敏感函數(shù)被過(guò)濾病毡,waf又是基于正則匹配的情況下
1姻氨、version()%0b
2、`version`()利用在mysql中剪验,`函數(shù)名`()==函數(shù)名()
繞過(guò)了函數(shù)名進(jìn)行select肴焊。需要利用十六進(jìn)制盲注:
id=1 and(select `load_file`(0x2f6574632f706173737764) is not null)
首先判斷服務(wù)器某文件是否存在,例如用/etc/passwd文件功戚。0x2f6574632f706173737764是/etc/passwd的十六進(jìn)制格式娶眷。在判斷確實(shí)存在該文件之后,可以通過(guò):
id=1 and(select `load_file`(0x2f6574632f706173737764)>0x726f66)
根據(jù)頁(yè)面返回修改大于號(hào)之后的十六進(jìn)制值啸臀,從而獲取到該文件的十六進(jìn)制內(nèi)容届宠。
3烁落、利用instr()進(jìn)行盲注
若過(guò)濾了ascii,substr等函數(shù),仍可以利用id=instr(@@global.version,1)來(lái)獲取global變量豌注。@@global包含很多敏感信息