2019-01-14
Fuzzing
- 비정상적인 입력데이터를 보내 소프트웨어의 취약점을 유발시키는 네거티브 소프트웨어 테스팅이다.
- 대표적인 예로 오버플로우나 언더플로우, 반복과 같은 비정상적인 입력이 있다.
§ Fuzzing이 일어나는 예
- txt 파일을 읽어오는 소스코드
[ Windows 콘솔 응용프로그램 ]
속성-C/C++-보안검사-아니오
- 결과
[ cmd 창에서 실행 ]
- MEX_LENGTH 12를 넘어갈 경우
- 실행은 되나 버퍼창이 함께 뜸
[ 읽어짐 ]
§ Fuzzing을 응용
- txtreader.exe 리버싱하여 코드 분석
[ 메인 함수 ]
[ argv1, argv2 ]
함수를 읽어서 진행
PUSH ESI 는 백업값일 듯
[ fread ]
함수값을 읽어 실행이 이루어지는 과정
ESI 에 printf 값이 백업되어 빠르게 읽을 수 있도록 함
[ STACK ]
12byte의 내용이 저장된 것을 확인할 수 있음
[ printf 함수 ]
RETN의 주소를 조정
RETN 값을 Printf로 가게해서 무한 루프 생성가능한지 예상
(->오작동을 일으키기 위해서)
[ 리턴주소 ]
변경해서 진행하니 오류가 발생해서
바로 Calc.exe로 넘어가도록 그림그리기
- CALC.EXE 로 바로 실행시키도록 RETN주소 설정
[ calc.exe의 소스코드 ]
calc.exe가 실행되는 과정을 파악하기 위해
- CALC.EXE 리버싱하여 코드 분석하기

[ calc.exe 리버싱 ]
[ STACK ]
0012FF80 003011D1 에서 실행됨을 확인
- txtReader.exe 에 대입
- RETN주소가 진행되기 바로 직전에 대입
[ STACK ]
0012FF80-0012FF8C 주소 변경
[ STACK ]
calc.exe가 실행될 주소에 대하여 값 대입
바로 뒤에 00(NULL)값도 대입
[ 완성 ]
실행
No comments:
Post a Comment