ropasaurusrex 문제
▶ 우분투에 checksec으로 어떤 문제인지 파악해준다
NX enabled : NX bit가 활성화 되어 있는 것을 알 수 있다.
▶ Nx bit
Never execute bit, 프로세서 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU 기술입니다.
이 문제에서는 ASLR과 NX기법이 둘다 활성화 되어 있어 ROP기법을 이용해 문제를 풀어야 된다.
▶ IDA
디스어셈블러 : 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴
파일의 코드를 보기 위해 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
'보안 > 포너블' 카테고리의 다른 글
포너블 Day7 dreamhack basic_rop_x86 문제 풀기 (0) | 2021.05.26 |
---|---|
포너블 Day6 basic_exploitation_001 풀기 (0) | 2021.05.19 |
포너블 Day6 pwnable.kr bof (0) | 2021.05.19 |
포너블 Day5 GDB 실행 과정 (0) | 2021.05.12 |
포너블 Day5 GDB설치, 명령어 (0) | 2021.05.12 |