html %3ca%3e 动态效果,bWAPP练习--injection篇之HTML Injection - Reflected (GET)

什么是Injection?

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

什么是HTML injection?

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

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

平台简介:

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

漏洞利用:

页面

2433938edfc6dabaaff52340e4ff7c072b0.jpg

我们可以看到这是一个Form提交表单的页面,并且是get请求方法。

我们提交一些信息看看

2801f9d577b9ce7f03d9e21ed15d37b62ac.jpg

474f19e6b96e7b8f30e1fc15f73000687a6.jpg

提交后可以看到,我们提交的信息在页面上显示。并且也在地址栏里面看到我们的信息,这是get请求的一个特征。

A:Low级别(未进行任何过滤)

A-1:增加外链,影响SEO,提升外链的PR

PAYLOAD:http://127.0.0.1/htmli_get.php?firstname=ESHLkangi&lastname=ESHLkangi&form=submit

效果:

4df3af4669e4b88fb1bb18a220b1f4ff750.jpg

A-2:反射性xss漏洞,进一步可以伪造存在xss漏洞的恶意网址执行自己DIY的ji代码,从而搜集到其他人的信息。

PAYLOAD:http://118.89.17.134/htmli_get.php?firstname=&lastname=ESHLkangi&form=submit

效果:

7269cf0bab6da422e26dd3d984e0a88bd5d.jpg

盗取了cookie。

源码分析:

HTML:

1

2

3

4 First name:

5

6

7

8

9 Last name:

10

11

12

13 Go

14

15

对应的PHP代码:

1 <?php2 if(isset($_GET["firstname"]) && isset($_GET["lastname"]))3 {4 $firstname = $_GET["firstname"];5 $lastname = $_GET["lastname"];6 if($firstname == "" or $lastname == "")7 {8 echo "Please enter both fields...";9 }10

11 else

12 {13 echo "Welcome " . $firstname . " --- " . $lastname;14 }15 }16 ?>

分析:

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

ESHLkangi

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

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

测试

78564245862367ea45d2e7752b0b5cfca1b.jpg

发现,超链接没有实现

72f67a35d3f8ba66a09931a0b8339324a14.jpg

cookie也盗取不了。

源码分析:

HTML:

不变

PHP:

1 function xss_check_1($data)2 {3 //Converts only "" to HTLM entities

4 $input = str_replace("", ">", $input);6 //Failure is an option^M7 // Bypasses double encoding attacks8 // 9 // %3Cscript%3Ealert%280%29%3C%2Fscript%3E^M10 // %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()函数的过滤即可。建议把所有特殊的符号都进行编码,例如"=","/"等

ESHLkangi

进行urlencode后

%3Ca href="http://www.cnblogs.com/ESHLkangi/"%3EESHLkangi%3C/a%3E

把编码后的输入到文本框内

a768da46dee5863030ff201b38c9c1db4a2.jpg

成功绕过!!!

C:High级别(htmlspecialchars)

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

后台源码:

1 function xss_check_3($data, $encoding = "UTF-8")2 {3

4 //htmlspecialchars - converts special characters to HTML entities5 // '&' (ampersand) becomes '&'6 // '"' (double quote) becomes '"' when ENT_NOQUOTES is not set7 // "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set8 // '' (greater than) becomes '>'

10

11 return htmlspecialchars($data, ENT_QUOTES, $encoding);12

13 }

发现代码中用了一个htmlspecialchars()函数。简单分析一下这个函数:

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号)成为 &amp

"(双引号)成为&quot

'(单引号)成为'

< (小于)成为 &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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值