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:
<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("<", "<", $data);
$input = str_replace(">", ">", $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 '&'
// '"' (double quote) becomes '"' when ENT_NOQUOTES is not set
// "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set
// '<' (less than) becomes '<'
// '>' (greater than) becomes '>' return htmlspecialchars($data, ENT_QUOTES, $encoding); }
发现代码中用了一个htmlspecialchars()函数。简单分析一下这个函数:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为>
它的语法如下:
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)的更多相关文章
- bWAPP练习--injection篇之HTML Injection - Reflected (POST)
POST的和之前的GET的过程差不多,只是表单的提交方式不一样而已. low 我们在表单中填入一个超链接 <a href="http://www.cnblogs.com/ESHLkan ...
- Web for pentester_writeup之Commands injection篇
Web for pentester_writeup之Commands injection篇 Commands injection(命令行注入) 代码注入和命令行注入有什么区别呢,代码注入涉及比较广泛, ...
- Web for pentester_writeup之Code injection篇
Web for pentester_writeup之Code injection篇 Code injection(代码注入) Example 1 <1> name=hacker' 添加一个 ...
- bWAPP练习--injection篇SQL Injection (GET/Search)
SQL注入: SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到 ...
- Portswigger web security academy:Server-side template injection(SSTI)
Portswigger web security academy:Server-side template injection(SSTI) 目录 Portswigger web security ac ...
- 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 ...
- SQL injection
SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...
- Injection with CDI (Part I)
官方参考:http://docs.jboss.org/weld/reference/latest/en-US/html/index.html https://antoniogoncalves.org/ ...
- Inversion of Control Containers and the Dependency Injection pattern
https://martinfowler.com/articles/injection.html One of the entertaining things about the enterprise ...
随机推荐
- Mayor's posters(线段树+离散化+区间染色)
题目链接:http://poj.org/problem?id=2528 题目: 题意:将n个区间进行染色(对于同一个区间,后一次染色会覆盖上一次的染色),问最后可见的颜色有多少种. 思路:由于区间长度 ...
- HDU 1548 A strange lift (广搜)
题目链接 Problem Description There is a strange lift.The lift can stop can at every floor as you want, a ...
- spring cloud ribbon 断路器
@EnableDiscoveryClient @SpringBootApplication @EnableCircuitBreaker //开启断路器 public class ConsumerMov ...
- JavaWeb使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 1.什么是表单 ...
- 今天安装了arch,感觉不错,这速度可以
虽然没有想想中的那么那么快,不过已经可以了 总结一下遇到的问题以及i自己安装的软件 1.u盘硬盘不能自动挂载 安装gvfs 2.不能读写挂载 安装ntfs-3g 3.时间不对 照wiki上的说 #ln ...
- Perl6 Bailador框架(3):路径匹配
use v6; use Bailador; =begin pod 注意的是, 当/:one设置时 虽然你有/admin或/about, 但这个/:one不会跟现有的匹配 只跟没有的匹配: 也就是说, ...
- Python3 文件基本操作
Python文件的打开模式有: r,只读模式(默认).w,只写模式.[不可读:不存在则创建:存在则删除内容:]a,追加模式.[可读: 不存在则创建:存在则只追加内容:]"+" 表示 ...
- 【bzoj3682】Phorni
后缀平衡树裸题. 后缀平衡树呢,实际上是一个很naive的东西.就是用平衡树维护后缀数组. 这样的话就可以支持在最前端插入一个字符(相当于插入新的后缀) 每次比较节点的tag是O(1)的,所以可以快速 ...
- java 和 JVM
C++和Java的区别 指针:java中不存在指针的概念,编程者无法直接通过指针来直接访问内存,有利于维护java程序的安全 多重继承:C++支持多重继承,java不支持多重继承,但是允许一个类继承多 ...
- MySQL的数据库引擎的类型(转)
腾讯后台开发电话面试问到数据库引擎选用的问题,这里补习一下. 本文属于转载,原文链接为:http://www.cnblogs.com/xulb597/archive/2012/05/25/251811 ...