bWAPPweb安全靶場,HTML_Injection模塊php
超文本標記語言(HTML)注入有時也被稱爲虛擬污染。 這其實是一個由站點形成的攻擊,該站點容許惡意用戶向其 Web 頁面注入 HTML,而且沒有合理處理用戶輸入。 換句話說,HTML 注入漏洞是由接收 HTML 引發的,一般經過一些以後會呈如今頁面的表單輸入。html
1.1.1 輸入兩個名字,頁面出現用戶輸入的東西mysql
1.1.2網頁地址爲:web
更改參數,low等級的沒有對輸入的內容有任何檢測sql
結果:數據庫
1.1.3 或者 firstname 改成 <a href=http://www.baidu.com>點這裏到百度</a>數組
<a>標籤的href 屬性規定連接的目標瀏覽器
結果:緩存
firstname=<script>alert(document.cookie)</script> 能夠獲取用戶cookie安全
1.2.1 <h1>Hack</h1>無效
應該對字符<>或 / ,檢測或過濾了,檢測的方法:過濾、替換、編碼解碼,這裏沒有作替換,試一下編碼解碼
試一下URL encode(其餘還有不少編碼方式base64等)
urlencode("<h1>Hack</h1>") --->
結果:沒變,說明頁面展現的時候,把我輸入的內容URLdecode了
那咱們URLencode兩次,他解碼後就是一次URLencode的結果
結果注入成功
由於 只進行一次URLencode,瀏覽器會自動默認 把參數URLdecode一遍,因此和沒編碼沒有區別,兩次的話瀏覽器解碼一次,頁面展現的時候在解碼一次
......看一下源碼吧
function xss_check_3($data, $encoding = "UTF-8") { // htmlspecialchars - converts special characters to HTML entities // '&' (ampersand) becomes '&' // '"' (double quote) becomes '"' when ENT_NOQUOTES is not set // "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set // '<' (less than) becomes '<' // '>' (greater than) becomes '>' return htmlspecialchars($data, ENT_QUOTES, $encoding); }
有一個htmlspecialchars()函數,百度一下
不會繞過~~~
知乎上有回答的https://www.zhihu.com/question/27646993,分不一樣場景,可是我都試過了仍是不行
方法和get同樣,只是post和get的區別
代碼審計:
switch($_COOKIE["security_level"]) { case "0" : // $url = "http://" . $_SERVER["HTTP_HOST"] . urldecode($_SERVER["REQUEST_URI"]); $url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; break;
case "1" : $url = "<script>document.write(document.URL)</script>"; break; case "2" : $url = "http://" . $_SERVER["HTTP_HOST"] . xss_check_3($_SERVER["REQUEST_URI"]); break; default : // $url = "http://" . $_SERVER["HTTP_HOST"] . urldecode($_SERVER["REQUEST_URI"]); $url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; break; }
<div id="main"> <h1>HTML Injection - Reflected (URL)</h1> <?php echo "<p align=\"left\">Your current URL: <i>" . $url . "</i></p>";?> </div>
PHP超全局變量$_SERVER的做用:(引用http://www.javashuo.com/article/p-zgvachxa-nt.html)
$_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器建立。不能保證每一個服務器都提供所有項目;服務器可能會忽略一些,或者提供一些沒有在這裏列舉出來的項目。
那麼這裏是獲取Host和當前腳本路徑,進行處理,而後在頁面顯示
把Host改成Hack,實際的時候能夠改成其餘網址,或者把路徑修改也可(前提是有那個腳本)
mideum是document.write(document.URL)
那隻能對URL作手腳了
看別人說只有IE瀏覽器能夠,看來之後要多注意IE瀏覽器額
high只對當前腳本路徑 用了htmlspecialchars()函數,HTML編碼技術,可是Host仍是能夠用low等級的方法
沒有任何過濾
試了一下簡單的繞過無果,審計一下代碼,存儲型無非就是將輸入的內容存儲到數據庫,在查詢顯示的過程
找到了關鍵代碼
全部輸入的內容都要通過sqli_check_3()處理一次
function htmli($data) { include("connect_i.php"); switch($_COOKIE["security_level"]) { case "0" : $data = sqli_check_3($link, $data); break; case "1" : $data = sqli_check_3($link, $data); // $data = xss_check_4($data); break; case "2" : $data = sqli_check_3($link, $data); // $data = xss_check_3($data); break; default : $data = sqli_check_3($link, $data); break; } return $data; }
這是 sqli_check_3()
function sqli_check_3($link, $data) { return mysqli_real_escape_string($link, $data); }
mysqli_real_escape_string()函數轉義字符串中的特殊字符,好比中文等,詳細這裏https://www.runoob.com/php/func-mysqli-real-escape-string.html
while($row = $recordset->fetch_object()) { if($_COOKIE["security_level"] == "1" or $_COOKIE["security_level"] == "2") { ?> <tr height="40"> <td align="center"><?php echo $row->id; ?></td> <td><?php echo $row->owner; ?></td> <td><?php echo $row->date; ?></td> <td><?php echo xss_check_3($row->entry); ?></td> //這裏若是安全等級是 1 或 2 即 medium和high就通過xss_check_3()函數處理以後展現 </tr> <?php } else { ?> <tr height="40"> <td align="center"><?php echo $row->id; ?></td> <td><?php echo $row->owner; ?></td> <td><?php echo $row->date; ?></td> <td><?php echo $row->entry; ?></td> </tr> <?php } }
function xss_check_3($data, $encoding = "UTF-8") { // htmlspecialchars - converts special characters to HTML entities // '&' (ampersand) becomes '&' // '"' (double quote) becomes '"' when ENT_NOQUOTES is not set // "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set // '<' (less than) becomes '<' // '>' (greater than) becomes '>' return htmlspecialchars($data, ENT_QUOTES, $encoding); }
不知道怎麼Hack,網上的全都是一摸同樣的答案,難道不能Hack?
這個存儲型的通常在Blog中出現(?)
有點像反射型XSS(同樣的?)漏洞修復建議:過濾輸入的數據,如< > ' " onclick on***等;對數據編碼,HTML實體編碼 JS編碼