HOME
home
CV News
home

32Bit NOP Slide

속성
SYSTEM
날짜
NOP Slide는 실행할 코드의 주소를 정확하게 알아내기 힘든 경우 메모리 영역에 프로그램에 실행에 영향을 주지 않는 NOP을 삽입하여 오차 범위를 줄이기 위해 사용하는 기법이다.
#include<stdio.h> int main(int argc, char* argv[]){ char buffer[512]; strcpy(buffer, argv[1]); printf("%s", buffer); return 0; }
JavaScript
복사
해당 파일은 root의 쉘을 획득하기 위해 SetUID 설정이 되어있다. (chmod 4755 ./bof)
gdb를 이용하여 디컴파일 시 버퍼의 크기가 0x208(520)Byte만큼 할당되어 있다.
버퍼에 NOP을 가득 채운 후 나머지 영역에 Shell Code를 삽입한다. 삽입 후 RET값이 스택의 최상단을 가리키도록 ESP의 주소를 넣어 스택의 최상단으로 점프시킨 후 다시 버퍼가 실행될 때 NOP을 만나 아무런 행위 없이 계속해서 아래로 흐르게 되며 마지막 Shell Code에 접근해 해당 코드를 실행하게 된다.
버퍼를 463(NOP) + 61(ShellCode) = 524만큼 채운 후 마지막에 esp 주소를 삽입한다. esp의 주소는 gdb에서 x/ $esp 명령을 이용하여 구한다.
코드를 여러 차례 반복 실행 시 root의 쉘을 실행시키는 것을 확인할 수 있다.