Xss挑战(跨脚本攻击)
首先在kali中下载xss
可以使用命令docker search xss-labs

下载xss
docker pull vulfocus/xss-labs

运行容器,映射到8088端口加载镜像
Docker run -dt -p 8088:80 vulfocus/xss-labs

用浏览器访问127.0.0.1:8088 开启xss挑战

第一关
看url地址栏里的name,修改name里面的参数,输出到等号后面,构造代码<script> alert('欢迎来钓鱼')</script>
成功通关
第二关
在输入框里输入攻击代码

页面把攻击代码进行打印了
Ctrl+U查看源码

可以看到没做过滤只是我们输入的内容都被放到了value里
那么就将这个value用双引号进行闭合,在用大于号闭合input标签,最后在加上script标签进行xss注入
1"><script>alert(/xss/)</script>>

第三关
输入一个代码测试

查看源码

我们看到小于号被过滤掉了可以看到value后面是单引号我们进行闭合添加一个html事件进行xss注入1' οnkeydοwn='alert(/xss/)

输入任意字符即可通过
第四关

查看源码

我们看到小于号被过滤掉了为空格并且闭合改为双引号那么就用双引号闭合构造html事件
"οnclick="alert(/wuhu/)
第五关
先输入上一题的攻击代码试试
"οnclick="alert(/wuhu/)

查看源码

这里将我们输入的事件onclick的on之间添加了下划线
试一下<script>标签是否可以
<script>alert(/wuhu/)</script>

发现<script>标签也被添加了下划线

这里无法使用事件了,可以使用伪协议,闭合方式为双引号
先将input标签闭合,然后构造超链接标签
"> <a href="javascript:alert(/xss/)">阜阳</a>
点击超链接

第六关
先输入攻击代码查看页面响应
<script>alert(/wuhu/)</script>

产看源代码发现script标签被添加了下划线

使用响应事件来构造攻击代码
<a href = "#" onclick = 'alert(/wuhu/)'>click me!</a>
同样页面没有响应,查看源代码,发现响应事件被添加了下划线

使用伪造协议来构造攻击代码
<a href = "javascript:alert(/xss/)">click me!</a>
同样页面没有响应,查看页面源代码,发现href被添加了下划线


采用大小绕过的方式构造攻击代码
"> <SCRIPT>alert(/wuhu/)</SCRIPT>

第七关
先输入攻击代码查看页面响应
<script>alert(/wuhu/)</script>

页面没有响应,查看页面源代码,发现我们script标签被替换为空了


源码中将script,on,src,data,href标签及属性转换为空。这里可以先使用input便签进行闭合,再双写script进行绕过
"> <scrscriptipt>alert(/xss/)</scrscriptipt>
" oonnclick="alert(/wuhu/)

第八关
先输入攻击代码产看页面响应
<script>alert(/wuhu/)</script>

页面没有响应,产看页面源代码

发现将我们构造的攻击代码放到了a标签中,并且给script标签添加了下划线。

这里将script,on,src,data,href,进行了过滤,并且在尝试的时候关键字双写不能用了,那么这里直接选择不去闭合标签,直接使用伪协议,但是发现javascript也被拆开了,这里可以对伪协议中的字母进行转码。
构造攻击代码:
javascript:alert(/xss/)
输入后点击友情连接

第九关
这一关和上一关很想,先使用上一个构造的攻击代码
javascript:alert(/xss/)

页面没有任何响应,查看页面源代码


先写一个正确的链接,然后点击友情链接,页面可以正常跳转

查看源代码,这里显示出了正常的链接地址。

源代码

这里查看我们注入的代码是否有http://,如果包含则执行else中的语句,将我们构造的攻击代码输入到href中,如果不包含则在a标签中的href显示指定字符串。
Strpos 查找字符串首次出现的位置
构造攻击代码,将http://加入到alert的()中。
javascript:alert('http://')

第十关
这一关需要给浏览器安装一个插件hacbar如果有的就不用安装了
安装步奏为:
先打开设置 点击下面的安装插件

在搜索框里输入hacbar 进行安装就行


安装后按F2查看有没有此插件

接下来继续挑战
查看源码

发现输入的内容被转为html实体编码,不过可以看到下面是由输入框但是被隐藏了,我们在F12里的开发者模式将hidden属性改为text

可以看到出来三个输入框我们用代码测试

我们可以看到只有最后一个接收到了内容我们看到只过滤了小于号那我们构造html事件进行注入1" onclick="alert(/xss/)输入之后再次修改一下类型就可以了

第十一关

查看源码

分别给t_link,t_history和t_sort赋值

发现还是只有t_sort有值
页面还是没有反应,查看源代码

发现提交给tsort的参数被过滤了
产看源代码,既然tsort不行,这里尝试使用tref参数

" type="text" onclick = "alert(/xss/)


第十二关

查看源码

发现这次传递的是USER_AGENT参数
修改USER_AGENT字段,在该字段构造我们的攻击代码
" type="button" onclick = "alert(/xss/)


第十三关

查看源码

发现这次传递的是COOKIE参数
修改COOKIE字段,在该字段构造我们的攻击代码
user=" type="text" onclick = "alert(/xss/)

点击输入框即可完成挑战
