퍼저 동작원리
50byte의 buffer에 인자값으로 받은 파일의 첫 번째 바이트만큼 문자열을 읽어오는 취약한 프로그램이다.
아래 프로그램으로 간단하게 퍼징 테스트 수행 ~
#include "stdio.h" #include "stdlib.h" void vuln(char *path) { FILE *fd; int size=0; char buf[50]; fd = fopen(path, "rb"); fscanf(fd, "%c", &size); fgets(buf, size, fd); printf("size : %d \n", size); printf("data : %s \n", buf); } int main(int argc, char **argv) { if(argc != 2){ printf("%s (test file) \n", argv[0]); exit(0); } vuln(argv[1]); getchar(); }
[ 테스트 결과 ]
- sample 디렉토리에 있는 파일 중 하나씩 랜덤하게 선택해서 퍼징 수행.
- 랜덤 데이터를 입력할 부분에 삽입 <- "(custom_data|[]|[]|y)"
- 첫 번째 리스트에는 생성할 문자열의 범위
ex) [0,1,[10,30]] <- (\x00,\x01, \x0a~\x1e)중에서 생성
- 두번째 리스트에는 갯수
ex) [1,1000] <- 1에서 1000개의 데이터 생성
- 세번째 y/n는 생성할 데이터를 개별적으로 랜덤하게 할것인지(y) 아니면 한개의 문자로 할 것인지(n)
1) crash_log파일에 crash된 EIP 정보들 저장
[ 0 ] 0xEIP: 63636363 Unable to disassemble at 63636363
[ 2 ] 0xEIP: 63636363 Unable to disassemble at 63636363
[ 3 ] 0xEIP: 62626262 Unable to disassemble at 62626262
[ 4 ] 0xEIP: 61616161 Unable to disassemble at 61616161
[ 4 ] 0xEIP: 63636363 Unable to disassemble at 63636363
[ 6 ] 0xEIP: 61616161 Unable to disassemble at 61616161
2) FuzzFile 디렉토리에 퍼징을 수행한 샘플 파일들 저장
3) CrashFile 디렉토리에 crash관련 정보들 저장
- "crash-0.txt"을 열어본 결과
========================== Crash Info ==========================
0x63636363 Unable to disassemble at 63636363 from thread 720 caused access violation
when attempting to read from 0x63636363
CONTEXT DUMP
EIP: 63636363 Unable to disassemble at 63636363
EAX: 00000058 ( 88) -> N/A
EBX: 7ffdf000 (2147348480) -> N/A
ECX: a01f226a (2686394986) -> N/A
EDX: 10362ed0 ( 271986384) -> | |C:\Documents and Settings\Administrator\ \fuzzing\test.exe (MSVCR100D.dll.data)
EDI: 017bed24 ( 24898852) -> N/A
ESI: 009e0000 ( 10354688) -> N/A
EBP: 63636363 (1667457891) -> N/A
ESP: 0012ff18 ( 1244952) -> ccccccccccc (stack)
+00: 63636363 (1667457891) -> N/A
+04: 63636363 (1667457891) -> N/A
+08: 00636363 ( 6513507) -> N/A
+0c: 7ffdf000 (2147348480) -> N/A
+10: 00151ee0 ( 1384160) -> ./test.exe ./FuzzFile/fuzz-0.txt (heap)
+14: 00000021 ( 33) -> N/A
disasm around:
0x63636363 Unable to disassemble
SEH unwind:
0012ffe0 -> 0041104b: jmp 0x411f40
ffffffff -> 7c839ac0: push ebp
======================== mutation Info ==========================
[*] block_size : 1
[*] mutate chars : ['a', 'b', 'c']
[+] offset : 0x0
[+] original bytes : 10
[+] changed bytes : 50
=================================================================
'System > Windows' 카테고리의 다른 글
[CVE-2012-4792] (0) | 2014.08.15 |
---|---|
Windows에서의 스택 할당 (0) | 2013.12.28 |
FileFuzz, Peach Fuzzer 링크 (0) | 2013.11.12 |
메모리 보호 기법 DEP/NX (1) | 2012.09.05 |
windows bof [basic stack overflow] (2) | 2012.04.08 |