XSS相关一些个人Tips(二)

2019-04-29 约 1474 字 预计阅读 3 分钟

声明:本文 【XSS相关一些个人Tips(二)】 由作者 抹布 于 2019-04-29 09:45:00 首发 先知社区 曾经 浏览数 26 次

感谢 抹布 的辛苦付出!

前言


这篇文章,主要是补充一些其他的。

“圆括号”


假设过滤了(),怎么进行弹框呢?如果仅仅只考虑这点,可执行payload还满多的。

最简单的,用反引号代替圆括号。

<img src=x onerror=alert`1`>

引入伪协议,以及location,然后进行编码拆分。

<img src=1 onerror=alert%28%29>

<img src=1 onerror=location="javascript:"+"aler"+"t%281%29">

这里引用P牛文章的过滤代码,利用这个代码来测试学习。

<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])?$_GET['xss']:'';
$xss = str_replace(array("(",")","&","\\","<",">","'","`"), '', $xss);
echo "<img src=\"{$xss}\">";
?>

我还特地过滤了反引号,不然用反引号代替括号直接弹。

来个好玩的例子,这个例子来自XSS挑战第一期Writeup的一个payload。

我们既然不能用(),很多人第一思路肯定是url编码(),url编码为%28%29,而上面那个例子,通过赋值变量a等于字符串"%2",巧妙通过+拼接字符串(1)

成功弹窗。

Throw


除了上面拼接编码的操作外,我们不得不提到thorw,在文档“Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters”中在提到了一个很有趣的话题。那就是在圆括号被过滤的情况下,如何去执行javascript,文中给出的答案是。

<a onmouseover="javascript:window.onerror=alert;throw 1>

throw语句用来抛出一个用户自定义的异常,而使用onerror来捕获异常,来完成弹窗这个操作。

看个例子:

伪协议执行,onerror捕获的异常,成功弹框。

top赋值给_,所以后面2个_等价于top,除了top,还可以用self parent frames content window其中一个代替。

弹框。

这里引用了 IE8/IE9 filter 的一个技巧(%00)。

在IE下会弹出一个错误。

location


这段会介绍,利用lacation对象属性相关的利用,先来上张图。

这张图,清晰的展示了,lacation对象不同的属性在网页url中的体现。

这里我要介绍的是location.search

查看上面的文档,location.search设置或返回当前 URL 的查询部分即问号?之后的部分,如果你不太理解,那我们来看个小例子下。

假设我们现在的网页url为http://localhost/1.html?id=s9mf#Test。那么在控制台输出location.search,返回结果会是怎样呢?

返回结果为?id=s9mf,即以?之后部分,而#之后部分属于location对象的hash属性所控制,所以不会在控制台显示。

location.search可以用数组键名索引的方式来访问设置的?之后的部分。

利用上述特性,把(1)放在url查询部分,定义a变量赋值为location.search,再用location.search以数组键名索引的方式取回来(1)

成功弹框

利用注释和location.hash,把alert(233)放在#后面,再调用回来。

弹框~

eval执行,IE下报错弹框

duang~

This


在介绍this前,我们需要把前面的测试代码修改下,使其在<input>标签内。

<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])?$_GET['xss']:'';
$xss = str_replace(array("(",")","&","\\","<",">","'","`"), '', $xss);
echo "<input value=\"$xss\">";  
?>

还是和以前的过滤条件。

this 总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象。

alert后面跟着的是url编码的(),name被赋值,this.name返回一个对象,用onfocus事件在对象获得焦点时发生。

duang~

this结合函数<svg onload="a(this);function a()(alert(1))">

最后

上面绝大部分payload参考自XSS挑战第一期Writeup,真的学到蛮多的。从上面那些例子可以体现出,如果你了解浏览器间差异的特性,以及出色的前端知识,那么我相信你对xss的理解比一般人更厉害。

参考

关键词:[‘安全技术’, ‘WEB安全’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now