本文屬i春秋的原創獎勵計劃,未經許可禁止轉載!
前言 半年前的我,手握各種waf的bypass,半年之后的我。就把思路分享出來了。別問我什么!問了我也不會告訴你,我是沒事閑的!是不是好多人遇見waf,就一陣頭大呢~今天我就開車啦~大家快上車!
正文 測試環境
php:我使用的是 phpstudy
waf:各種waf的官網
測試思路 php的本地環境是用來檢測sql語句是否可以執行。
waf官網用來測試語句是否被攔截。
重點 :
1.http數據包的認識。
2.充分利用數據庫的注釋功能。
3.有對waf的構造思路。
測試代碼 本地php存在注入漏洞的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<? php $id = $_get [ 'x' ]; $conn = mysql_connect( '127.0.0.1' , 'root' , 'lyy1314...' ); mysql_select_db( 'ceshi' , $conn ); $sql = "select * from user where id={$id}" ; $cun = mysql_query( $sql ); echo "< charset=utf-8>" ; while ( $row = mysql_fetch_array( $cun )) { echo "url:" . $row [ 'url' ]. "<br>" ; echo "password:" . $row [ 'password' ]. "<br>" ; echo "<hr>" ; } mysql_close( $conn ); echo "您當前執行的sql語句:" ; echo urldecode( $sql ); ?> |
get型注入測試 - 偽造http數據包 get型注入相對于post注入來說,在某些方面是比post注入bypass更輕松一些的。這是為什么呢?答案是因為post數據包中也包含了get包哦~我們可以通過偽造post數據包的方式進行get注入。
也就是說,get的類型最少有三種,甚至更多的數據包類型可以進行注入。
如:post、put、get。
1.測試普通的get型注入
可以發現,上面成功接收到了get數據包提交的數據。這是理所當然的!
2.測試post提交的get型注入
從上面可以看出,post數據包種,確實包含了get的數據包。所以,在有些時候進行bypass測試時,適當的改下數據包類型,也是可以的哦。
在360主機衛士的之前版本中,post提交只攔截post的數據,當你利用post數據包進行get注入時,它是不會進行攔截的哦~ get型注入測試繞過云鎖 - 偽造http數據包 首先,我們去云鎖的官網進行bypass測試! 我們在云鎖官網的url后面加入 and 1=1 進行測試。
當然,正如所料 100% 被攔截
一般情況,大家都會扭頭就走~ 那我們現在來偽造個post數據包,進行測試把~
正如我們期待的那樣,偽造數據包后,waf就被一棍子打死了~ 有時,即使我們偽造數據包后,仍過不了waf,不要灰心,因為這個時候waf的規則絕對比get包的規則少哦~ get型注入測試 - 合理構造http數據包 - 思路 在http數據包中每個參數中間都會用&符連接,那么我們可不可以利用這個&符號呢? 下面我們先來進行本地測試!
我們發現即使 &符后面的參數被 /* 包含住,這可以被接收到。并沒有被注釋掉! 那是因為, /* 被http當成了參數a的值,而并不是當成了注釋! 有時候,我們可以利用這個方法,加其他的方法來bypass。
后記 挖waf的bypass時,一定要從多方面入手,編碼,協議,語句等,甚至有時都會利用系統的截斷!
推薦大家買一本關于 http協議 方面的書籍進行閱讀,因為,只有越接近底層,才能越了解它。最后從方方面面進行繞過。
有編程功底的,可以思考一下waf的編寫方式,哪里容易出現漏洞等~比如我們常常用來截斷文件的%00,在安全狗中卻能截斷安全狗對http協議的檢測。比如菜刀過狗時,eval%00()是不會被殺的!不要只靠別人!思路是你自己的!你學到的知識也是屬于你自己的!
原文鏈接:http://bbs.ichunqiu.com/portal.php