7. 64-bit Buffer OverFlow 정리.

Creative Commons License
Creative Commons License

필자는 최근에서야 64bit 리눅스 서버를 접해보았고 그에 따라 가장 기초적인 bof 공격을 해보며 여러가지를 검색해보며 많은 지식을 습득하게 되었다.


팀원의 서버를 빌려 테스트한 것으로 팀원에게 감사를 드리고, 커널 환경은 3.13.0-32-generic이다. 그리고, SSP, NX, ASCII-Armor, ASLR이 걸리지 않은 상태로 테스트했다.


64bit의 시스템에서는 64bit의 메모리 주소가 사용가능하다. 하지만 이 중 유저가 사용할 수 있는 공간은 47bit로 0x00007fffffffffff 까지만 사용가능하고 이 이상을 넘어가게 되면 에러가 발생하며 바로 retq 명령어 주소로 넘어가는 것을 확인할 수 있다.



본 소스는 간단한 bof 소스로 strcpy ()의 취약점을 이용하여 root의 setuid가 걸려있는 프로그램을 공격할 것이다.



0xe0의 공간을 생성하고, strcpy 쪽에서 0x8 정도를 추가한다. 즉, 그러면 우리는 총 216 byte의 공간을 덮어씌우면 된다.


gdb에서 더미 데이터를 넣어보면



일정 값 (0x7ffffffff) 을 넘으면 0x4005da retq 주소로 돌아가는 것을 볼 수 있다.


하지만 어차피 우리가 조작할 ret은 일정 값보다 작으니 조작이 가능하며 NX 기법이 걸려있지 않아 고전적인 방법을 사용할 것이다.


Payload = "\x90" * 100 + "shellcode 27 byte" + "\x90" * 89 + "ret"

shellcode는 27 byte의 코드를 쓸 것이다.

\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05



ret을 조작해줄 buffer 주소로서 0x7fffffffe818의 주소를 사용할 것이다.



root의 권한을 가진 것을 볼 수 있다.


저작자 표시 비영리 동일 조건 변경 허락
신고

'HackCat' 카테고리의 다른 글

9. SQL Injection 정리.  (0) 2015.11.10
8. 64-bit Return To Libc.  (0) 2015.06.20
7. 64-bit Buffer OverFlow 정리.  (0) 2015.06.10
6. Chaining RTL Calls 정리.  (2) 2015.05.30
5. Ret sleding 정리.  (0) 2015.05.20
4. FPO (Frame Pointer Overwrite) 정리.  (0) 2015.05.10
◀ PREV 1234567···9 NEXT ▶