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

level 1

一开始界面上什么都没有,一般是从url上想办法
顺便查一下php代码,
这样的弹窗脚本即可

level 2

在2中,输入了一传正常的js,,发现可以出现相关代码,但是可以看出来,预定义的字符代码已经被转译成了HTML实体了。
果然 echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'

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

使用payload:"onclick="window.alert()
形成
输入后成功弹窗

level 3

这里按着上面的也来一下,发现不行
第三关的两个地方都加了htmlspecialchars函数处理,但是htmlspecialchars默认配置是不过滤单引号的。只有设置了:quotestyle,才可以
那么就用单引号来测试
payload :'onclick='window.alert()
构造闭合语句:

level 4

这一关,查看源代码发现,多了几个str
ini_set("display_errors", 0); $str = $_GET["keyword"]; $str2=str_replace(">","",$str); $str3=str_replace("<","",$str2); echo "

没有找到和".htmlspecialchars($str)."相关的结果.

".'

这里仔细看一下就知道,在这里将输入的内容分别去掉了 <,> ,然后,外围的引号变成了双引号,可以用第三关的payload稍作修改。
payload:·"onclick="window.alert()
构造成:

level 5

这题输入了上文的代码,会发现变了
'onclick='window.alert()<------变成----->'o_nclick='window.alert()
在on中加上了下划线。
那么应该怎么做 查看代码
$str = strtolower($_GET["keyword"]); $str2=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'

发现它把script 和 on 中加入了下划线。
那么鼠标事件,就不能用了。
可以考虑下用链接(href),即在链接中调用js
payload: ">点我就xss
构造:
点我就xss
如此一来,创建了一个"点我就xss"的可点击链接的文本,点击,产生xss

level 6

同样的,输入和onclick 都会被加上下划线
同时,href也是
查看源代码$str2=str_replace("
还有scr,data,等也是。
然鹅,少了一个函数strtolower(),把所有字符转换为小写。
所以,我们可以用大写!
payload ">test

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 :">alert()
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('"','"',$str6);


?>
echo '


友情链接
';
?>

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

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

payload javascript:alert()

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

level 9

这题跟上题目差不多,就是在友情链接上多了一点判断
if(false===strpos($str7,'http://')) { echo '


友情链接
';
若检测不到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这里进行构造语句
<>被转换成空,那么

你可能感兴趣的:(XSS 的通关小游戏实战讲解,xss练习源码)