xsschallenges是一个专对于XSS漏洞练习的靶场,包含了各种绕过。适合小白进行练习,比如我自己。
此链接是xsschallenge在线靶场:欢迎来到XSS挑战 (tesla-space.com)
第一关使用get请求方式,直接在URL上进行注入命令
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
//终极测试代码
使用终极测试代码,查看有无过滤
输入终极测试代码后,查看页面源代码,发现毫无过滤,直接使用简单的弹窗命令
<script>alert('Zeus')</script>
还是照常,先使用终极测试代码,查看被过滤条件
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
与第一关不同的是,该输入内容被放入input 标签中,但是任何参数都没有被过滤。
可以考虑闭合input 标签,构造弹窗命令
使用"> 闭合value,在闭合input标签,再加上简单的弹窗命令
"><script>alert('Zeus')</script>
继续使用 终极测试代码,进行检查被过滤条件
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
查看页面源代码,查看被过滤的条件有什么
可以发现
value 是 单引号闭合
尖角号 被实体化成 <;
双引号 被实体化成 ";
由于尖角号被过滤掉了,就不能使用尖角号来构造弹窗代码了。
可以使用 事件响应 进行弹窗操作。
事件类型 | 说明 |
---|---|
window 事件 | 对windows对象触发的事件 |
Form 事件 | HTML 表单内触发的事件 |
Keyboard 事件 | 键盘事件 |
Mouse 事件 | 鼠标事件 |
Media 事件 | 由多媒体触发的事件 |
'onkeydown='alert(/Zeus/)
// 代码输入后,在输入框内 键盘按键按下,进行弹窗操作。
// 第一个单引号是为了闭合value,第二个单引号是为了跟后面的单引号配对,查看页面源代码可以看到。
还是先尝试终极源代码,查看页面源代码被过滤的条件
不难发现
尖角号 被过滤
其他的都没有被过滤。
那还是和Level 3过关代码一致,只不过单引号要换成双引号
"οnkeydοwn="alert(/Zeus/)
代码输入后,在输入框内 键盘按键按下,进行弹窗操作
使用终极测试代码,查看页面源代码,检查被过滤的条件
可以看出
关键字 被过滤了一次
大小写转化 被过滤
on事件 被过滤了一次
可以看出超链接href 没有被过滤
这一关可以使用 JavaScript伪协议 进行弹窗操作
使用 JavaScript伪协议 进行弹窗,需要闭合input 标签,构造 a标签
因为script 被过滤了一次,所以我们可以对关键字的字母进行转码,来绕过过滤。
"><a href='javascript:alert(/Zeus/)'>click me!</a>
点击 'click me' 弹窗成功
字母 [c] 十六进制转换为 [c]
继续使用终极测试代码,查看页面源代码,检查被过滤的条件
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
// 终极测试代码
不难发现
on事件 被过滤
其他都没有过滤
那我们就尝试简单弹窗代码
"><script>alert(/Zeus/)</script>
结果发现
关键字 被过滤一次
结合第一次的过滤条件,我们可以使用 大小写转换进行绕过, 也可以使用其它方法绕过欧~
大小写转换 绕过
"><sCRipt>alert(/Zeus/)</sCRipt>
第一步,使用 终极测试代码,观察页面源代码,检查被过滤条件。
不难发现
关键字 被过滤一次
双写 被过滤一次
那我们就可以利用 双写 绕过进行弹窗操作
"><scrscriptipt>alert(/Zeus/)</scrscriptipt>
还是尝试使用终极测试代码,通过页面源代码查看被过滤的条件
不难发现
尖角号 被实体化
大小写 被过滤
双引号 被过滤
关键字 被过滤一次
添加友情链接后,将鼠标放到友情链接,左下角显示的为路径,说明代码有误。
会发现通过输入框输入的代码,会上传到href超链接中
那我们可以先尝试使用 正确的网址,看能否使用
发现是可以跳转的,点击友情链接,将直接跳转到百度
根据被过滤的条件,和href超链接,我们可以使用 JavaScript伪协议 来实现弹窗操作
因为关键字还被过滤了一次,所以我们需要将script进行转码
javascript:alert(/zeus/)
c ---十六进制转换---为--- c
发现是可以跳转的,说明成功了,点击友情链接,进行弹窗操作
继续使用终极测试代码,通过页面源代码来查看被过滤的条件
可以发现
尖角号 被实体化
双引号 被实体化
大小写 被修改
通过不同的代码输入,发现传递给href的值,都显示成 您的链接不合法?有没有!
因为是a标签 所以我们先尝试使用 JavaScript伪协议 进行实验,能否看出些端疑
javascript:alert(/zeus/)
发现行不通,我们通过源代码看一眼,
可以发现 代码是没有问题的,但还是 链接不合法。
因为和第八题都有友情链接,那我们还是先输入一个正确的网址地址,看能否有其它不同地方。
http://www.baidu.com
发现是可以进行跳转的,那我们就不妨想一下,将正确的网址多次测试,看有什么效果
/http://www.baidu.com/ // 第一次测试
页面不提示 链接不合法了
/http://www.baidu // 第二次测试
发现不完整的Baidu 网址,页面回显的也不是 链接不合法
那我们不妨想一下,是不是http:// 的原因
http:// // 第三次测试
发现页面没有回显内容,那我们去页面源代码查看。
可以发现
此处并不是之前所显示的 您的链接不合法
那我们就可以将 JavaScript伪代码 进行改造
javascript:alert(/zeus/)
从 JavaScript伪代码 整体来判断,只有括号里的内容是可以进行修改。其它都不能够修改。
那我们将伪代码修改为如下形式,进行测试
javascript:alert(/http:///)
// 结果发现 script 关键字被修改了一次,那我们还是将其中的字符进行16进制编码转换,照常转化字符c 变成 c
javascript:alert('http://')
可以发现,成功绕过,此处括号里内容不能用/ 进行包含,会与http进行冲突,需要改用单引号。
注:双引号被过滤
第十关发现是没有输入框的,不过从URL地址看,该页面的传输方式还是GET方式
我们查看页面的源代码。
可以发现,3个input标签被隐藏了,不过我们可以按下F12,将hidden修改为text,输入框就显示出来了
因为有三个变量,我们要尝试这三个变量是否可以传递参数。
改过三次测试,只有第三个 t_sort 可以进行传参
没有 Hackbar 工具可以从网页上下载破解版,或者直接在URL上进行测试
第一次测试,通过元素,查看页面源代码,发现value 没有收到参数
第二次测试,发现还是没有收到参数
第三次测试
可以发现 value 可以收到参数传递
那我们的突破口就是第三个变量
使用 终极测试代码,通过源代码,判断被过滤的条件
<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>
不难发现
尖角号<> 被过滤
这一关算比较简单了
构造一个事件相应
" onmouseover='alert(/Zeus/)' type="text
onmouseover事件:鼠标移动到元素的上方触发代码。
第十一、十二、十三关都是同一个类型的。
和第十关一样没有输入框,还是查看页面源代码
可以发现比第十关多了一个变量t_ref
还是先测试每个变量能否传递参数
最后发现t_sort 是可以传递参数的
那我们就先尝试第十关过关代码,试试效果
IPT>OonN'"\/(hrHRefEF) IPT>
不难发现
尖角号 被实体化
双引号 被实体化
尖角号被实体化不能构造代码
双引号 被实体化不能闭合input标签
所以只能寻求其他办法,这一关比上一关多出来一个 t_ref 的变量
ref 我们不妨想到referer,referer 是http 的请求字段,是当前URL的上一个URL字段
那我们就利用bp进行抓包,尝试是否和猜想一致。
那我们重新从第十关进入第十一关。
然后将抓到的包,发给重发器(快捷键:ctrl+r 或 右键)
Referer是上一个URL的地址
我们试着修改Referer 内容,看能否发生改变
可以看到,的确如我们所想
t_ref 接收到了参数的传递
我们在从t_ref变量 中测试万能代码一次
IPT>OonN'"\/(hrHRefEF) IPT>
不难发现,只有尖角号 被过滤掉了
点击Render ,可以发现页面的确进行了修改
因为在Render 界面无法执行弹窗操作
那我们就要利用bp的抓包,放包了。
使用 事件相应,进行弹窗操作
" onmouseover='alert(/Zeus/)' type="text
先修改Referer 内容,再点击Forward 进行放包。
直接进入正题。
查看第十二关页面源代码。
页面源代码t_ua变量,就可以想到User-Agent,正好value的值就是User-Agent。
所以我们就可以跟第十一关的步骤一样:
先使用重发器,进行测试,判断t_ua 变量是不是User-Agent ,再进行代码输入,看页面是否进行了修改。然后在使用bp的抓包,放包,进行弹窗操作。
或者直接使用bp的抓包,放包,进行弹窗操作。
将数据包发给重发器
使用终极测试代码,查看被过滤的条件
IPT>OonN'"\/(hrHRefEF) IPT>
尖角号 被过滤
使用 事态响应 进行弹窗
" οnkeydοwn='alert(/Zeus/)' type="text
// onkeydown :一个HTML元素事件属性,用于在用户按下键盘上的键时触发相应的JavaScript函数或代码。
可以发现,页面的确发生了改变,那我们就利用bp进行抓包,放包,确认弹窗操作
第一步,修改User-Agent 内容,再点击Forward 进行放包。
步骤:
查看页面源代码 → 判断变量能否传参 →利用重发器,判断页面能否进行接受代码传递 → 利用bp抓包、放包,执行弹窗操作。
因为和第十一关、第十二关同一类型。
第十三关使用的是Cookie 传参。
所以就直接判断过滤条件了。这里需要注意的是,value的值 是由user 进行传递的,所以我们需要再将代码输入到user里
判断过滤条件
IPT>OonN'"\/(hrHRefEF) IPT>
可以看出,
单引号被过滤了
" οnkeydοwn='alert(/Zeus/)' type="text
页面发生了改变,这时使用bp进行。