Pikachu靶场之XSS
1.反射型XSS-get
出现一个这样的页面,直接输入特殊字符,看是否被过滤掉
似乎没啥异常,直接查看源代码,
接着输入测试代码:
1 | <script>alert(1)</script> |
如下:
结果发现输不下了,接下来就用到了我们浏览器的开发者工具
我们改一下长度限制,改成2000吧,然后再输入
1 | <script>alert(1)</script> |
结果有了:
2.反射型XSS-Post
映入眼帘的就是登录界面,为了针对性地练习XSS,直接点击提示,得到登陆账号和密码,随即登录
得到的是一个输入框
接下来的解题步骤与get的反射型XSS的一样,
两者的区别在于,get型是以url方式提交数据,而post型是以表单的方式提交数据
也就是说,再上一个get型的题目里我们可以通过url来改变参数利用漏洞,而在这里不可以
3.存储型XSS
1.DOM型XSS
先输入一些特殊字符看是否过滤
1 | 1''<>& |
可以发现并没有什么过滤,然后直接输入
1 | <script>alert(1)</script> |
直接出现弹窗
2.DOM型XSS-X
点击蓝色字体出现两行字,
查看源代码发现调用的函数domss()中存在XSS漏洞,且是在a标签里的
接下来输入
1 | #' onclick='alert(1)'> |
点击“让往事随风”,随后就出现了弹窗
4.xss盲打
丝- XSS盲打是个啥
“xss盲打”是指在攻击者对数据提交后展现的后台未知的情况下,网站采用了攻击者插入了带真实攻击功能的xss攻击代码(通常是使用script标签引入远程的js)的数据。当未知后台在展现时没有对这些提交的数据进行过滤,那么后台管理人员在操作时就会触发xss来实现攻击者预定好的“真实攻击功能”。
也就是只有从后台才能看到前端输入的内容,从前端无法判断是否存在xss
原文链接:https://blog.csdn.net/weixin_51446936/article/details/117482606
出现了两个框,随意输入一些信息,出现了“谢谢参与……”,但看不到刚刚所输入的内容,说明已经被存储到后台
接下来我们点击提示,进入所给的网站(在没有提示的情况下,用disearch扫描后台)发现是一个登陆界面,通过爆破得到账号密码登陆后就出现弹窗
5.XSS过滤
输入特殊字符发现没有对它们过滤
输入
1 | <script>alert(1)</script> |
结果如下,事实证明,确实是对script语句过滤了
查看源代码:
1 | </div> |
尝试一下大小写绕过,没问题
6.xss之htmlspecialchars
- 了解一下什么是htmlspecialchars:
htmlspecialchars()就是把一些预定的字符转换为实体,
预定义的字符是:
&(和号) 成为&
“ (双引号) 成为 "
‘ (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
在前端显示正常,在后端源代码中则是转换后的字符串,
也就是说:该函数能把预定义的字符串编码后显示在后端,然后再在后端转换为原来的形式显示在前端
htmlspecialchars()常见的有效flag常量:
ENT_COMPAT:会转换双引号,不转换单引号
ENT_QUOTES:单引号和双引号都转换
ENT_NOQUOTES:单双引号都不转换
现在进入靶场:
先输入特殊字符测试是否存在过滤
查看源代码:
显而易见,单引号没有被过滤
然后我们根据a标签插入的herf特性输入测试代码:
1 | ’ onclick='alert(1)' |
1 | javascript:alert(document.cookie) |
7.XSS之href输出
打开网页,是一个输入框,输入特殊字符,发现对它们过滤了
由于输出在a标签的href属性里面,我们可以使用Javascript协议来执行js
直接输入:
1 | Javascript:alert(1) |
出现弹窗:
8.XSS之JS
输入”555“,查看源代码
1 | <script> |
输入tmac,
我们尝试造成闭合,先把前面的script语句闭合,再插入自己的语句
1 | a'</script><script>alert(111)</script> |
然后弹框出现