본문 바로가기

simple BOF4

LOB - 01 gremlin - (3)마무리 # core 파일 생성ulimit -c unlimited # 쉘코드\x31\xc0\x50\xba\x2e\x2e\x72\x67\x81\xc2\x01\x01\x01\x01\x52\xb9\x2e\x62\x69\x6e\x83\xc1\x01\x51\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'LOB - 01 gremlin - (1)스택 구조 파악' 글에 이어 작성하려고 한다.먼저 실행 파일이 gate가 아닌 gremlin의 권한으로 되어 있기 때문에분석을 위해 tmp 디렉토리를 만들고 실행파일을 복사한다. 'LOB - 01 gremlin - (1)스택 구조 파악' 에서는 A로 260개를 채웠지만,이번에는 뒤쪽에 쉘코드를 넣은 뒤, 앞을 \x90으로 채우고 eip 자리를 A.. 2019. 2. 1.
LOB - 01 gremlin - (2.2)쉘코드 수정 이번에 작성할 코드도 'LOB - 01 gremlin - (2.1)쉘코드 작성'과 동일하게 execve('/bin/sh') 이다. 이번에는 data 영역 대신 call 명령어를 이용할 것이다. 설명에 앞서 작성한 코드는 아래와 같다. 이번에는 call 명령어를 이용한다.call은 call하는 주소로 점프하기 전에 call 아래에 있는 명령어의 주소를 스택에 push한다. 따라서 위의 코드의 경우 "/bin/sh" 스트링이 담긴 주소가 스택에 push된다.그리고 main에서 pop을 하면 ebx에 "/bin/sh"의 주소가 담기게 된다.eax, ecx, edx와 관련된 부분은 이전과 동일하다. # objdump 이용 for i in $(objdump -d shell | grep "^ " | cut -f 2.. 2019. 2. 1.
LOB - 01 gremlin - (2.1)쉘코드 작성 vi shell.s # sudo apt-get install nasm nasm -f elf32 shell.s ld -m elf_i386 -o shell shell.o 지금 작성할 코드는 execve(’/bin/sh’)이다.시스템콜의 호출을 위해 int 80을 수행한다. 이 때, linux syscall table을 참고하여 systemcall 번호는 eax에 나머지 인자들은 각각 해당하는 레지스터에 값을 넣어주어야 한다.sys_execve는 11번이므로 eax에 0xb를 넣게 된다. 그리고 execve()의 man page와 table을 참고하여 인자를 넣어준다. ’/bin/sh’ 문자열은 .data 영역에 저장한 뒤 ebx에 넣어주었다. eax는 xor의 결과로 0이 들어 있다.ecx와 edx의 경우 .. 2019. 2. 1.
LOB - 01 gremlin - (1)스택 구조 파악 [simple BOF]먼저 gremlin.c의 코드를 보면 다음과 같다. buffer의 크기가 256인데 strcpy()를 사용하기 때문에 buffer overflow를 발생시킨다. 참고) 이 때 stack 상태는 다음과 같다. 따라서 buffer에 strcpy()하는 것을 이용하여 ret 부분을 덮으면 된다. buffer ~ ret 직전까지 260바이트가 존재하는 것으로 보이지만 실제 size를 알아볼 필요가 있다. 실제로 buffer와 ret가 떨어진 바이트 수를 계산할 때는 (main 진입 직전의 esp) - (strcpy 호출 직전의 esp에 저장된 값) 을 이용한다.main 진입 직전의 esp: push ebp를 하기 이전의 상태로 스택에 ret까지 쌓인 상태 strcpy 호출 직전의 esp에 .. 2019. 2. 1.