Pikachu靶场:XSS之htmlspecialchars、href输出以及js输出
实验环境以及工具
Firefox浏览器、Burp Suite、Pikachu靶场
实验原理
htmlspecialchars()函数把预定义的字符转换为HTML 实体。
预定义的字符是:
&(和号)成为&
”(双引号)成为"
'(单引号)成为'
‘’< ‘’(小于)成为<
‘’> ‘’(大于)成为 >
可用的引号类型︰
ENT_COMPAT -默认。仅编码双引号。
ENT_QUOTES -编码双引号和单引号。
ENT_NOQUOTES -不编码任何引号。
href是标签中的超链接,点击后会访问目标链接。
具体步骤
XSS之htmlspecialchars
1.找到注入点进行输入尝试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8aXk3vwG-1618650355002)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417161450771.png)]](https://i-blog.csdnimg.cn/blog_migrate/701d781817e992a597e2e47f677ad95b.png)
在源码中进行查找
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45HhBjTJ-1618650355004)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417161710417.png)]](https://i-blog.csdnimg.cn/blog_migrate/db58ef23681435acbb97da8d275a2019.png)
发现输入的特殊字符被转化为了HTML实体编码,但是单引号没有被转换。
2.尝试绕过
利用单引号尝试构造payload
1'onclick='alert(123)'
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5kR286U5-1618650355006)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417162231008.png)]](https://i-blog.csdnimg.cn/blog_migrate/d6f7abf50d71c4dc269c78c5d8a1176f.png)
XSS之href
1.找到注入点进行输入尝试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqKSAyaE-1618650355007)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417163745061.png)]](https://i-blog.csdnimg.cn/blog_migrate/e84ec1f0dbb00196372a53ae8cfe54bc.png)
进入原码查找
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mh0UMi6k-1618650355010)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417163833094.png)]](https://i-blog.csdnimg.cn/blog_migrate/39eec53cf18fdedc516a8a689aea42b5.png)
那么可以尝试用JavaScript协议来执行js语句。
2.进行注入
构造payload
javascript:alert(123)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUTT2Qsf-1618650355011)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164248759.png)]](https://i-blog.csdnimg.cn/blog_migrate/ad9ef512b74745bfc52cea1a6aeebb8a.png)
XSS之js输出
1.找到注入点进行输入尝试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bdYdQ6C-1618650355012)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164359134.png)]](https://i-blog.csdnimg.cn/blog_migrate/abfae1197f9f493e7a0c8f45a51200d3.png)
在源代码中查看
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4LzE4tm-1618650355012)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164510143.png)]](https://i-blog.csdnimg.cn/blog_migrate/e1012f245a64ce45b4aa7de5a93026a9.png)
发现一段js代码,输入的内容赋值给了一个变量$ms,那么可以尝试构造闭合实现我们输入的js代码。
2.尝试注入
构造payload
x'</script><script>alert('123')</script>
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KTjy6bsS-1618650355013)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164912678.png)]](https://i-blog.csdnimg.cn/blog_migrate/bd96d66607adb7351a292e0419b903ba.png)
总结
只用htmlspecialchars进行过滤,会留下单引号没有被转换。利用单引号依然可以做出相应的攻击。
在a标签的href中可以利用JavaScript协议执行js语句。在有输入接口,并且将输入内容直接赋值给变量的,可以构造闭合来执行恶意js代码。
本文通过Pikachu靶场详细介绍了三种XSS攻击方式:利用htmlspecialchars漏洞、a标签的href属性以及js输出。针对每种场景,文章提供了具体的攻击步骤和payload构造方法。
1727






