bWAPP HTML Injection (HTML注入)

前言

bwapp靶場每一種類型都分爲3種等級:  Low,  Medium,  High

這邊我就按照類型歸類寫, 方便查閱。

本文是HTML注入和iFrame注入,其他的本質都是HTML的改變。那麼有人會問,XSS與HTML注入有啥區別呢?其實本質上都是沒有區別的,改變前端代碼,來攻擊客戶端,但是XSS可以理解爲注入了富文本語言程序代碼,而HTML注入只注入了超文本標記語言,不涉及富文本程序代碼的問題。這裏的iframe注入實際上就是一個閱讀器,可以閱讀通過協議加載的活服務器本地的文件。

話不多說,  直接lu靶場

 

0x01  HTML injection Reflected GET

分析網站:

Low

Low等級沒有任何防護,  直接注入即可:

Medium

在Medium等級中,  繼續進行注入的話,  會發現< >尖括號被轉義成html實體了:

源碼對input進行了url解碼:

function xss_check_1($data)
{
    
    // Converts only "<" and ">" to HTLM entities    
    $input = str_replace("<", "&lt;", $data);
    $input = str_replace(">", "&gt;", $input);
    
    // Failure is an option
    // Bypasses double encoding attacks   
    // <script>alert(0)</script>
    // %3Cscript%3Ealert%280%29%3C%2Fscript%3E
    // %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E
    $input = urldecode($input);
    
    return $input;
    
}

那麼可以採用url編碼來繞過:

%3cscript%3ealert(1)%3c/script%3e

注意,  在url中的參數注入不會被url編碼成功..

High

源碼看到,  利用了htmlspecialchars()函數進行html實體編碼:

function xss_check_3($data, $encoding = "UTF-8")
{
    // htmlspecialchars - converts special characters to HTML entities  
    return htmlspecialchars($data, ENT_QUOTES, $encoding);   
}
  • ENT_QUOTES - 編碼雙引號和單引號。

評估爲安全。

 

 

0x02

分析

在post的請求中,  就不同於get型的直接url中的參數污染注入:

這就需要POST放包來注入,  剩餘的方法和Get型一樣,  不再贅述。 

Low

Medium

注意,  要在輸入框中輸入才能被url解碼

High

安全。

 

 

0x03

分析網頁特定,  猜想是將網頁的url在前端頁面中顯示出來:

Low

嘗試在url後面加入參數,  判斷是否存在注入點:

http://localhost:8080/bWAPP/htmli_current_url.php?id=1

成功,  然後注入script:

發現尖括號被編碼成html實體了..

經過實驗,  發現是由於注入的尖括號是在url中,  在發送到服務端之前url已經被url編碼了,  而服務端又沒有進行url解碼,  這樣導致尖括號的失效。

兩種方法解決:

1.  用burp抓包,  修改參數:

2. 修改源代碼,  增加url解碼函數:

直接在url注入:

  

Medium

和Low等級一樣,  由於url中傳參會自動url編碼,  而服務端又沒有進行對應的url解碼, 

直接用burp抓包修改即可:

查看源碼,  他是用js腳本執行document.write來寫入url的:

 

High

high級別用了htmlspecialchars()函數,  安全:

 

 

0x04  HTML Injection - Stored (Blog)

Low

分析:

這裏的記錄生成(添加)類似與DOM型的XSS:

在Low級別沒有任何防護,  直接注入js即可:

Medium&High

Medium和High級別一樣,  都使用了mysqli_real_escape_string()來將特殊字符轉義,  (比如單雙引號, 尖括號, 括號等等)


  • 拓展----mysql_escape_string()函數

mysql_real_escape_string() 函數轉義 SQL 語句中使用的字符串中的特殊字符。

下列字符受影響:

\x00,  \n,  \r,  \,  ',  ",  \x1a

如果成功,則該函數返回被轉義的字符串。如果失敗,則返回 false。


如果是sql注入還可以利用寬字節等方法繞過,  但html注入就無法注入了。

 

 

0x05  iFrame Injection

在這裏可以成爲閱讀器(www目錄下所有靜態文件的閱讀器)和跳轉和一個可以誘導客戶訪問某站點的一個點,利用:大小size設置爲0時可以理解爲無交互的刷訪問、前端挖礦、掛黑鏈、誘導下載等等

Low

利用的方法有很多,  觀察有一個可控的參數ParemUrl

  • 文件包含+目錄穿越

將ParamUrl參數指向服務器的其他文件,  即可實現目錄穿越的文件讀取:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=../README.txt&ParamWidth=800&ParamHeight=800

  • XSS攻擊

觀察ParemUrl參數值別寫入HTML源碼中,  這裏直接利用閉合或添加屬性了實現XSS:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=" onload="alert(1)&ParamWidth=800&ParamHeight=800  // 閉合注入xss

http://localhost:8080/bWAPP/iframei.php?ParamUrl=javascript:alert(111)&ParamWidth=800&ParamHeight=800  // JavaScript僞協議
  • url跳轉

這裏演示一個url跳轉,  也可以嘗試遠程文件包含:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=http://www.xiaodi8.com&ParamWidth=800&ParamHeight=800

 Medium

在Medium級別中,  做看一些防護:

這裏對ParamUrl寫死了,  且雙引號前面加了反斜槓做了轉義,  那麼可以試試ParamWidth還能否閉合:

於是囂張的注入:

http://localhost:8080/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=800" onload=alert(document.cookie) //&ParamHeight=800

Do NOT use addslashes() for XSS or HTML validations!!

High

用了htmlspecialchars()轉化爲HTML實體, 安全:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章