引號繞過
sql語句中對’或"做了限制不允許輸入時,可以採取十六進制進行繞過
如:
select password from users where user="admin";
可以將admin進行十六進制轉換,然後進行繞過
select password from users where user=0x61646D696E;
最後顯示的結果相同
一、繞過目錄掃描的防護
- 修改user-agent爲搜索引擎的爬蟲 百度爬蟲:
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
- 減緩掃描速度
- 通過代理ip進行掃描
二、手工注入WAF bypass思路
- 大小寫變換
如:對某些關鍵字如:select、union、order、where進行關鍵字的過濾,可以採用SelEct、UniOn等大小寫變換進行繞過。 - 使用嵌套
如對某些關鍵字替換爲空,可以採用嵌套雙寫進行繞過,如碰到select或者union等關鍵字時會將其替換爲空,此時可以嘗試SELEselectCT、UNIunionON進行繞過。 - 空字節
一些過濾器在碰到空字節會停止過濾,如id=1%00
and 1=1或id=1 an%00
d 1=1,當WAF碰到id=1時將停止檢測,從而繞過。 - 變換提交方式
規則是對GET請求進行限制而未對POST請求限制可以嘗試通過POST請求進行繞過。 - 使用SQL註釋
普通註釋:
內聯註釋:
/**/
可以用來代替空格
/*!
select*/
使得select不被註釋,table_name, table_schema, =, and information_schema同理均可以採用內聯註釋進行繞過 - 雙重編碼
WAF會解碼然後過濾關鍵字,此時通過二次編碼進行繞過 - 更換where條件
如果攔截=可以嘗試<>、>、<號
<=>
: 比較操作符,當比較的的兩個值爲 NULL 時返回 true。 - http 參數污染
當get方式進行傳參時,通過&符號傳入多個參數,WAF可能只檢測第一個參數的值,而後臺卻檢測最後一個傳入的值,此時可以繞過WAF的防禦
如:.php?id=1&id=2&id=select * from class
PHP/Apache會接收最後一個參數
ASP/IIS會將每個參數拼在一起,如id=a&id=b 最後的值爲ab
ASP.NET/IIS也是將每個參數拼在一起
JSP,Servlet/Apache Tomcat接收第一個參數
三、測試
環境:
DVWA1.9版本,safedogV4.0apche版
SQL注入測試:
SQL注入Low級別
在MySQL測試了一下條件,and/*1=1*/
發現不報錯拿到環境下測試
由於已知此級別存在字符型注入,學習bypass爲主所以以下不進行字符型和數字型的判斷。
-
首先正常輸入:
-
然後在1後加’
dog沒有攔截,此處判斷出了注入點 -
繼續加 and看看是否攔截
-
加and 1
-
被攔截,嘗試/**/代替and和1之間的空格
-
依舊被攔截,現在嘗試下內聯註釋
and/*!1=1*/
-
發現不攔截了,此時在後邊添加註釋符
-
頁面回顯成功,測試
and/*!1=2*/
-
信息查詢不到,此時輸入
or/*!1=1*/
成功繞過