什么是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. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

  2. android抽屉导航的设计准则

    我阅读了google官方的关于抽屉导航的设计准则,这可以给我带来什么帮助?最起码,我可以知道,抽屉导航适用在什么场景中,使用它时要注意什么事项.App的设计是有规则可以依据的,比如,使用抽屉导航时,是 ...

  3. 【bzoj2038-小z的袜子】莫队算法

    莫队例题. 莫队学习:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 本题 分子是sigma(c(sum[a[i]],2)),分母是sigma ...

  4. 【BZOJ】1833 [ZJOI2010]count 数字计数

    [算法]数位DP [题解] 记忆化搜索 #include<cstdio> #include<algorithm> #include<cstring> #define ...

  5. 【Codeforces】868C. Qualification Rounds

    [题目]C. Qualification Rounds [题意]给定n个问题和K个人,给定每个人知道的问题列表,求能否找到一个非空问题集合,满足每个人知道的集合中问题数量都不超过集合总题数的一半.n& ...

  6. hdu 1217 Arbitrage (spfa算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意:通过货币的转换,来判断是否获利,如果获利则输出Yes,否则输出No. 这里介绍一个ST ...

  7. Android控件——监听按钮的点击事件

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAroAAAFTCAIAAABZPDiZAAAgAElEQVR4nOy9918UWfb///1jdu2uBs

  8. 《Linux内核原理与设计》第十一周作业 ShellShock攻击实验

    <Linux内核原理与设计>第十一周作业 ShellShock攻击实验 分组: 和20179215袁琳完成实验及博客攥写 实验内容:   Bash中发现了一个严重漏洞shellshock, ...

  9. ThinkSnS v4后台任意文件下载漏洞

    漏洞文件: /apps/admin/Lib/Action/UpgradeAction.class.php 主要问题还是出现在了180行直接将远程获取到的图片直接保存. 文中可见并没有做任何的对$dow ...

  10. Mongo 配置文件 [www]

    Mongo 配置文件  [www] http://blog.chinaunix.net/uid-25206403-id-3510934.html mongodb 安装使用 http://blog.si ...