2024数信杯北部赛区wp

WriteUp 2周前 admin
35 0 0


2024数信杯

2024数信杯北部赛区wp
img
2024数信杯北部赛区wp
img

战队名:西柚喵帕斯

排名:16

数据安全

Drinktea

python字节码,分析转换成python源码

 1from ctypes import c_uint32  
2import struct
3
4def encrypt(v, key):
5    v0 = c_uint32(v[0]).value
6    v1 = c_uint32(v[1]).value
7    delta = 555885348
8    total = c_uint32(0).value
9
10    for i in range(32):
11        v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ (total + key[total & 3] ^ v1)
12        total += delta
13        v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ (total + key[total >> 11 & 3] ^ v0)
14
15    return [v0, v1]
16
17key = [1900550021248309953922051725041359557939]
18arr = [
19    [3922524152941946969],
20    [11229761511335193774],
21    [8154788162529100980],
22    [2237049875188954780]
23]
24
25flag = input('please input flag: ')
26encry = []
27encryted = []
28
29for i in range(len(flag) // 8):
30    encry.append(struct.unpack('<I', flag[i*8:(i+1)*8].encode('utf-8'))[0])
31    encry.append(struct.unpack('<I', flag[i*8+4:(i+1)*8].encode('utf-8'))[0])
32    encrypted = encrypt(encry, key)
33    encryted.append(encrypted)
34
35if encryted == arr:
36    print('yes~')
37else:
38    print('no~')

简单的xtea加密,把每一段结果拼起来包flag就可以

 1from ctypes import * 
2import struct
3def encrypt(v,k):
4    v0=c_uint32(v[0])
5    v1=c_uint32(v[1])
6    sum1=c_uint32(0)
7    delta=0x9e3779b9
8    for i in range(32):
9        v0.value+=(((v1.value<<4)^(v1.value>>5))+v1.value)^(sum1.value+k[sum1.value&3])
10        sum1.value+=delta
11        v1.value+=(((v0.value<<4)^(v0.value>>5))+v0.value)^(sum1.value+k[(sum1.value>>11)&3])
12    return v0.value,v1.value
13
14def decrypt(v,k):
15    v0=c_uint32(v[0])
16    v1=c_uint32(v[1])
17    delta=555885348
18    sum1=c_uint32(delta*32)
19    for i in range(32):
20        v1.value-=(((v0.value<<4)^(v0.value>>5))+v0.value)^(sum1.value+k[(sum1.value>>11)&3])
21        sum1.value-=delta
22        v0.value-=(((v1.value<<4)^(v1.value>>5))+v1.value)^(sum1.value+k[sum1.value&3])
23    return v0.value,v1.value
24
25
26a1=[3922524152941946969]
27a2=[11229761511335193774]
28a3=[8154788162529100980]
29a4=[2237049875188954780]
30k = [1900550021248309953922051725041359557939]
31
32res1=decrypt(a1,k)
33res2=decrypt(a2,k)
34res3=decrypt(a3,k)
35res4=decrypt(a4,k)
36
37
38
39print(struct.pack('<I',res1[0]))
40print(struct.pack('<I',res1[1]))
41print(struct.pack('<I',res2[0]))
42print(struct.pack('<I',res2[1]))
43print(struct.pack('<I',res3[0]))
44print(struct.pack('<I',res3[1]))
45print(struct.pack('<I',res4[0]))
46print(struct.pack('<I',res4[1]))
47# acb8739759dc496ccc945703037e037f

Rrrccc

upx壳,直接脱脱不掉,winhex打开发现把”UPX”改成了”upx”,改回来就能直接upx -d

2024数信杯北部赛区wp
img

ida打开看一下是SMC代码自修改,动调

反调试,patch一下修改跳转条件

2024数信杯北部赛区wp
img

cipher很明显直接写出来了

2024数信杯北部赛区wp
img

过了一遍流程推测flag和cipher长度应该是相等,直接拿cipher作输入

动调跑完拿到输入的第一层加密结果,和输入异或就能得到key1

第二层异或的key2直接动调出

2024数信杯北部赛区wp
img

exp:

 1cipher = "Whatareyourencryption&decryptionbasics"
2flag = []
3#先用key2解第二层
4key2 = [0x1C0x0CB0x0F50x530x910x0CC0x3B0x660x40x7D0x0BA0x0D20x560x0CE0x140x0A40x0E80x7F0x0C20x0C40x2B0x860x320x0F00x0F70x0EA0x0FB0x0F00x780x340x9A0x30x130x0A20x910x370x480x66]
5for i in range(38):
6    flag.append(ord(cipher[i]) ^ key2[i])
7#求key1
8cipher1 = [0x7A0xA70x940x340xEA0xA80x080x020x660x4B
9  0x830xB30x650xFA0x750x910xD90x1B0xF50xA1
10  0x1A0xE20x000xC30x930xDC0xC90xC10x4D0x0D
11  0xAA0x3B0x210x950xF20x070x790x1B,]
12input = "Whatareyourencryption&decryptionbasics"
13
14key1 = []
15for i in range(len(cipher1)):
16    key1.append(cipher1[i] ^ ord(input[i]))
17#最后把第二层解密结果用key1解
18for i in range(len(flag)):
19    flag[i] ^= key1[i]
20    print(chr(flag[i]),end='')
21
22#flag{d3db69a34a51d7e1d23d621590827c01}

Magic Audio

拿到一个wav文件 先看文件尾 有个压缩包 提取出来

2024数信杯北部赛区wp
img

发现有密码 听一下这个音频 慢扫描电视 用sstv直接转

1sstv -d ctf.wav -o out.png 

得到out.png

2024数信杯北部赛区wp
img

使用这个菜就多练作为密码进行解压

2024数信杯北部赛区wp
img

数据分析

不安全的U盘1

1请提交小明电脑中的test账户的密码(格式为hash对应的明文,长度为9)

直接lsadump获得强密码

1.volatility.exe -f E:Desktop数信杯file1不安全的U盘_3ba0c570fac7eef3e90acc3eaabb5c8d1.raw --profile=Win7SP1x64 lsadump
2024数信杯北部赛区wp
img

hahaha123

不安全的U盘2(赛后复盘)

答案要求是去掉空格后是56位字符

最令我无语的一道题 当时已经把那个程序路径找到了 但是因为txt文档给我显示一共是57列 自己数的时候不知道为什么死活数不出来56位 最后错失一题的分数

展示一下当时的做题截图 真的是把可能的所有情况都列出来了  但其实第一个就是正确答案

2024数信杯北部赛区wp
image-20240430113716050

下面简单说一下做法 首先根据题干 我们得知是因为一个pdf文件导致系统被入侵 我们直接在r-studio中进行寻找并导出

2024数信杯北部赛区wp
image-20240430115702665

将这个README.pdf放入沙箱进行分析 看到执行流程中存在AcroRd32.exe

2024数信杯北部赛区wp
image-20240430115747055

在vol中搜索一下这个程序

2024数信杯北部赛区wp
image-20240430115949722

直接在红框前面加上盘符再去掉空格就是正确答案

1C:Program Files (x86)AdobeReader 9.0ReaderAcroRd32.exe
2C:ProgramFiles(x86)AdobeReader9.0ReaderAcroRd32.exe

不安全的U盘3

请提交控制小明的服务器地址:端口(格式为”ip:port”,长度为19)

netscan查看网络连接情况

1.volatility.exe -f E:Desktop数信杯file1不安全的U盘_3ba0c570fac7eef3e90acc3eaabb5c8d1.raw --profile=Win7SP1x64 netscan

找外网ip

2024数信杯北部赛区wp
img

不安全的U盘4(赛后复盘)

1找到外联地址 

直接使用vol查看.exe文件

1.volatility.exe -f E:Desktop比赛2024数信杯数据分析file1不安全的U盘_3ba0c570fac7eef3e90acc3eaabb5c8d1.raw --profile=Win7SP1x64 filescan | findstr ".exe"

看到两个比较可疑的文件 都提取出来看看

2024数信杯北部赛区wp
image-20240430153506056

放入沙箱分析

hh.exe的通信并不是外部地址

2024数信杯北部赛区wp
image-20240430154052457

但是f.exe同文件夹下有个toml软件程序配置文件

2024数信杯北部赛区wp
image-20240430155011474

提取出来 看一下内容

 1[common]
2serverAddr = "118.180.126.13"
3serverPort = 6770
4
5[plugin_socks]

6type = "tcp"
7remote_port = 32124
8plugin = "socks5"
9plugin_user = "admin"
10plugin_passwd = "admin123@qwe"
11use_encryption = true
12use_compression = true

所以外联地址是

1118.180.126.13

也可以直接在镜像文件中搜索remote_port这种配置文件中常出现的信息

网站数据绝对安全1

系统中存在的用户名是什么?

多亏后面补充了提交次数 一个个试都试出来了

2024数信杯北部赛区wp
img

网站数据绝对安全2

key3的的值是什么?

在http导出中提取出来一个safe.html

2024数信杯北部赛区wp
img

但是使用浏览器打开是

2024数信杯北部赛区wp
img

发现直接复制不行 手动输入可以

后面看了一下源码 大概率是和这个字体有关系

2024数信杯北部赛区wp
img

Bitcoin1(赛后复盘)

附件拿到的是一个Computer.ad1镜像文件 使用FTK Imager可以进行挂载

挂载的过程实在是太难受了 4.5版本的死活挂不上 后面用4.2的才挂上

在挂载的时候 一定要注意 先选择Add Evidence Item 将镜像添加为证据项

2024数信杯北部赛区wp
image-20240430204309975

在添加的证据项中选择挂载镜像

2024数信杯北部赛区wp
image-20240430204327332

成功挂载上

2024数信杯北部赛区wp
image-20240430204342877
2024数信杯北部赛区wp
image-20240430204352382

挂载好后使用火眼分析磁盘中的文件夹 选择添加文件集合检材 在ShimCache中可以看到一个比特币钱包的安装程序的最后修改时间 那这个应该就是 2022-01-05 10:21:16

2024数信杯北部赛区wp
image-20240430214903734

Bitcoin2(赛后复盘)

打开powershell 使用findwallet这个工具来查找加密比特币钱包文件

1安装
2npm install findwallet -g
3使用
4findwallet -i [inputPath/inputFile] -o [outputFile]
5
6 -i     : Required. Specify which path(s) to scan directly or through a newline separated file.
7 -o     : Specify optional output file where to store wallet paths if any exist.
8 -h     : Displays this message.
2024数信杯北部赛区wp
image-20240430212918786

在前面加上盘符

1C:WindowsSystem32configsystemprofileAppDataRoamingMicrosoftSystemCertificatesMyAppContainerUserCertRead.sys

Bitcoin3(赛后复盘)

UsersDaddyDownloads文件夹下发现了bitcoin钱包程序的安装包bitcoin-22.0-win64-setup.exe 导出安装一下

2024数信杯北部赛区wp
image-20240430213504602

打开之后新建一个钱包test

2024数信杯北部赛区wp
image-20240430213711950

将上面bitcoin2导出的钱包文件替换掉Bitcoinbitcoinwalletstestwallet.dat   注意要将上面找到的AppContainerUserCertRead.sys 改名为wallet.dat  再次重启软件 直接点隐藏

2024数信杯北部赛区wp
image-20240430214548135

点击交易记录  第二条

2024数信杯北部赛区wp
image-20240502215102589

找到钱包地址

1bc1qf3lta6zr9k4kt9q25sz47vdcnn73zyzk0m5gvz
2024数信杯北部赛区wp
image-20240502215119629

Bitcoin4

在合约CTF.sol中存在一处漏洞,该漏洞是由哪一函数造成的(比如:exec)?

gpt做题法 算是非预期解 直接喂合约的完整代码进行分析

1在这个合约文件中存在一处漏洞,由transferFrom函数造成。具体来说,这个漏洞出现在以下代码段:
2solidityCopy code
3function transferFrom(address from, address to, uint256 value) public notFrozen(from) returns (bool) {
4    require(msg.sender == owner);
5    return super.transferFrom(from, to, value);
6}
7在这段代码中,漏洞是由于require语句的条件不够严格导致的。当前的transferFrom函数实现要求调用者必须是owner,但是并没有检查调用者是否具有足够的授权来执行转账操作。因此,任何拥有owner权限的地址都可以调用transferFrom函数,而无需经过持有者的授权。


原文始发于微信公众号(SeeUSec):2024数信杯北部赛区wp

版权声明:admin 发表于 2024年5月3日 上午8:57。
转载请注明:2024数信杯北部赛区wp | CTF导航

相关文章