hacking/pwnable

hacking/pwnable

Frame faking(Fake ebp)

Frame faking이란 가짜 Stack Frame Pointer(SFP)를 만들어 프로그램의 실행 흐름을 제어하는 것이다. LEAVE & RET instruction Frame faking을 이해하기 위해 우선 LEAVE 명령어와 RET 명령어의 이해가 필요하다. LEAVE 명령어는 다음과 같이 동작한다. RBP(EBP) 레지스터에 저장된 값을 RSP(ESP) 레지스터에 저장한다. RSP(ESP) 레지스터가 가리키는 Stack 영역에 값을 RBP(EBP) 레지스터에 저장한다. RET 명령어는 다음과 같이 작동한다. RSP(ESP) 레지스터가 가리키는 Sstack 영역에 값을 RIP(EIP) 레지스터에 저장한다. JMP 명령어를 이용해 RIP(EIP)에 저장된 영역으로 이동한다. Instruction ..

hacking/pwnable

One-gadgets

One Gadget이란 해당 Gadget 하나만을 이용하여 Shell을 획득할 수 있는 Gadget이다. One Gadget은 라이브러리 파일 내에서 "/bin/sh"를 실행하는 Gadget이다. One Gadget을 사용하기 위해서 일부 조건이 만족해야 되는 경우도 있다. ROP, RTL 기법을 사용할 때 해당 Gadget을 많이 사용한다. One-gadgets of libc(/lib/x86_64-linux-gnu/libc-2.23.so) 다음과 같은 코드들이 One gadgets으로 사용될 수 있다. do_system() 함수 내에서 __execve() 함수를 이용해 shell을 호출한다. ... #endif if (pid == (pid_t) 0) { /* Child side. */ const cha..

hacking/pwnable

ROP(Return Oriented Programming)

여러 개의 함수를 호출하기 위해 사용되는 것이 Gadgets이며, 기본적으로 다음과 같은 형태의 Gadgets이 사용된다.ROP는 공격자가 NX bit 및 코드 서명과 같은 보안 방어가 있는 상태에서 코드를 실행할 수 있게 해주는 기술이다. ROP는 기본적으로 RTL 공격 기법을 이용하기 때문에, 해당 기법을 모른다면 다음 사이트를 공부하고 보도록 하자. RTL(Return to Libc) RTL이란 Return to Shellcode와 비슷하게 Return address 영역을 공유라이브러리(libc) 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 이를 이용해 NX bit를 우회할 수 있다. Calling Convention RTL를 이해 hogbal.tistory.com Stack Buffe..

hacking/pwnable

RTL(Return to Libc)

RTL이란 Return to Shellcode와 비슷하게 Return address 영역을 공유라이브러리(libc) 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 이를 이용해 NX bit를 우회할 수 있다. Calling Convention RTL를 이해하기 위해 우선 함수 호출 규약에 대한 이해가 필요하다. x86(32bit) 우선 32bit 바이너리에서 함수 호출 규약에 대해 설명하겠다. 함수의 인자 값을 Stack에 저장하며, 오른쪽에서 왼쪽 순서로 스택에 저장한다. 함수의 Return 값은 EAX 레지스터에 저장된다. 사용된 Stack 정리는 해당 함수를 호출한 함수가 정리한다. 인자 전달 방법 Stack을 이용 인자 전달 순서 오른쪽에서 왼쪽의 순서로 스택에 쌓임 함수의 반환 값 EAX..

hacking/pwnable

Return to Shellcode

Return to Shellcode란 Stack 영역에 있는 RET 주소를 Shellcode가 저장된 주소로 변경해, Shellcode를 실행하는 방식이다. CALL & RET instruction 우선 Return to Shellcode를 이해하기 위해 어셈블리어인 CALL, RET 명령어에 대한 이해가 필요하다. Instruction Processing CALL PUSH ReturnAddress RET POP RIP JMP RIP CALL : Return Address를 Stack에 저장하고, 피연산자 주소로 이동 RET : POP 명령어를 이용해 RSP(ESP, 32bit)가 가리키는 Stack 영역에 저장된 값을 RIP(EIP, 32bit)에 저장 후, 해당 주소로 이동 위의 명령어를 이용해 RE..

hogbal
'hacking/pwnable' 카테고리의 글 목록 (2 Page)