itsource

버퍼 오버플로를 활성화하기 위해 gcc 컴파일러 최적화를 해제하는 방법

mycopycode 2022. 8. 27. 10:17
반응형

버퍼 오버플로를 활성화하기 위해 gcc 컴파일러 최적화를 해제하는 방법

컴파일러 최적화 보호를 해제해야 하는 숙제 문제를 해결하고 있습니다.ubuntu linux에서 gcc 4.4.1을 사용하고 있는데 어떤 플래그가 적합한지 알 수 없습니다.아키텍처에 의존한다는 것을 깨달았습니다.제 머신은 32비트 인텔 프로세서를 탑재하고 있습니다.

고마워요.

그거 좋은 문제네요.이 문제를 해결하려면 ASLR도 비활성화해야 합니다.그렇지 않으면 g()의 주소를 예측할 수 없게 됩니다.

ASLR을 비활성화합니다.

sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'

카나리아 비활성화:

gcc overflow.c -o overflow -fno-stack-protector

카나리아와 ASLR이 비활성화되면 "스매싱 스택의 재미와 이익을 위해"에서 설명한 것과 같은 직접적인 공격이 되어야 합니다.

다음은 ubuntu에서 사용되는 보안 기능의 목록입니다.https://wiki.ubuntu.com/Security/Features NX 비트에 대해 걱정할 필요가 없습니다.g()의 주소는 TEXT 메모리 세그먼트 내에 있기 때문에 항상 메모리의 실행 가능 영역에 있습니다.NX 비트는 스택 또는 힙에서 셸 코드를 실행하려고 할 경우에만 활성화됩니다.이 할당은 이 할당에 필요하지 않습니다.

이제 가서 그 EIP를 청소해!

, 지금까지의 답들은 모두 틀렸습니다. 룩의 답들은 정확했습니다.

입력:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

그 뒤를 이어:

gcc -fno-stack-protector -z execstack -o bug bug.c

ASLR, SSP/Propolice 및 Ubuntu의 NoneXec(9.10에 배치되어 있어 조작이 매우 간단하며, 페이지를 실행 파일과 jmp로 매핑하는 mprotect(2) 기술을 참조해 주세요)를 무효로 합니다.그러나, 이러한 「보안 기능」은, 어느 정도 도움이 됩니다.'-z execstack' 플래그가 없으면 페이지에 실행 불가능한 스택마킹이 표시됩니다.

새로운 디스트로스(2016년 현재)에서는 PIE가 기본적으로 활성화되어 있기 때문에 컴파일할 때 명시적으로 비활성화해야 합니다.

일반적인 버퍼 오버플로우 연습으로 로컬로 재생할 때 도움이 되는 명령어의 개요를 다음에 나타냅니다.

카나리 비활성화:

gcc vuln.c -o vuln_disable_canary -fno-stack-protector

DEP 비활성화:

gcc vuln.c -o vuln_disable_dep -z execstack

PIE 비활성화:

gcc vuln.c -o vuln_disable_pie -no-pie

위에 나열된 모든 보호 메커니즘을 비활성화합니다(경고: 로컬 테스트 전용).

gcc vuln.c -o vuln_disable_all -fno-stack-protector -z execstack -no-pie

32비트 머신의 경우,-m32파라미터도 마찬가지입니다.

시험해 보다-fno-stack-protector플래그를 설정합니다.

버퍼 오버플로를 실행하기 위해 ASLR을 비활성화할 필요는 없습니다.ASLR이 활성화되어 있는 경우(kernel_randomize_va_space = 2컴파일된 실행 파일이 PIE가 아니면 활성화되지 않습니다. 파일을 한 경우를 -fPIC -pieASLR을 사용합니다.

로 하는 나 i i disabling disabling disabling disabling disabling disabling disabling disabling disabling disabling disabling disabling i 。-fno-stack-protector 해야 함) 다음을 사용하십시오ASLR의 작동 여부를 확인하려면(위치 독립 코드를 설정해야 함) 다음을 사용합니다.

hardening-check executable_name

페이지 전체를 인용하는 것은 아니지만 최적화에 관한 매뉴얼은 http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#Optimize-Options에서 구할 수 있습니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★.-O0 및 " " " 입니다.

- fmudflap - fmudflapth - fmudflapir

이를 지원하는 프런트 엔드(C 및 C++)의 경우 모든 위험한 포인터/배열 비참조 작업, 일부 표준 라이브러리 문자열/히프 함수 및 범위/유효성 테스트를 통해 기타 관련 구성을 계측합니다.이렇게 계측된 모듈은 버퍼 오버플로우, 잘못된 힙 사용 및 기타 일부 클래스의 C/C++ 프로그래밍 오류에 대해 영향을 받지 않아야 합니다.instrumentation은 별도의 런타임 라이브러리(libmudflap)에 의존하며 링크 시 -fmudflap이 지정되면 프로그램에 링크됩니다.계측 프로그램의 런타임 동작은 MUDFLAP_OPTIONS 환경 변수에 의해 제어됩니다.옵션에 대해서는 env MUDFLAP_OPTIONS=-help a.out을 참조하십시오.

언급URL : https://stackoverflow.com/questions/2340259/how-to-turn-off-gcc-compiler-optimization-to-enable-buffer-overflow

반응형