ropasaurusrex 문제

 

우분투에 checksec으로 어떤 문제인지 파악해준다

NX enabled : NX bit가 활성화 되어 있는 것을 알 수 있다.

 

Nx bit

Never execute bit, 프로세서 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU 기술입니다.

이 문제에서는 ASLR과 NX기법이 둘다 활성화 되어 있어 ROP기법을 이용해 문제를 풀어야 된다.

 

IDA

디스어셈블러 : 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴

파일의 코드를 보기 위해 IDA에서 디 컴파일 해준다.

 

ida를 다운받고 파일을 디버깅하려고 했지만.. 실패했다.....아직도 어떻게 하는지 모르곘다.. 그래도 ropasaurusrex 문제가 어떻게 풀리는지 공부하려면 ida 실행방법 찾다가 시간이 다 가버릴꺼같아서 성공한 사례의 사진을 첨부해왔다...

main 함수를 보면 어떤 사용자 정의 함수를 실행하고 Win을 반환해준다.

 

이것도...

사용자 정의 함수를 보면

ebp-0x88에 buf가 위치하고 read함수를 이용해 256byte를 입력받는다.

버퍼의 크기는 136byte인데 read함수는 256byte를 입력받는다.

read함수에서 0x100만큼 입력할 수 있지만 buf는 0x88크기를 가져서 bof가 발생한다.

 

이 파일이 가진 함수 read, write로 ROP를 해야 한다.

 

▶ stripped라고 쓰여 있으면 파일에 symbol이 없어서 gdb로 main함수를 disas할수 없다.

▶ 찾아야 될것

1. read plt

2. read got

3. write plt

4. write got

 

objdump -d ropasaurusrex | grep ret -B3

위의 명령어를 통해 

read plt = 0x0804832c , write plt = 0x0804830c 인걸 알수 있다

 

가젯을 구해주는데 여기 바이너리에서 사용되는 write()와 read()는 모두 인자 3개를 요구하는 함수여서

Pop_Pop_Pop_Ret가젯을 구해준다. PPPR주소는 0x80484b6이다.

 

info file명령어를 사용하여 해당 바이너리의 모든 영역의 주소값을 볼 수 있다.

 

main함수가 있는 .text영역 시작주소에 브레이크를 걸었는데..

권한허용이 안되있었다

 

다시!

해결!!

여기서 write got은 0x8049614 , read got은 0x804961c인걸 알 수 있다.

 

/bin/sh\0x00 문자열을 넣을 writeable한 고정영역을 구해준다

.bss영역 사이즈도 충분해서 .bss를 이용한다

 

성공.. 지금까지 했던것들 중에서 제일 어렵고 이해하지 못했다.. 겨우겨우 참고하면서 실습했다.. 실습한거 자체의 의미를 둬야될꺼 같다.. 저번 과제는 페이로드를 직접 짤 수 있었지만 이번 과제는 아예 감도 안왔다.......... 종강하고 다시 봐야겠다..

 

 

페이로드드 참고: https://pwnwiz.tistory.com/169

 

0x04.Plaid 2013 - Ropasaurusrex

0x04.Plaid 2013 - Ropasaurusrex 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/ropasaurusrex 매일 쓴다 쓴다하면서도 안썼던 ROP CTF 문제에 대한 라이트업을 쓰게 되었다. 이 문제를 스택 오버플..

pwnwiz.tistory.com

 

+ Recent posts