什么是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:

 <form action="/htmli_get.php" method="GET">

         <p>
<label for="firstname">First name:</label><br>
<input id="firstname" name="firstname" type="text">
</p> <p>
<label for="lastname">Last name:</label><br>
<input id="lastname" name="lastname" type="text">
</p> <button type="submit" name="form" value="submit">Go</button> </form>

对应的PHP代码:

 <?php
if(isset($_GET["firstname"]) && isset($_GET["lastname"]))
{
$firstname = $_GET["firstname"];
$lastname = $_GET["lastname"];
if($firstname == "" or $lastname == "")
{
echo "<font color=\"red\">Please enter both fields...</font>";
} else
{
echo "Welcome " . $firstname . " --- " . $lastname;
}
}
?>

分析:

在表单提交的时候没有对用户输入的数据进行处理,并且在PHP代码中echo的时候没有处理就打印到页面,当我们在文本框中输入类似代码:

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

那展示到页面的结果将会是一个可以跳转页面的超链接,同样我们也可以获取cookie。

B:Medium级别(初级的字符处理)

测试

发现,超链接没有实现

cookie也盗取不了。

源码分析:

HTML:

不变

PHP:

 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^M
// Bypasses double encoding attacks
// <script>alert(0)</script>
// %3Cscript%3Ealert%280%29%3C%2Fscript%3E^M
// %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E^M
$input = urldecode($input); return $input; }

通过源码,我们可以看到,开始使用了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)

直接查看源码,进行一下审计

后台源码:

 function xss_check_3($data, $encoding = "UTF-8")
{ // htmlspecialchars - converts special characters to HTML entities
// '&' (ampersand) becomes '&amp;'
// '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
// "'" (single quote) becomes ''' (or &apos;) only when ENT_QUOTES is set
// '<' (less than) becomes '&lt;'
// '>' (greater than) becomes '&gt;' return htmlspecialchars($data, ENT_QUOTES, $encoding); }

发现代码中用了一个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

bWAPP练习--injection篇之HTML Injection - Reflected (GET)的更多相关文章

  1. bWAPP练习--injection篇之HTML Injection - Reflected (POST)

    POST的和之前的GET的过程差不多,只是表单的提交方式不一样而已. low 我们在表单中填入一个超链接 <a href="http://www.cnblogs.com/ESHLkan ...

  2. Web for pentester_writeup之Commands injection篇

    Web for pentester_writeup之Commands injection篇 Commands injection(命令行注入) 代码注入和命令行注入有什么区别呢,代码注入涉及比较广泛, ...

  3. Web for pentester_writeup之Code injection篇

    Web for pentester_writeup之Code injection篇 Code injection(代码注入) Example 1 <1> name=hacker' 添加一个 ...

  4. bWAPP练习--injection篇SQL Injection (GET/Search)

    SQL注入: SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到 ...

  5. Portswigger web security academy:Server-side template injection(SSTI)

    Portswigger web security academy:Server-side template injection(SSTI) 目录 Portswigger web security ac ...

  6. Inversion of Control Containers and the Dependency Injection pattern(转)

    In the Java community there's been a rush of lightweight containers that help to assemble components ...

  7. SQL injection

    SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...

  8. Injection with CDI (Part I)

    官方参考:http://docs.jboss.org/weld/reference/latest/en-US/html/index.html https://antoniogoncalves.org/ ...

  9. Inversion of Control Containers and the Dependency Injection pattern

    https://martinfowler.com/articles/injection.html One of the entertaining things about the enterprise ...

随机推荐

  1. Tomcat报错java.lang.ClassNotFoundException: 2localhost.org.apache.juli.FileHandler

    Can't load log handler "1catalina.org.apache.juli.FileHandler" java.lang.ClassNotFoundExce ...

  2. [uva11806]容斥定理

    n*m的矩形 k个人 第一行,最后一行,第一列,最后一列都至少站有一个人 小水题 正着做不好做,要反着想,那就容斥定理,ABCD四种情况分别是那四个行列分别没有人. #include<cstdi ...

  3. HDU 2577 How to Type (字符串处理)

    题目链接 Problem Description Pirates have finished developing the typing software. He called Cathy to te ...

  4. hdu 1200 To and Fro(简单模拟或DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1200 To and Fro Time Limit: 2000/1000 MS (Java/Others ...

  5. Fiddler抓取HTTPS协议

    HTTPS协议握手过程: 1,客户端明文请求,把自己支持的非对称加密算法(用于使用CA证书公钥加密计算生成协商密钥的随机数per_master).对称加密算法(用于以后使用协商密钥加密传输内容).验证 ...

  6. 为什么Windows7打开项目的方式是灰的不能修改

    http://jingyan.baidu.com/article/d3b74d64a964691f77e60900.html 进入组策略编辑器,即运行gpedit.msc,进入“用户配置”-“管理模板 ...

  7. nginx配置文件的详细讲解

    user nginx nginx; #定义Nginx运行的用户和用户组worker_processes 1; #nginx进程数,建议设置为等于CPU总核心数worker_rlimit_nofile ...

  8. C#多线程编程之:集合类中Synchronized方法与SyncRoot属性原理分析

    我们知道,在.net的一些集合类型中,譬如Hashtable和ArrayList,都有Synchronized静态方法和SyncRoot属性,他们之间有联系吗?我怎么才能用好他们呢? 以Hashtab ...

  9. C#面向对象(OOP)入门—第二天—多态和继承(继承)

    介绍: 第一天的内容主要是不同情形下的方法重载.这一部分则主要讲面向对象中继承的概念.首先用一个要点图形来定义继承. 继承 一个简单的例子: ClassA: class ClassA:ClassB { ...

  10. 修改VNCSERVER 默认的分辨率的方法

    vi /usr/bin/vncserver /1024 找到默认的1024*768修改为 :1680*1050 reboot 重启