2023. 2. 24. 21:36ㆍPwnable/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 |