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

相关文章
相关标签/搜索