滲透測試中的Bypass技巧(一)
第一篇架構層繞過WAF
0x00 前言
許多朋友在滲透測試中因為遇到WAF而束手無策,本人應邀,與godkiller一同寫下此文,希望能夠對許多朋友的問題有所幫助。
此系列一共分為五篇文章,分別如下:
一、架構層繞過WAF
l CDN WAF繞過
l 白名單應用
二、匹配資源大小限制
l 伺服器端配置(Data MAX Length)
三、協議未正確解析
l HTTP不同的請求方法污染
l GET與POST的區別
l 文件上傳
l HTTP參數污染(HPP)
四、發現WAF缺陷過程
l 繞過某WAF上傳
l 繞過某WAF注入
l 自動化Bypass
l 思考
五、過濾/攔截規則不嚴謹
l 等價替換
l 大小寫替換
l 不常用條件
l 特殊符號
l 編碼
l 注釋
0x01 CDN WAF繞過
CDN的全稱是Content Delivery Network,即內容分發網路。其基本思路是儘可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各處放置節點伺服器所構成的在現有的互聯網基礎之上的一層智能虛擬網路,CDN系統能夠實時地根據網路流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。其目的是使用戶可就近取得所需內容,解決 Internet網路擁擠的狀況,提高用戶訪問網站的響應速度。 --來源「百度」
目前CDN服務的功能是越來越多,安全性也越加強悍,用戶的每個請求都會被發送到指定的CDN節點上,最後轉發給真實站點。這個過程就好像加了一道關卡,這個關卡提供了緩存、加速、防禦的特點。
在滲透測試中,如果遇到了CDN站點,幾乎許多測試請求都會被CDN攔截,甚至多次請求後,會被加入黑名單。這個CDN節點屬於雲端WAF,如果將數據直接發送給真實站點,那麼也就沒有CDN的處理了,整個防禦就沒有任何作用。
那麼下面我來帶給大家幾個方法來繞過雲端WAF。首先我們必須要查詢到目標站點的真實地址才可以,這裡的真實地址就指的是真實IP。以下幾個方法只是個人之見,如果有遺漏或者缺點,請在文章評論指出……
第一個,查詢域名歷史DNS解析,網上有很多站點都可以查詢站點的歷史DNS解析。假設我在本月10號,域名綁定的伺服器IP是199.199.199.***,在下月15號更換了伺服器的IP,那麼這個199.199.199.***可能就會被直接記錄在歷史記錄中。再根據歷史記錄進行判斷當前IP是否是現在的網站真實伺服器地址。
第二個,查看子域名解析地址是否和主域名的IP地址相近。一般再查詢域名是否存在CDN的話,我們可以看響應頭、或者看解析記錄,裡面大多都有關於雲端CDN的字眼。當然提倡寫腳本,Kali Linux中也有工具 ~
第三個,社工DNS 比較苛刻,需要拿到CDN那邊的管理員許可權開可以。
第四個,CDN節點分發缺陷,通過國外IP訪問網站可能會出現真實IP,因為有的CDN服務商可能只做了國內節點,沒做國外的,這樣訪問請求是直接被轉發到真實伺服器地址上。
那麼下面來概述一下得到了繞過的條件如何進行繞過,假設伺服器端的IP地址為121.121.1x1.1x1,管理員設置了CDN節點,經過上面的方法得到真實IP地址後,可以直接更改本地的hosts文件來直接將數據發送到網站伺服器上。這裡不再詳細概述啦~
0x02 白名單應用(子域名)
在有些時候,某些廠商的環境剛剛上線,用於調試項目,並沒有直接將子域名添加至CDN節點,那麼就有可能出現某些安全隱患,因為剛上線的項目都沒有任何防禦措施,如果當前項目與目標站點搭建在同一個伺服器中,也會成為我們繞過WAF的有利條件。當然白名單應用不止一個上線項目,還有某些管理應用,例如:phpmyadmin,其操作完全不會被WAF攔截,當然應用過多,本人不才,只接觸一些常見的,歡迎補充。
感謝大家的支持。
推薦閱讀: