Pikachu靶场:XSS之htmlspecialchars、href输出以及js输出

本文通过Pikachu靶场详细介绍了三种XSS攻击方式:利用htmlspecialchars漏洞、a标签的href属性以及js输出。针对每种场景,文章提供了具体的攻击步骤和payload构造方法。
该文章已生成可运行项目,

Pikachu靶场:XSS之htmlspecialchars、href输出以及js输出

实验环境以及工具

Firefox浏览器、Burp Suite、Pikachu靶场

实验原理

htmlspecialchars()函数把预定义的字符转换为HTML 实体。

预定义的字符是:
&(和号)成为&amp

”(双引号)成为&quot

'(单引号)成为&#039

‘’< ‘’(小于)成为&lt

‘’> ‘’(大于)成为 &gt

可用的引号类型︰
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)]

在源码中进行查找

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45HhBjTJ-1618650355004)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417161710417.png)]

发现输入的特殊字符被转化为了HTML实体编码,但是单引号没有被转换。

2.尝试绕过

利用单引号尝试构造payload

1'onclick='alert(123)'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5kR286U5-1618650355006)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417162231008.png)]

XSS之href

1.找到注入点进行输入尝试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqKSAyaE-1618650355007)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417163745061.png)]

进入原码查找

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mh0UMi6k-1618650355010)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417163833094.png)]

那么可以尝试用JavaScript协议来执行js语句。

2.进行注入

构造payload

javascript:alert(123)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUTT2Qsf-1618650355011)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164248759.png)]

XSS之js输出

1.找到注入点进行输入尝试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bdYdQ6C-1618650355012)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164359134.png)]

在源代码中查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4LzE4tm-1618650355012)(C:\Users\freedom\AppData\Roaming\Typora\typora-user-images\image-20210417164510143.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)]

总结

只用htmlspecialchars进行过滤,会留下单引号没有被转换。利用单引号依然可以做出相应的攻击。

在a标签的href中可以利用JavaScript协议执行js语句。在有输入接口,并且将输入内容直接赋值给变量的,可以构造闭合来执行恶意js代码。

本文章已经生成可运行项目
### Pikachu靶场中的XSS防护与`htmlspecialchars`函数 在Pikachu靶场中,针对跨站脚本攻击(XSS),通常会采用多种防御措施来增强安全性。其中一种常见的方法是通过PHP内置的`htmlspecialchars`函数对用户输入的数据进行转义处理[^1]。 #### `htmlspecialchars`函数的作用 `htmlspecialchars`是一个用于转换特殊字符为其HTML实体表示形式的函数。它能够有效防止恶意代码注入到网页中被执行。具体来说,该函数可以将以下几种常见字符替换为安全的形式: - `<` 转换为 `<` - `>` 转换为 `>` - `"` 转换为 `"` - `'` 转换为 `'` 这些转换使得原本可能被浏览器解析为HTML标签的内容变成纯文本显示,从而阻止潜在的XSS攻击行为[^2]。 #### 函数基本语法 以下是`htmlspecialchars`的标准用法: ```php string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] ) ``` 参数解释如下: - `$string`: 需要转换的字符串。 - `$flags`: 可选标志位集合,默认值为`ENT_COMPAT | ENT_HTML401`,这决定了如何处理双引号以及使用的文档标准。 - `$encoding`: 字符编码方式,默认取自服务器配置项`default_charset`。 - `$double_encode`: 是否允许重复编码已存在的HTML实体,默认开启(true)[^3]。 #### 实际应用案例 假设存在一个留言板功能,在未加任何过滤的情况下接收并展示用户的评论数据,则容易遭受反射型或存储型XSS攻击。此时可以通过调用`htmlspecialchars`函数保护输出端口的安全性。下面给出一段简单的实现代码作为示范: ```php <?php // 假设这是来自GET请求的用户提交内容 $user_input = $_GET['comment']; // 使用htmlspecialchars对输入做初步净化 $safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); echo "<p>您的留言已被记录:</p>"; echo "<div>" . $safe_output . "</div>"; ?> ``` 上述例子展示了当接收到外部传入的信息后立即运用`htmlspecialchars`将其转化为无害形态再呈现给访问者的过程[^4]。 ### 注意事项 尽管`htmlspecialchars`能很好地解决大部分基础场景下的XSS隐患问题,但在更复杂的环境中还需要考虑其他方面的加固策略,比如设置HTTP头信息、启用CSP(Content Security Policy)等综合手段共同构建稳固防线[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值