0x00前言
无聊耍一耍游戏
0x01闯关
## Level1:
比较简单,第一关随便插一插就好。
Payload: <script>alert(1)</script>
##Level2
首先了解一下 htmlspecialchars( )函数。
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
同样的提交第一关的payload: <script>alert(1)</script>
查看第一关的html源码
可以看到成功的将<script>嵌入了html里,而再第二关,加入了这个htmlspecialchars()函数过后,我们查看第二关的html源码
可以看到<>符号被实体化了,这个函数对xss攻击有防护作用。
但是第二关的xss在另一个点
简单的对整个语句进行闭合就行了。
Payload: 1"><script>alert(1)</script>
##Level3
与第二关的区别就在于,这关把两个可控点都进行了实体化处理。这里就利用了htmlspecialchars()的一个特点,当htmlspecialchars没有设置第二个参数时,默认不转义单引号
所以这里只需要闭合单引号,引入事件即可。
Payload:1’ onclick=’window.alert(1)
记得完了过后要去点一下,才会弹框
##level4:
看源码做题还是挺简单的,这里过滤了 <>,但是str3没有实体化,直接用事件
Payload: “ onclick=”window.alert(1)
##level5
和第四关不同的是,这里的$str3过滤了<script和on,这样不能用<script>和一些事件,但是这里又没有过滤<和>,所以可以重新构造标签<a href=”javascript”>
Payload: “><a href=javascript:alert(1);>test</a>
##level6
虽然过滤了很多,但是可以大写绕过。。
Payload: “><SCRIPT>alert(1)</SCRIPT>
##level7
把这些字符过滤为空。。双写绕过就好
Payload : "><scscriptript>alert(1)</scscriptript>
##level 8
过滤了很多,可以看到 href 里面放了可控变量,但是这里script也被过滤了,看了wp,编码绕过,用的是 htmlencode 编码,这个burp 可以直接编码
Payload : javascript:alert()
## level9
和第八关的区别就是这里要链接里面必须包含 http:// ,用注释绕过,html里也有注释哦
Payload: javascript:alert() /*http:// */
##Level10
这关如果是黑盒测试的话,都不知道怎么去找到这个t_sort参数,估计是因为源码中有
然后尝试去get 尝试这几个参数
这里当我们 输入 “onclick=”window.alert(1),是可以成功插入html的,但是却没有地方点击触发
只要我们在后面添加一个 type = “text 这样覆盖了后面个hidden,然后就有一块text区域让我们触发
最终payload: t_sort=“onclick=”window.alert(1)type=”text
然后点击就行
##level 11
把referer放入标签中,用事件就行差不多的。
Payload: “onclick=”window.alert(1)” type=”text
然后点击触发
##level 12
也是差不多的,换汤没换药,改一下ua就行了
Payload:
然后也是同样去点击一下框框就行了
##level13
添加一下cookie里的user就好
Payload:
#level14
我曹这是什么东西??没见过。很骚的操作,等下整理。
##level15
不求会,,后面整理
##level16
过滤了 script,过滤了空格和‘/’这两个连接符,但是还可以用%0a或者%0d绕过,script的话添加标签,用事件绕过 // “/”也是连接符
添加新标签和编码绕过:
Payload: <img%0asrc=1%0aonerror=alert(1)>
##level17
这道题留了几个疑问。
这里两个参数都放在里面的,
但是这里 src=后并没有引号,所以我们不需要输入引号,直接空格带进去就可以嵌入事件造成xss
这里传入
arg01=a%20onclick=window.alert(1)%20b&arg02=b
成功闭合,但是这里不知道为啥点击了过后不会弹窗,后来百度才知道,onclick不持支 <embed> 标签
这里用 onmousedown=
支持onmousedown 事件的 HTML 标签:
onmousedown 属性适用于所有 HTMl 元素,除了: <base>, <bdo>, <br>, <head>, <html>, <iframe>, <meta>, <param>, <script>, <style>, 和 <title>.
Payload:
arg01=a%20onmousedown=window.alert(1)%20b&arg02=b
##level18
和17一样
##level19
输入arg01=a&arg02=b
可以看到,现在有双引号了,
这道题思路好像我一点都没了解过,后面整理,因为我已经迫不及待的去挖两个了。
0x02总结
参考了这个师傅的总结挺不错的:https://blog.csdn.net/yukinorong/article/details/99824352
1)根据查看html来看怎样去拼接。
2) 被实体化了过后可以尝试一下单引号
3)更好用的标签:<img src=x onerror=alert(1)>
和<a href=javascript:alert(1)>111</a>
4)更好用的参数:onmouseover=alert(1)
5)注释 /**/ 和 // 拼接有 空格和 / 但是有时候也可用 %0d%0a
6)关键字过滤问题:
- 大小写绕过(html不区分大小写),
- 双写绕过(只删除一次关键字的过滤)
- html字符编码转码绕过(特殊符号,关键字字母),
- 回车空格替换