xss-games 各level的 write-up
level1:直接即可
level2:在 基础上需要添加"> 进行闭合后通过
![1597287013377](https://i.loli.net/2020/11/15/segD6CpSNKybPRM.png)
level3:源代码将我们输入的尖括号进行了转义处理(采用htmlspecialchars函数)
改用鼠标点击事件'onclick ='alert(2)点击后出现弹窗
level4:源代码看出它直接将尖括号过滤掉了
我们"onclick="alert(1)或者 "onmouseover="onclick=alert(1) 先对语句进行闭合后执行alert
level5本关将
可以看php源代码 发现它是将keyword(我们输入的东西)全部转成小写后进行替代,而尖括号没有替代
">< a h ref ='javascript:alert(1)'/>构造这样后通关。
level6
本题替换了许多关键字 但是没有对keyword 大小写判断
直接">< a hRef ='javascript:alert(1)'>绕过即可
level7
关卡对各种字符替换成了空格 并且对大小写也进行了判断
采用">< scrscriptipt>alert(1)< /scrscriptipt>闭合后 重复写 通关
level8
源代码在level7多了将引号过滤 没办法闭合
采用hackbar 中html编码将 javascript:alert(1)编码即可
level9
源代码在level8的基础上 用strpos()函数对我们的输入限制要有http://字段 ,其他均与level8一致
可以将我们要的内容编码后加上 //http://www.baidu.com (注释掉后面的网页绕过)
level10
源代码尝试后发现我们输入的keyword参数 直接变成了字符串展示出来 对我们来说没有用处
发现下面还有三个参数 一个个在url中赋值后 发现只有t_sort会被写入到html中
随后对第三个参数xss
level12
源代码显示一共四个参数 keyword会被显示为字符串,考虑其他几个
能显示的只有t_sort 但是这次它用htmlspecialchars()进行了保护
看到t_ua 显示的是http头的user-agent信息
可以burpsuite抓包后 修改user-agent信息,进行xss攻击
level13
13关和十二关代码大致相同,只是第三个参数变成了http报文头的cookie
我们还是需要抓包来修改cookie的头进行攻击
level15
在源代码中有弹窗脚本"ng-include"(相当于include)
关于指令ng-include
:
- ng-include 指令用于包含外部的 HTML 文件
- 包含的内容将作为指定元素的子节点。
- ng-include 属性的值可以是一个表达式,返回一个文件名。
- 默认情况下,包含的文件需要包含在同一个域名下。
思路是:让它包含level1.php文件后构造payload,利用img标签路径错误出发onerror时间来alert
`'level1.php?name=test'`
level16
源代码看出和常规一样对script / 等进行替换, 对空格也进行了替换
输出方式用
输入的时候用空格做语义分隔会被转义
采用%0a(相当于回车)进行语义分隔,由于它对/也进行了替换,我们采用不用闭合标签的方法< a> < img>
payload1: <img%0asrc=1%0aonerror=alert(1)>
payload2: <a%0Ahref="javas%0Acript:alert(1)">
xxs-games总结
攻击方法:
- 用< script>alert(1)< /script>
- onclick=alert(1)点击后出现弹窗
- < a href ='javascript:alert(1)'>生成链接
- 将xss代码用hackbar编码后插入
- 修改user-agent、referer、cookie头信息
- 用\\ x3c表示< 用 \\x3e表 >(对于<>被过滤)
防御方法:
-
采用htmlspecialchars()函数对标签转义(针对1,用onclick)
-
采用直接将尖括号空格等过滤掉(用2)
-
将< script>替换<scr_ipt>(用3)
-
大小写替换(用关键词重复写)
-
用strpos()输入限制'http://'等 (用增加注释的方法绕过)