Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 7. 9. 00:44
Pwnable (11. coin1) Wargame/Pwnable
728x90

이번 포스트에서는 Pwnable의 coin1 문제에 대해 다루겠다.

 


문제는 다음과 같다.

## 문제 해석 :

가짜 코인을 찾는 문제이다. N는  동전의 갯수이며 C는 시도 가능 횟수이다. 총 100개의 가짜 코인을 찾으면 flag를 획득할 수 있는 것으로 보인다.

 

해당 문제는 이진탐색 알고리즘을 통해 쉽게 해결할 수 있다.

## 문제 풀이 :

우선 임의의 정수를 넣어서 시도해보겠다.

1차 시도

임의의 정수 "50"을 넣었을 때 "50"의 무게값이 출력된 것을 확인할 수 있다. 이어서 "1", "2", "3", "4"를 넣었을 때 네 가지 수의 무게값의 합이 출력된 것을 확인할 수 있다.

 

이어서 이진탐색을 활용하여 공격코드를 작성해보겠다.

## 최종 결과 : 

### 공격 코드 :

from pwn import *

PORT = 9007
REMOTEHOST = "127.0.0.1"


r = remote(REMOTEHOST, PORT)
r.recvuntil('- Ready?')

for k in range(100):
    r.recvuntil('N=')
    N = int(r.recvuntil(' '))
    r.recvuntil('C=')
    C = int(r.recvuntil('\n'))
    print("N : {} C : {}".format(N, C)) 

    low = 0
    high = N - 1
    for t in range(C):
        mid = low + (high - low) // 2
                
        payload = ""
        for i in range(low, mid + 1):
            payload += str(i) + " "
        r.sendline(payload)
        ret = int(r.recvline())
        
        if ret % 10 == 9:
            high = mid
        elif ret % 10 == 0:
            low = mid + 1
            
    r.sendline(str(high))
    print(r.recvline())

r.interactive()
r.close()

*** 참고로 해당 문제는 실행 속도 때문에 로컬이 아닌 pwnable 서버에 실행을 해야지 재시간에 flag를 획득할 수 있다. 필자는 pwnable의 첫 번째 문제인 fd에 접속하여 폴더를 생성한 다음에 해당 공격 코드를 실행하였다.

공격 파일 생성

### 실행 결과 :

공격 실행

 

Flag = b1NaRy_S34rch1nG_1s_3asy_p3asy

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

Pwnable (13. lotto)  (0) 2022.07.11
Pwnable (12. blackjack)  (0) 2022.07.10
Pwnable (10. shellshock)  (0) 2022.07.08
Pwnable (9. mistake)  (0) 2022.07.07
Pwnable (8. leg)  (0) 2022.07.06
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!