第二届陇剑杯半决赛&&决赛 数据分析

这次和好兄弟组队了一只叫做Root的队伍打陇剑杯,最终半决赛逐日组第三、总榜第八晋级决赛,在决赛逐日组第四、总榜第八获得三等奖,应该是获一、二、三等奖里唯二由在校学生组成的战队(另一只是信工大)。不过写wp的时候比赛问了哪些题都忘的差不多了,测,所以只写了我记得到的。

半决赛

我们队应该是场上为数不多ak了的队伍,最后两个多小时全队直接开始植物大战僵尸了,难绷

easy

第一问

问test用户登录的密码是多少

第二问

图片中隐藏的数字是多少

把这个流的数据提取出来保存成zip

解压后得到一个宽高明显不正常的11.bmp,puzzlesolver爆破即可

第三问

被加密的字符串是多少

私钥

公钥

加密算法

密文

写脚本解密即可:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

def decrypt_message(encrypted_message, private_key_path):
    with open(private_key_path, 'rb') as f:
        private_key = RSA.import_key(f.read())
        cipher = PKCS1_OAEP.new(private_key)
        decrypted_message = cipher.decrypt(encrypted_message)
        return decrypted_message.decode()

# 加密消息的示例代码
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

private_key_path = "./PRIVATEKEY.txt"#私钥
encrypted_message=open('./encrypted_file', 'rb').read()#把密文原始数据导出成文件


# 解密消息
decrypted_message = decrypt_message(encrypted_message, private_key_path)
print("解密后的消息:", decrypted_message)

session

第一问

通过注入得到的username是?

虽然那个注入语句比较抽象,不大看得出来怎么盲注的,但我们可以通过注入的最后一个字符判断正确的字符,比如一个一个看包,发现依次是abcdefabcd……,那么显然f就是正确的字符,因为它的下一个字符从头开始遍历了。当时注入得到的好像是.adminadmin111….,点号显然是注入失败了,所以用户名就是adminadmin111

第二问

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

第三问

通过debug读取的哪个文件没有找到

这个文件没找到,所以是/etc/1

第四问

通过什么命令反弹的shell,提交md5加密的32位小写字符串

只有这个是200,解码后md5就是答案

easyshiro

第一问

系统的shiro key是多少,提交格式flag{xxxx}

爆破一下即可

工具链接:https://buaq.net/go-172230.html

flag{4AvVhmFLUs0KTA3Kprsdag==}

第二问

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

把有一个一长串的remember=xxx提取出来:

用key解密后获得反序列化后的.class字节码:(https://potato.gold/navbar/tool/shiro/ShiroTool.html)(这个站纯前端实现的,ctrl+s了就能保存到本地了)

把这个class文件用Idea进行反编译:

中间这一段显然就是执行的代码,只是简单混淆过了,本地输出一下就可以了:

public class Main {
    
	public static void main(String[] args) {
	     int[] var21 = new int[]{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};
                                    byte[] var22 = new byte[var21.length];

                                    for(int var23 = 0; var23 < var21.length; ++var23) {
                                        var22[var23] = (byte)(var21[var23] ^ 21);
                                    }
		System.out.println(new String(var22));
	}
}

flag{6dfdc384d6025b2ab9b71ec15971aa11}

第三问

攻击者植入了内存webshell,使用这个webshell做了什么,其中有flag

解密内存马数据可以发现key为eac9fa38330a7535,然后aes解密

flag{1198be3b489ae0ddf88d0e6733e88fa6}

决赛

Win7

一个windows镜像取证题。

第一问

问的是镜像密码,因为这个镜像被wmware加密了,但题目题干提示了rockyou,所以用pyvmx-cracker爆破即可,最后密码是somewhere,用密码可以把虚拟机的加密取消,然后就能用取证工具一把梭了。

第二问

问的是windows上xshell的密码,火眼一把梭即可, 依稀记得密码是123456a

第三问

问的是登录脚本运行的程序路径,你打开那个windows虚拟机会弹计算器,排查一下文件会发现是有个叫2333.bat的文件在搞鬼,它里面写着calc,所以弹计算器了,因此答案是2333.bat的绝对路径(全小写)。

第四问

问的是访问www.baidu.com的次数,用浏览器历史记录看或者取证大师一把梭都能出来,依稀记得答案是10。

mid

第一问

问最先写入木马的连接密码,一个一个找,第一个是写入.1ndex.php那个,密码是1,不是写入1ndex.php那个:

第二问

问黑客从通过读取哪个文件获取了账号密码

那串base解码出来就是账号密码,所以是通过读取robots.txt

第三问

admin密码是通过哪个函数加密的

第四问

问hack用户的密码。

观察有一个包,这里黑客执行的命令是cat了/etc/shadow,但是很奇怪一个用户都看不懂:

我们在自己本地看看正常的/etc/shadow输出是什么:

很明显ebbg其实是root,qnrzba其实是daemon,jjj-qngn其实是www-data以此照推,所以unpx其实就是hack往前偏移13位后的结果,所以hack用户密码就是这个哈希解出来,但我们在场上最后没跑出来,测。

现在再来看没跑出来hash的原因其实很简单,因为这个输出的哈希应该也是偏移过了,我们把黑客执行的命令解码一下:

fdc4afba5b变成了sqp4nson5o,也就是说数字不偏移,字母偏移,写个还原脚本:

string = "unpx:$6$fpW3Kt1dCVadIIgT$WnsrSrGpdFOzKGpoANbTFlg4GxiMcijYuYl89SZ9p1snxYqxljs5rYmhSyrqg01CcBKapFHPUeJ83CW0IYP370:19586:0:99999:7:::"
offset = 13

encrypted_string = ""
for char in string:
    if char.islower():
        encrypted_string += chr((ord(char)-ord('a') + offset) % 26 + ord('a'))
    elif char.isupper():
        encrypted_string += chr((ord(char)-ord('A')+ offset) % 26 + ord('A'))
    else:
        encrypted_string += char

print("加密后的字符串为:", encrypted_string)
hack:$6$scJ3Xg1qPInqVVtG$JafeFeTcqSBmXTcbNAoGSyt4TkvZpvwLhLy89FM9c1fakLdkywf5eLzuFledt01PpOXncSUCHrW83PJ0VLC370:19586:0:99999:7:::

把这个文件保存为result.txt,然后john爆破即可‘

sudo john ./result.txt --format=crypt

ransom

第一问

问的是勒索病毒的哈希,流量包里翻一下可以看到有个test.exe,估计就是这个了,certutil 计算即可

certutil -hashfile test.exe sha256
SHA256 的 test.exe 哈希:
223ea13efd517d185708aff1da8b9cbbd9d1b97d1cb3e7b9107cda2ffcb599c9
CertUtil: -hashfile 命令成功完成。

第二问

问的是加密了多少文件,慢慢翻,在TCP第358个流可以看到一堆base64

解码出来就是具体加密了哪些文件

慢慢数呗

第三问

让你还原被加密的secret.txt。

看到有个老哥发的wp上有做法,照着复现一下

赛事|第二届“陇剑杯”网络安全大赛线下决赛WriteUP

拖进去shift f12可以看到这里有个E:/tmp.txt文件

看到第277个流

这里读取了tmp.txt

输出是464ROI2+9sM+kxbMBiaBog==,但是base64完乱码了,base64后转16进制的值为e3ae11388dbef6c33e9316cc062681a2

282查看了secret.txt.enc

输出是P4m0zim6ISDKTc8yamhuNMqrgoCR3kB9cVFvhRvMFt0rVIS4zboCsF/Q/PLV0dH0,base64然后转16进制得到3f89b4ce29ba2120ca4dcf326a686e34caab828091de407d71516f851bcc16dd2b5484b8cdba02b05fd0fcf2d5d1d1f4

逆向源码得到病毒加密使用了aes加密的cbc模式,并且加密前还用文件名异或了文件内容(不知道咋分析的,那个微信文章这么写的)

from Crypto.Cipher import AES
from pwn import xor
key = bytes.fromhex('e3ae11388dbef6c33e9316cc062681a2')
c =bytes.fromhex('3f89b4ce29ba2120ca4dcf326a686e34caab828091de407d71516f851bcc16dd2b5484b8cdba02b05fd0fcf2d5d1d1f4')
enc = AES.new(key=key, mode=AES.MODE_CBC, iv=b'1234567890abcdef')
print(xor(enc.decrypt(c)[:-6], b"secret.txt"))
#flag{84bc7475-13e4-4177-92a1-00bb1d476442}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇