포맷 스트링 버그(Format string bug) %hn 사용법 /* written by kaspy (kaspyx@gmail.com) */ 포맷 스트링 지정자중 %hn에 대한거 간단히 정리함, %hn 포맷 스트링(변환 지정자)는 2바이트 단위로 특정 메모리 주소에 현재까지 출력한 문자열의 개수를 저장해준다. 포맷 스트링 버그가 존재할때 %hn을 이용하면 프로그램의 ret 주소나 함수의 주소를 수정하여 공략이 가능하다. // gcc -o format_hn format_hn.c -m32 // sudo sysctl -w kernel.randomize_va_space=0 #include int main() { int p= 0xffffffff; char buf[256]; printf("before p = %08x, addr = %08x\n",p,&p); gets(buf); p.. 더보기 AFL fuzz(american fuzzy lop) Fuzzing Tool 사용하기 /* written by kaspy (kaspyx@gmail.com)*/ AFL(American fuzzy lop) Fuzz tool 이란 프로그램에 무작위의 데이터를 입력하게하여 버그 및 취약점을 찾아주는 자동화된 툴이라고 보면 된다. 일명 퍼징(fuzzing) 기법을 사용하며, 가장 큰 특징이라면 소스코드가 주어질시에, 컴파일시에 AFL 툴이 입력받는 소스코드 루틴을 찾아줘서 인풋값에 대한 무작위 데이터 생성의 효율성을 가지고 있다. 대신 단점이라면, 소스코드가 없는 black box 상태의 fuzzing은 어렵다는점이다. http://lcamtuf.coredump.cx/afl/ 사이트의 내용을 참고하여 정리한 내용이다. 1. AFL fuzzer 소스코드 다운로드 및 컴파일 사용환경 : linux 계.. 더보기 64bit 우분투(ubuntu) 리눅스에서 32bit 컴파일하기 gcc 컴파일 옵션에서 -m32 옵션을 주면 32비트 모드로 컴파일이 가능하다. 그러기위해선 아래와 같은 패키지를 설치해주면 된다. sudo apt-get install gcc-multilib 아래는 컴파일 결과 테스트용 소스코드 #include void main(){ unsigned long p; printf("%x\n",&p); printf("p's size is %d\n",sizeof(p));} - 32비트용 리눅스 실행파일로 컴파일하기 gcc -o bitmode_compile bitmode_compile.c -m32 - 실행했을때 결과화면 - 64비트용 리눅스 실행 파일로 컴파일하기 gcc -o bitmode_compile bitmode_compile.c -m64 - 실행했을때 결과화면 더보기 이전 1 ··· 5 6 7 8 9 10 11 ··· 30 다음