profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 3. 20. 20:19

1. 문제 

 

 

파일을 실행시키니 뭐가 굉장히 많이 나왔다.

 

 

 

 

일단 1번을 클릭하자, 문제에 적용된 보호기법들이 나왔다.

NX bit가 적용된 것으로 보아 스택에 쉘을 넣어 실행하지는 못할 것으로 보인다.

 

 

 

 

그리고 2,3,4 번은 돈(Gold)과 관련된 것들이었다.

 

 

 

 

 

이번엔 ida로 파일을 열어보았다.

메뉴 선택 > switch문 별로 나눠지는 것 같다.

 

 

 

 

그 중에서도 case 5(Attack)에 해당하는 것이 눈에 띄었다.

buf에 0x400u 즉, 1024 byte 만큼 입력을 받고 있는데, buf의 크기는 고작 128 byte이다.

따라서 bof를 일으켜 RET 값을 변경할 수 있을 것이다.

 

그런데, NX 보호 기법이 적용되어있기에 그것을 우회하기 위해 실행 가능한 영역에 있는 코드 즉, 외부 라이브러리 함수를 이용할 수 있다.

 

마침 또 문제에서 system 함수가 사용이 되므로 system 함수를 이용해 "/bin/sh"을 실행시키면 될 듯하다.

즉 우리에게 필요한 건 system 함수의 주소와 "/bin/sh"의 주소, 그리고 offset이다.

지금부터 하나씩 구해보도록 하자.

 

 

2. 문제 해결 과정 

 

gdb를 통해 구하였다.

 

system_plt의 주소 : 0x080485b0

 

 

 

ida를 통해 구하였다.

 

/bin/sh의 주소 : 0x08048eb1

 

 

 

main의 스택 프레임

 

buf 의 주소는 ebp-0x8C이므로, ebp로부터 140byte 만큼 떨어져있다.

따라서 (140+4) 만큼을 dummy 값으로 채우고 Return address에 system 함수의 주소를, 그리고 뒤에 4byte(RET), 마지막으로 /bin/sh의 주소를 system 함수의 인자값으로 전해주면 된다.

 

그래서 payload는 다음과 같을 것이다.

payload = "A"*144 + system_plt 의 주소 + "BBBB" + /bin/sh의 주소

 

 

3. Exploit

 

 

위의 논리대로 payload를 작성해보았다.

메뉴 선택에서 5번으로 분기시킨 다음 ">"까지 받고 payload를 전송하였다.

 

 

 

 

성공적으로 쉘을 획득한 모습이다!

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

[HackCTF] Offset  (0) 2021.04.15
[HackCTF] RTL_Core  (0) 2021.03.31
[HackCTF] x64 Simple_size_BOF  (0) 2021.03.19
[HackCTF] Basic_FSB  (0) 2021.03.19
[HackCTF] Basic_Bof #2  (0) 2021.03.19
복사했습니다!