WAF bypass學習(MySQL注入)

引號繞過

sql語句中對’或"做了限制不允許輸入時,可以採取十六進制進行繞過
如:

select password from users where user="admin";

可以將admin進行十六進制轉換,然後進行繞過

select password from users where user=0x61646D696E;

最後顯示的結果相同
在這裏插入圖片描述

一、繞過目錄掃描的防護

  1. 修改user-agent爲搜索引擎的爬蟲 百度爬蟲:Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
  2. 減緩掃描速度
  3. 通過代理ip進行掃描

二、手工注入WAF bypass思路

  1. 大小寫變換
    如:對某些關鍵字如:select、union、order、where進行關鍵字的過濾,可以採用SelEct、UniOn等大小寫變換進行繞過。
  2. 使用嵌套
    如對某些關鍵字替換爲空,可以採用嵌套雙寫進行繞過,如碰到select或者union等關鍵字時會將其替換爲空,此時可以嘗試SELEselectCT、UNIunionON進行繞過。
  3. 空字節
    一些過濾器在碰到空字節會停止過濾,如id=1 %00 and 1=1或id=1 an%00d 1=1,當WAF碰到id=1時將停止檢測,從而繞過。
  4. 變換提交方式
    規則是對GET請求進行限制而未對POST請求限制可以嘗試通過POST請求進行繞過。
  5. 使用SQL註釋
    普通註釋:
    內聯註釋:
    /**/可以用來代替空格
    /*!select*/使得select不被註釋,table_name, table_schema, =, and information_schema同理均可以採用內聯註釋進行繞過
  6. 雙重編碼
    WAF會解碼然後過濾關鍵字,此時通過二次編碼進行繞過
  7. 更換where條件
    在這裏插入圖片描述
    如果攔截=可以嘗試<>、>、<號
    <=>: 比較操作符,當比較的的兩個值爲 NULL 時返回 true。
  8. 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*/
    在這裏插入圖片描述
    成功繞過

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章