profile image

L o a d i n g . . .

문제

보호기법 확인

nx, canary 가 걸려있다.

 

버퍼 크기 이상으로 값을 넣으니 카나리 값 변조에 의해 프로그램이 종료된다.

 

1. src 에 입력을 받는다. (bof 발생)

2. src 배열 인덱스 0부터 49까지 xor 비트 연산을 한다.

3. dest에 src를 복사한다. (1바이트 만큼 조작 가능)

4. 계속할 지 안할지를 묻는다.

 

 

문제 해결 과정

src 에 bof 를 발생시켜 ret 를 변경하면 될 것이다.

그런데 카나리로 인해서 SFP 바로 전에 카나리 값이 들어가 있는 상황이다.

-> 카나리 값을 빼와서 그걸 유지시키면서 익스플로잇 하면 될 것 같다.

 

카나리의 하위 1바이트가 null 값인 것을 이용해, strncpy 시 한 바이트 만큼을 조작하면

printf 를 통해 카나리 값까지 출력될 것이다.

 

실제 0x38만큼을 A로 입력하고, 한바이트 만큼을 B로 덮은 모습이다.

B로 덮은 부분부터가 카나리 값이기에 printf 시 쭉 출력되서 카나리 값까지 출력이 될 것이다.

 

 

접근 방법은 다음과 같다.

1) 카나리 leak

dummy * 0x39 만큼 보내고 그만큼 받은 뒤 카나리 값을 따로 받아서 저장한다.

 

2) 주소 leak 

dummy + canary + sfp + pr + setvbuf_got + puts_plt + main

rop를 통해 got 주소를 leak 한 후, 다시 메인으로 돌아간다.

 

3) 페이로드 전송

dummy + canary + sfp + pr + binsh + system

leak 한 주소를 바탕으로 binsh, system 주소를 구한 후 페이로드를 짜서 보낸다.

 

+ pop rdi 가젯을 구해주고, leak 한 주소를 가지고 라이브러리 버전을 확인해서 그에 맞는 오프셋 값들을 구해놓는다.

 

 

 

익스플로잇

익스플로잇 코드

 

 

성공적으로 쉘을 획득하였다!!

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

[HackCTF] RTC  (0) 2021.06.01
[HackCTF] Unexploitable #2  (0) 2021.05.23
[HackCTF] Unexploitable #1  (0) 2021.05.23
[HackCTF] UAF  (0) 2021.05.08
[HackCTF] Beginner_Heap  (0) 2021.05.08
복사했습니다!