Attack 目標網站如下圖所示。由此頁面可發現 :

項目 資訊
program language PHP
Input $_GET['name']

 

 


Example 1

第一個練習較為簡單,網站並無進行任何驗證。

<script>alert(‘hello’);</script>

 

 

 

Example 2

此時網站開發者針對輸入項進行簡單的驗證。將<script>替換為空字串。

然而該開發者的過濾方式過於單純,僅需進行簡單的大小寫替換 (HTML語法不分打小寫) 即可以成 by pass 驗證。

<ScrIpt>alert('hello');</ScRipt>

 

 

Example 3

此時網站開發者針對輸入項增加較多的過濾。經過幾次測試後,推估是將可能形成<script> 語法的相關語句進行過濾,將其替換成為空字串。

因此可以利用其針對特殊字串替換為空字串的特性,在<script>語法中間插入"<script>"使其被替換後仍可組成<script>標籤,即可成功by pass驗證。

<scr<script>ipt>alert('Hacker Lung')</scr</script>ipt>

 

 

Example 4

此時網站開發者針對輸入項加強防禦。經過幾次測試後,推估開發者偵測輸入字串若含有<script> 語法,則直接回應"error"字串,不進行處理。

所幸要在客戶端執行javascript語法並非只有一種方法,可以透過其他html語法,來執行javascript語句。

 <img src='xxx' onerror='alert(1)' />

 

 

 

Example 5

此時網站開發者針對輸入項加強防禦。經過幾次測試後,發現此次網站會可以回應<script>,而當符合某種規則時則直接回應"error"字串,不進行處理。

因此將要執行的語法經過編碼後傳入即可by pass驗證,當客戶端執行時會調用函數進行解碼,即可轉為正常運作的script語法。

<script>eval(String.fromCharCode(97,108,101,114,116,40,39,72,97,99,107,101,114,32,76,117,110,103,39,41,59))</script>

 

 

Example 6

觀察HTML語法可以發現,網站本身已有<script>標籤,經過測試與觀察可以發現,輸入的資訊會放置到「$a = "」 的後方,因此僅需正確完成其語法後,即可添加自己的javascript語法。

 

hacker";alert('Hacker Lung');"

 

 

 

Example 7

觀察HTML語法可以發現,伺服器端利用PHP常用的HTML-encode 方法將語法進行編碼,以避免XSS攻擊。

然而在此案例中,並不需要使用到特殊字元。

hacker';alert(55);'

 

 

 

Example 8

經過幾次測試後,發現網站會將<input>資訊透過POST方法接收後,顯示於網頁上。而其中action的可推測為PHP於Web Server的目錄夾底下的實際位置。

 

然後偷偷進入Server查看PHP原始碼發現該程式使用  $_SERVER['PHP_SELF']  

 

也就是說網址稍作修改後,HTML Source 會變成如下圖所示。

/"><script>alert('HackerLungyu')</script>

 

 

 

Example 9

This example is a DOM-based XSS.基本上是一個靜態網站。但是仍可透過#添加scipt,使其內容作用URL的一部分,進而觸發XSS。

<script>alert('hacker lung')</script>

 

 

arrow
arrow
    文章標籤
    XSS PentesterLab
    全站熱搜
    創作者介紹
    創作者 Lung-Yu,Tsai 的頭像
    Lung-Yu,Tsai

    Lung-Yu,Tsai 的部落格

    Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣()