05.XSS绕过姿势
本文最后更新于521 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

level-1

1.寻找输入输出点
Pasted image 20241106152705.png

Pasted image 20241106153241.png

2.插入js代码出现弹框
Pasted image 20241106152822.png

Pasted image 20241106152854.png

####总结
js弹窗alert()

level-2

输入js代码无作用,出现过滤
Pasted image 20241106155446.png

Pasted image 20241106155334.png

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体(文本),如:将<转换为&lt;,>转换为>,使得代码无法运行。

但是在第二个输出点没有过滤
可以进行构造闭合
"><script>alert(1)</script>

Pasted image 20241106160315.png

成功!!!
Pasted image 20241106160035.png

总结

闭合绕过

level-3

Pasted image 20241106173802.png

插入构造的js代码后,依然被过滤(两个“的颜色不一样,说明被过滤)
Pasted image 20241106173956.png

把 ” 换成 ‘ 时成功转义
Pasted image 20241106174552.png

使用事件,添加属性,发现多了一个 ’
Pasted image 20241106175152.png

构造’ onclick=’alert(1),成功添加属性
Pasted image 20241106175507.png

点击搜索框,触发弹框
Pasted image 20241106175617.png

总结

使用事件onclick绕过html实体化

level-4

Pasted image 20241106190427.png

发现尖括号消掉了,可以用事件
Pasted image 20241106195139.png

输入一个 ‘
Pasted image 20241106195355.png

输入 “ 成功闭合

Pasted image 20241106195443.png

” onclick="alert(1)
Pasted image 20241106195909.png

Pasted image 20241106200025.png

level-5

Pasted image 20241106200251.png

script转义了

Pasted image 20241106200421.png

onclick也转义了

Pasted image 20241106200650.png

使用js的伪协议
构造闭合,添加a标签(跳转链接)
"><a href=javascript:alert(1)>你好</a>

Pasted image 20241106201056.png

Pasted image 20241106201212.png

Pasted image 20241106201814.png

Pasted image 20241106201606.png

总结

插入标签 如a标签的href属性

level-6

Pasted image 20241106201959.png

href被过滤
Pasted image 20241106202140.png

使用大写绕过
script大写也行
Pasted image 20241106202508.png

Pasted image 20241106202521.png

总结

大小写绕过

level-7

script没有了,可能是双写

Pasted image 20241106202649.png

Pasted image 20241106202951.png

Pasted image 20241106202923.png

成功绕过
Pasted image 20241106203229.png

总结

双写绕过

level-8

该关过滤有点严格,前面的方法都用不上
可以使用html字符实体
点我跳转

Pasted image 20241106204255.png

使用时 &#x (16进制)

在线中文/Unicode编码转换 – 实用工具

Pasted image 20241106204637.png

t -> 74
Pasted image 20241106204844.png

总结

href属性自动解析Unicode编码

level-9

Pasted image 20241106205127.png

Pasted image 20241106210039.png

Pasted image 20241106205352.png

定义和用法

strpos() f函数查找字符串在另一字符串中第一次出现的位置(区分大小写)。

**注释:**strpos() 函数是区分大小写的。

**注释:**该函数是二进制安全的。

相关函数:

  • strrpos() – 查找字符串在另一字符串中最后一次出现的位置(区分大小写)
  • stripos() – 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
  • strripos() -查找字符串在另一字符串中最后一次出现的位置(不区分大小写)

链接插入js
%0d url编码–回车
javascrip&#x74:%0dhttp://%0aalert(1)
Pasted image 20241106210313.png

level-10

发现没有输入的地方,打开开发者工具之后发现输入框隐藏了

Pasted image 20241106213747.png

发现没有提交按钮
Pasted image 20241106213917.png

此时就用到代码审计
发现get传参

Pasted image 20241106214043.png

只有t_sort传参有输出
Pasted image 20241106220836.png

t_sort="%20type="text"%20onmousemove="alert(1)

Pasted image 20241106221827.png

把后面的type属性顶掉
type="hidden"—>…..

总结

根据源码猜传参的参数名,隐藏的input标签可以插入type=“text”显示

level-11

10–>11关时

Pasted image 20241106223102.png

输入点在请求头里
Pasted image 20241106223339.png

找到输入输出点
Pasted image 20241106230322.png

修改输入点
" type="text" onmousemove="alrt(0)
Pasted image 20241106230540.png

成功修改
Pasted image 20241106231327.png

Pasted image 20241106231229.png

总结

考虑http头传值,本关是referer

level-12

找到输入点

Pasted image 20241109190742.png

进行抓包
更改UA头
" type="text" onmousemove="alrt(0)
Pasted image 20241109191140.png

放过数据包
成功
Pasted image 20241109191214.png

总结

UA头传值

level-13

Pasted image 20241109191506.png

抓包
Pasted image 20241109191527.png

修改cookie
" type="text" onmousemove="alrt(0)
Pasted image 20241109191702.png

放行
Pasted image 20241109191802.png

总结

cookie传值

level-14

找到输入输出点
Pasted image 20241109192348.png

ng-include指令就是==文件包涵==的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号

Pasted image 20241109193313.png

所以可以随便包涵之前的一关并对其传参,以达到弹窗的效果
Pasted image 20241109193351.png

对比发现,这里有个html实体化函数在,没有删掉东西,所以不影响我们接下来的操作,我们可以包涵第一关并让第一关弹窗(注意,这里不能包涵那些直接弹窗的东西如 < script >,但是可以包涵那些标签的东西比如< a>、< input>、< img>、< p>标签等等,这些标签是能需要我们手动点击弹窗的),这里我们使用img标签,可参考XSS常见的触发标签,构造payload

Pasted image 20241109193630.png

当然也能用p标签,可以构造payload

?src='/level1.php?name=<p onmousedown=alert()>哈哈哈</p>'

总结

ng-include文件包涵,可以无视html实体化

level-16

Pasted image 20241109194236.png

script被过滤
Pasted image 20241109194315.png

尝试双写,发现过滤了
Pasted image 20241109194527.png

使用其他标签
发现空格过滤
< img scr=%0donerror=alert(1)>
Pasted image 20241109194801.png

使用%0d unicode编码代替空格
Pasted image 20241109195255.png

总结

回车代替空格绕过检测

level-17

Pasted image 20241109195605.png

加了空格后发现元素被顶掉了
Pasted image 20241109195748.png

插入onmousemove事件
Pasted image 20241109200008.png

Pasted image 20241109200141.png

level-18

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇