Burp inject php code in User-Agent
以前覺得User-Agent應該沒啥好攻擊的,不過理解了一下思路後發現其實這攻擊還蠻簡單且實務上可以執行的。
首先 我們要能夠更改我們自己的user-agent,更改的方法有很多,如chrome安裝外掛 或是透過其他工具等,下面講一個最簡單的chrome內建改法
首先你在你要攻擊的網頁上按F12叫出開發者工具,切到network分頁後最下面[設定…]->network conditions 這邊就會看到可以更改user agent了,如下圖
之後我們可以把user agent更改成xss指令,或是sql inject的指令
為什麼這個做法會成功呢,我們來看一個網站 https://getright.com/useragent.html
像是這個網站他會把你的user-agent顯示出來,這時候你塞個xss的腳本如上圖,你就會發現這個網站可以XSS
當然XSS的用處可能比較少,但是要是可以sql injection那就有用多了 對吧?
我們來看一個php的範例,在網路上google “php USER_AGENT判斷”之類的程式碼應該八成都會像是
PHP判斷瀏覽器、判斷語言程式碼分享 這個網站所介紹的判斷方法,反正文章都抄來抄去的…
所以很多程式設計師就會寫出像下面這個範例的程式碼
<?php
function user_detect(){
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strpos($agent,"MSIE 8.0"))
$output= "Internet Explorer 8.0";
else if(strpos($agent,"MSIE 9.0"))
$output= "Internet Explorer 9.0";
else if(strpos($agent,"MSIE 10.0"))
$output= "Internet Explorer 10.0";
else if(strpos($agent,"rv:11.0"))
$output= "Internet Explorer 11.0";
else if(strpos($agent,"MSIE 7.0"))
$output= "Internet Explorer 7.0";
else if(strpos($agent,"MSIE 6.0"))
$output= "Internet Explorer 6.0";
else if(strpos($agent,"Firefox/3"))
$output= "Firefox 3";
else if(strpos($agent,"Firefox/2"))
$output= "Firefox 2";
else if(strpos($agent,"Chrome"))
$output= "Google Chrome";
else if(strpos($agent,"Safari"))
$output= "Safari";
else if(strpos($agent,"Opera"))
$output= "Opera";
else
$output= $agent;
return $output."{".$agent."}";
}
$userAgents=user_detect();
echo "你的瀏覽器是".$userAgents;
/* 然後就寫資料庫了
$link = create_connection();
$sql_query("INSERT INTO db (uid,time,data,userIP,userAgent)values($uid.$time.$data.$userIP.userAgent.)");
//請不要管我上面語法正確性,我只是示意一下...
*/
?>
程式設計師拿到使用者瀏覽器資訊,可能有少部分人會針對瀏覽器做個判斷,然後決定要噴手機板畫面出來還是給啥IE hack的CSS之類,當然應該更多就會順便寫入資料庫保存當log之類,還包含ip…
這時候 你只要在user-agent上塞個sql injection上去,如果對方又沒有用PDO之類來保護資料庫 你應該就成功了,縱使對方使用PDO好了,你塞XSS進去讓他寫到資料庫去 你也是成功XSS他了
所以針對user-agent過來的資料,最好還是要過濾一下啊
當然不只是user-agent拉,還有使用者IP的偵測很多人寫法也是向上面這樣goole來的告訴你去抓$_SERVER[‘REMOTE_ADDR’] 之類… 然後這個也是可以改的
我就有改過預設我的ip是127.0.0.1 然後登入line的某後台,他也真給我顯示說 你從127.0.0.1的來源登入
而很多網站對於127.0.0.1的權限…..XD 不過這是很多年前的事了拉