Notice
Recent Posts
관리 메뉴

Hacking Arts

[intel][x64] RTL(Return To libc) 본문

System/BOF

[intel][x64] RTL(Return To libc)

Rakehell 2015. 10. 31. 22:24

출처 :http://blog.techorganic.com/2015/04/21/64-bit-linux-stack-smashing-tutorial-part-2/

 

vuln.c의 모습이다. 일단 ASLR과 SSP를 제거해야된다.

/* Compile: gcc -fno-stack-protector ret2libc.c -o ret2libc      */ /* Disable ASLR: echo 0 > /proc/sys/kernel/randomize_va_space     */
이렇게 주석으로 나와있다.

NX가 걸려있다.

32bit에서는 ret2lib공격을 위해서 거짓 스택을 만들어 함수를 호출하게된다. 전형적으로 system함수를 이용 /bin/sh을 실행시키게 된다.

 

64bit에서는 함수를 호출할때 파라미털 전달법이 레지스터를 사용하게 됩니다. 즉 페이크 스택을 만드는 방법으로는 되지 않습니다. RDI,RSI,RDX,RCX,R8,R9를 사용해서 전달합니다.

위에서 보듯이 RDI에 첫번째 인자를 전달해서 함수를 호출합니다. 즉 x86에서 시스템 콜이랑 비슷한 방식같습니다.

그렇다면 우리가 필요한건 RDI나 RSI에 인자값을 전달하는 Gadget과 system함수의 주소가 필요하겠다.그 다음 /bin/sh이라는 문자열 주소이다.

이렇게 찾을 수 있다.

당황이다... pop rdi와 ret가 없다..만들어줘야된다..

그래서 전역변수에 \x5f\xc3(pop rdi,ret)값을 만들어줘서 그림처럼 해냈다.

전역변수를 추가하니 문자열 위치 가 바뀌었다.

...근데 안된다..보니...

그렇다..전역변수쪽에 실행권한이 없었다...멍청이였다...에휴..코드에 삽입해야된다..

세상을 너무 편하게 살려고했나보다..

그래서 인라인 어셈블리해줬다.

가젯을 넣어줬다. 그리고 문자열 위치도 물론 바뀌였다..

왠지 모르겠는데..죽는다..자꾸..뭘까.. 환경은 ubuntu 12.04이다.

 

이걸로 마치겠다 방법은 문서와 같은데 죽는 이유를 찾아봐야 될것같다.

해냈다!!!

이렇게 셋팅이 된걸 확인 할 수 있다.

프로세스가 생성되는 걸 볼 수 있다.

이렇게 하면 세그가 나고

이런식으로 해서 하면 된다.이유는 찾아봐야 될 것 같다.

 

 

'System > BOF' 카테고리의 다른 글

[intel][x64] Stack 기반 BOF  (0) 2015.10.22
[intel][x86] ROP  (2) 2015.09.29
[MIPS][x86] BOF 기본 공격 방식  (0) 2015.08.17
[MIPS][x86] BOF 분석  (0) 2015.08.17
BOF 개론  (0) 2014.08.27