2023. 3. 8. 21:09ㆍ해킹
오브젝트 파일, 실행파일로 바꾸기 위해서는 고급언어를 저급언어로 바꿔주는 컴파일러가 필요한데 이를 C언어에서는 gcc가 담당한다.
여러가지 옵션이 많기는 하지만 일단 실행파일을 생성하는 -o 옵션을 주로 사용한다.
`아래는 가장 일반적으로 사용하는 gcc 커맨드이다.
gcc -o filename filename.c
하지만 버퍼오버플로우를 공부할 때 이 메모리 기법 옵션들을 공부해야한다.
이때문에 모든 메모리기법을 해제하고 하나하나 적용하는 방법으로 공부를 하던 편이었던 것 같은데
모두 해제하는 커맨드는 아래와 같다.
gcc -m32 -fno-stack-protector -z execstack -z norelro -fno-pie -no-pie -mpreferred-stack-boundary=2 -o filename filename.c
이제 옵션들의 의미를 알아보자
-m32(32bit 실행파일로 컴파일)
-m64(64bit 실행파일로 컴파일)
-mpreferred-stack-boundary=2(dummy값 제거 32bit 버전)
-mpreferred-stack-boundary=4(dummy값 제거 64bit 버전)
-fno-stack_protector(카나리값X)
-stack_protector(카나리값O)
-z execstack(메모리에 실행권한 부여, NX 해제)
-z norelro(NO RELRO)
-z relro (partial RELRO)
-z relro -z now(FULL RELRO)
-no-pie(상대주소X, 절대주소O)
-fpie(절대주소X, 상대주소O)
-fno-pie(PIC코드 X)
번외는 ASLR인데
cat /proc/sys/kernel/randomize_va_space 2
cat /proc/sys/kernel/randomize_va_space 0(ASLR X)
cat /proc/sys/kernel/randomize_va_space 1(stack, library ASLR O)
cat /proc/sys/kernel/randomize_va_space 2(stack, library, heap ASLR O)
참고문헌
'해킹' 카테고리의 다른 글
[dreamhack]XSS 공부 (0) | 2023.03.16 |
---|---|
[dreamhack]return to shellcode(canary) (0) | 2023.03.01 |
[dreamhack]return address overwrite (0) | 2023.02.27 |