bWAPP练习--injection篇之HTML Injection - Reflected (GET)

什么是Injection?

  injection,中文意思就是注入的意思,常见的注入漏洞就是SQL注入啦,是现在应用最广泛,杀伤力很大的漏洞。

 

什么是HTML injection?

   有交互才会产生漏洞,无论交互是怎么进行的。交互就是网页有对后台数据库的读取或前端的动态效果。HTML文件并不是像大家想的那样没有任何交互,在HTML文件里还是会用到一些JavaScript来完成自己需要的一些动态效果,例如,地址栏的参数就是location,用户所做的点击触发事件,以及一些动态的DOM交互都会影响到JavaScript的执行导致漏洞的产生。

  如果HTML文件可以被injection的话,那么就可以利用本地的HTML文件在本地域内执行JavaScript代码,权限是非常高的。

   

平台简介:

  bWAPP:漏洞平台,开源web应用

 

漏洞利用:

页面

我们可以看到这是一个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

 

posted @ 2018-01-13 22:04  ESHLkangi  阅读(2308)  评论(1编辑  收藏  举报