1. IDA - pseudo code 확인
sub_80483f4 함수 : 0x88 = 136 바이트인 buf 변수에 256 바이트 입력받아서 overflow 취약점 있다.
2. protection tech 확인
3. read, write 함수의 plt, got 주소 구하기
read 함수와 write 함수 호출하려면 plt 주소가 필요하고,
read_got를 system 함수 주소로 덮으려면 read_got 필요!
-write의 plt 주소 -> write 함수 호출해 read_got 영역의 주소 출력
read_plt = 0x804832c
read_got = 0x804961c
write_plt = 0x804830c
4. ROP 컨셉
# method1
1. read(0, bss, len(shellcode)) : bss 영역에 shellcode 넣음
2. mprotect(bss, 0x1000, 7) : mprotect 함수로 shellcode 넣은 bss 영역의 0x1000 크기를 rwx 권한을 줌
3. bss 실행 => bss 실행해서 shellcode 줘서 실행하면 쉘 실행
# method2
1. read 함수 이용해 “/bin/sh” 명령을 쓰기 가능한 메모리 영역에 저장 => "/bin/sh" 전달
read(0, writableArea, len(str(binsh)))
2. write 함수 이용해 read 함수의 .got 영역에 저장된 값 출력 => read_got 받아 libcBase 구하자
write(1, read_got, len(str(read_got)))
3. read 함수 이용해 read 함수의 .got 영역에 system 함수의 주소로 덮어씀 => system_addr 전달
read(0, read_got, len(str(read_got)))
4. read 함수 호출
read(writableArea)
– read.got 영역에 system 함수의 주소가 저장되어 있기 때문에 system 함수가 호출됨
따라서 실질적으로 system(writableArea)를 하는 것과 같음!
5. 필요한 정보
“/bin/sh” 명령 저장할 writable 한 메모리 공간
Read(), write() 함수의 plt, got
System 함수 주소 => offset을 구해서 libcbase에 더하는 것으로 구하자
"pop,pop,pop,ret" 가젯 위치 => read, write 함수 모두 인자 3개이므로 "pop;pop;pop;ret" 가젯 사용
6. writable space
0x8049000 – 0x804a000 영역이 writable space이다.
$ objdump -h ./ropsaurusrex
“.got.plt”, “.data”, “.bss” 섹션이 위의 writable 영역에 속한다.
따라서 “.bss” 섹션에 shellcode를 올리고 mprotect 함수로 실행권한을 주면 쉘코드가 실행될 수 있다.
mprotect 함수는 addr를 페이지에 맞게 넣어야 하므로 1000 단위로 “.bss” 섹션에서…주소를 선택하려는데 크기가 너무 작다… 그냥 writable space 주소를 1000 단위로 아무거나 고르자.
Shellcode 넣을 주소 : 0x804a000
(mprotect로 실패해서 0x8049628로 선택..!)
$ objdump -d ./ropsaurusrex | grep -B3 “ret”
“pop;pop;pop;ret” 가젯 주소 : 0x80484b6
6. buf에서 return address까지 거리
우분투랑 ida에서 디버깅 안 되서 거리를 못 구하겠는데…
buf 크기가 136 바이트니까 SFP 4 바이트 더해서 140 바이트로 생각하고 해보자…
(근데 맞았다...!)
7. exploit code
8. exploit
r0pbaby 풀고 정리 (0) | 2019.08.16 |
---|---|
[Defcon 2015] r0pbaby (0) | 2019.08.16 |
[HITCON-Training] lab5 : simplerop (0) | 2019.08.15 |
[TAMU 2019] pwn2 (0) | 2019.08.14 |
[TAMU 2019] pwn1 (0) | 2019.08.14 |