XSS跨站脚本攻击(level1-10)

195 阅读3分钟

​练习网站:欢迎来到XSS挑战 (angelo.org.cn)

知识点

事件:

onclick——鼠标点击事件

onmousemove——将鼠标光标移动到改内容上方触发事件

1.伪协议

javascript伪协议:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行

click me

2.反射型XSS:前端页面输入-后端PHP处理-前端页面输出

3.存储型XSS:前端页面输入-后端PHP处理-写入数据库-前端页面输出

发现留言板中的留言放在

标签中,并且存储到数据库中

将攻击语句从留言板中放入,网页会将其放入到数据库中,且永久存在

XSS

1.一个标签之间可以嵌套另外一个标签

2.左标签里面可以插入属性,但是不能插入另一个标签

3.

4.左标签里面可以插入JS事件(属性),该事件可以触发后面的JS代码

5.F12控制台可以执行JS代码

6.alert 弹窗

7.console.log("") 控制台文本输出

8.<=< %gt;=>

Level1

name=

​编辑

Level2-双引号闭合

输入查看源码

​编辑

方法一闭合标签

">

​编辑

方法二闭合双引号

" onclick=alert('xss') "

​编辑

Level3-单引号闭合

输入查看源码

​编辑

先闭合标签,发现不行

'>

>被转义

​编辑

' onmouseover=alert(1) ' 闭合前面的单引号

' onmouseover='alert(1) 闭合onmouseover

​编辑

Level4

输入<script " ' Oonn>查看源码

​编辑

1.<>被html转码

闭合标签

​编辑

Level5

输入<script " ' Oonn>查看源码

​编辑

1.<>被html转码

2.oonn变成oo_nn

3.

4.过滤大小写

闭合标签,测试伪协议

​编辑

Level6

输入<script " ' Oonn>查看源码

​编辑

1.<>被转码

2.

3.Oonn变成Oo_nn

采用大小写绕过

A." Onclick=alert(1) "

​编辑

B. ">click me!

​编辑

C. ">

​编辑

Level7

输入<script " ' Oonn>查看源码

​编辑

1.<>被转码

2.script被转义

3.过滤大小写

采用双写绕过(oonn变成on)

​编辑

Level8

输入<script " ' Oonn>查看源码

​编辑

1. 过滤大小写、双写、script、on、和双引号

进行编码绕过 #javascript:alert(1) 把c转换成十六进制(c)

​编辑

Level9

输入<script " ' Oonn>查看源码

​编辑

1. 对<>、大小写、双写、”、进行转义,且对协议进行检测

2. 尝试网页是否对http://位置检测<script ' " oonn>http://,发现并没有位置检测

​编辑

3. 用//...//将http://进行注释,否则会影响javascript

先编码后注释 # javascript:alert(1)//http://

​编辑

Level10

1.在URL测试

​编辑

2.发现被隐藏的标签,切换payload进行测试,将?keyword换成?t_link,?t_history,?t_sort进行测试,发现t_sort中有注入点

​编辑

3.构造一个新的type

?t_sort=" onclick=alert(1) type=button "

​编辑

通关笔记

第一关:
1、没有任何过滤。
2、输出在一对标签之间,插入另一对标签。
第二关:" onclick=alert(1) "
1、在页面源码第15行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
2、在页面源码第17有输出,输出在左标签里面,没有任何过滤。
3、通过闭合双引号插入onclick事件,进而通过点击触发alert()函数。
第三关:' onclick=alert(1) '
1、在页面源码第15行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
2、在页面源码第17行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
3、通过闭合单引号插入onclick事件,进而通过点击触发alert()函数。
第四关:" onclick=alert(1) "
1、在页面源码第15行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
2、在页面源码第17行有输出,但是有过滤:把<>通过str_replace()函数替换为空。
3、通过闭合双引号插入onclick事件,进而通过点击触发alert()函数。
第五关:">点击
1、在页面源码第15行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
2、在页面源码第17行有输出,但是有过滤:把<script通过str_replace()函数替换为<scr_ipt;把on替换为o_n。
3、通过">闭合标签,再插入带有javascript伪协议的标签,
第六关:" ONclick=alert(1) "
1、在页面源码第15行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
2、在页面源码第17行有输出,但是有过滤:把<script通过str_replace()函数替换为<scr_ipt;把on替换为o_n;src替换为sr_c;把data替换为da_ta;把href替换为hr_ef。
3、通过ON绕过小写on替换插入ONclick事件,进而通过点击触发alert()函数。
第七关:" oonnclick=alert(1) "
1、在页面源码第15行有输出,但是有过滤:把<>通过htmlspecialchars()函数进行html实体编码。
2、在页面源码第17行有输出,但是有过滤:强制转小写,并且把script、on、src、data、href替换为空。
3、通过双写,绕过替换为空,插入ONclick事件,进而通过点击触发alert()函数。
第八关:javascr%09ipt:alert(1)
1、在页面第17行有输出,但是有过滤,把on替换为o_n,并且进行了html实体编码。
2、在页面第20行有输出,但是有过滤,把on替换为o_n,并且进行了html实体编码。
3、通过向javascrit中插入特殊符号%0A、%09、%0D,绕过script的替换。
第九关:
1、在javascript中,可以使用//进行注释
第十关:
1、在html标签中:type="hidden"表示隐藏该标签,可以向前插入type="text"显示该标签,两者同时出现,优先执行左边的。