bWAPP練習--injection篇之HTML Injection - Reflected (GET)

什麼是Injection?php

  injection,中文意思就是注入的意思,常見的注入漏洞就是SQL注入啦,是如今應用最普遍,殺傷力很大的漏洞。html

 

什麼是HTML injection?前端

   有交互纔會產生漏洞,不管交互是怎麼進行的。交互就是網頁有對後臺數據庫的讀取或前端的動態效果。HTML文件並非像你們想的那樣沒有任何交互,在HTML文件裏仍是會用到一些JavaScript來完成本身須要的一些動態效果,例如,地址欄的參數就是location,用戶所作的點擊觸發事件,以及一些動態的DOM交互都會影響到JavaScript的執行致使漏洞的產生。web

  若是HTML文件能夠被injection的話,那麼就能夠利用本地的HTML文件在本地域內執行JavaScript代碼,權限是很是高的。數據庫

   

平臺簡介:cookie

  bWAPP:漏洞平臺,開源web應用less

 

漏洞利用:xss

頁面函數

咱們能夠看到這是一個Form提交表單的頁面,而且是get請求方法。源碼分析

咱們提交一些信息看看

提交後能夠看到,咱們提交的信息在頁面上顯示。而且也在地址欄裏面看到咱們的信息,這是get請求的一個特徵。

 

A:Low級別(未進行任何過濾)

  A-1:增長外鏈,影響SEO,提高外鏈的PR

  PAYLOAD:http://127.0.0.1/htmli_get.php?firstname=<a href="http://www.cnblogs.com/ESHLkangi/">ESHLkangi</a>&lastname=ESHLkangi&form=submit

  效果:

  

  A-2:反射性xss漏洞,進一步能夠僞造存在xss漏洞的惡意網址執行本身DIY的ji代碼,從而蒐集到其餘人的信息。

  PAYLOAD:http://118.89.17.134/htmli_get.php?firstname=<script>alert(document.cookie)</script>&lastname=ESHLkangi&form=submit

  效果:

  

盜取了cookie。

 

 源碼分析:

HTML:

 1 <form action="/htmli_get.php" method="GET">
 2 
 3         <p>
 4         <label for="firstname">First name:</label><br>
 5         <input id="firstname" name="firstname" type="text">    
 6        </p>
 7 
 8         <p>
 9         <label for="lastname">Last name:</label><br>
10         <input id="lastname" name="lastname" type="text">
11         </p>
12 
13         <button type="submit" name="form" value="submit">Go</button>  
14 
15 </form>            

對應的PHP代碼:

 1 <?php
 2     if(isset($_GET["firstname"]) && isset($_GET["lastname"]))
 3     {   
 4         $firstname = $_GET["firstname"];
 5         $lastname = $_GET["lastname"];    
 6         if($firstname == "" or $lastname == "")
 7         {
 8             echo "<font color=\"red\">Please enter both fields...</font>";       
 9         }
10 
11         else            
12         { 
13             echo "Welcome " . $firstname . " --- " . $lastname;   
14         }
15     }
16 ?>

分析:

在表單提交的時候沒有對用戶輸入的數據進行處理,而且在PHP代碼中echo的時候沒有處理就打印到頁面,當咱們在文本框中輸入相似代碼:

<a href="http://www.cnblogs.com/ESHLkangi/">ESHLkangi</a>

那展現到頁面的結果將會是一個能夠跳轉頁面的超連接,一樣咱們也能夠獲取cookie。

 

B:Medium級別(初級的字符處理)

 測試

發現,超連接沒有實現

 

cookie也盜取不了。

 

源碼分析:

HTML:

不變

PHP:

 1 function xss_check_1($data)
 2 {
 3 // Converts only "<" and ">" to HTLM entities 
 4 $input = str_replace("<", "&lt;", $data);
 5 $input = str_replace(">", "&gt;", $input);
 6 // Failure is an option^M
 7 // Bypasses double encoding attacks
 8 // <script>alert(0)</script>
 9 // %3Cscript%3Ealert%280%29%3C%2Fscript%3E^M
10 // %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E^M
11 $input = urldecode($input);
12 
13 return $input;
14 
15 }

經過源碼,咱們能夠看到,開始使用了str_replace()函數過濾"<"和">"這兩個特殊字符處理了,最後,用了urldecode()函數進行解碼,把URL編碼還原字符串。

POC:

依據代碼的思路,咱們能夠先對"<"、">"進行urlencode,繞過str_replace()函數的過濾便可。建議把全部特殊的符號都進行編碼,例如"=","/"等

<a href="http://www.cnblogs.com/ESHLkangi/">ESHLkangi</a>

進行urlencode後

%3Ca href="http://www.cnblogs.com/ESHLkangi/"%3EESHLkangi%3C/a%3E

把編碼後的輸入到文本框內

成功繞過!!!

 

 C:High級別(htmlspecialchars)

直接查看源碼,進行一下審計

後臺源碼:

 1 function xss_check_3($data, $encoding = "UTF-8")
 2 {
 3 
 4     // htmlspecialchars - converts special characters to HTML entities    
 5     // '&' (ampersand) becomes '&amp;' 
 6     // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
 7     // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
 8     // '<' (less than) becomes '&lt;'
 9     // '>' (greater than) becomes '&gt;'  
10     
11     return htmlspecialchars($data, ENT_QUOTES, $encoding);
12        
13 }

發現代碼中用了一個htmlspecialchars()函數。簡單分析一下這個函數:

htmlspecialchars() 函數把預約義的字符轉換爲 HTML 實體。

預約義的字符是:

& (和號)成爲 &amp
" (雙引號)成爲 &quot
' (單引號)成爲 &#039
< (小於)成爲 &lt
> (大於)成爲&gt

它的語法以下:

htmlspecialchars(string,flags,character-set,double_encode)

其中第二個參數flags須要重要注意,不少開發者就是由於沒有注意到這個參數致使使用htmlspecialchars()函數過濾XSS時被繞過。由於flags參數對於引號的編碼以下:
可用的引號類型:
ENT_COMPAT - 默認。僅編碼雙引號。
ENT_QUOTES - 編碼雙引號和單引號。
ENT_NOQUOTES - 不編碼任何引號。

 

能夠看到的是咱們這裏是使用了ENT_QUOTES 編碼的,把單引號也過濾了。

技術尚菜,想實現繞過有點困難,如今只能這樣了。。。

 知乎上有些解答,能夠參考https://www.zhihu.com/question/27646993

相關文章
相關標籤/搜索