
sudo 버퍼 오버플로우가 sudo 버전 <1.8.26에 영향을 미치는 분석 및 공개된 익스플로잇을 GCC로 컴파일하는 방법
Sudo의 pwfeedback 옵션은 사용자가 비밀번호를 입력할 때 시각적 피드백을 제공하는 데 사용됩니다. 키를 누를 때마다 별표(*)가 출력됩니다. 이 옵션은 표준 Password: 프롬프트에서 키 입력 에코를 비활성화하는 방식에 대한 사용자 혼란에 대응하여 추가되었습니다. pwfeedback은 상위 버전의 sudo에서 기본적으로 활성화되어 있지 않지만, Linux Mint 및 Elementary OS와 같은 일부 시스템에서는 기본 sudoers 파일에서 이 기능을 활성화합니다.
먼저 SSH를 통해 tryhackme 인스턴스에 로그인합니다.
이 취약점은 pwfeedback 함수가 힙 버퍼 오버플로우에 취약하기 때문에 발생합니다. 이 취약점을 악용하려면 먼저 sudo –version 명령을 실행하여 시스템에 취약한 버전의 sudo(sudo <1.8.26)가 있는지 확인합니다.

취약한 버전의 sudo가 있음을 확인한 후, pwfeedback 함수가 존재하는지 확인합니다. 이는 두 가지 방법으로 확인할 수 있습니다. 하나는 sudo를 호출하고 비밀번호 프롬프트에 아무 문자나 입력하여 비밀번호 문자를 입력할 때 "*"가 표시되는지 확인하는 방법이고, 다른 하나는 더 기술적인 방법으로 sudo -l 명령을 사용하는 것입니다. 하지만 이 방법은 사용자가 sudo에 대한 정보를 보거나 sudoers 파일을 연결할 수 있는 적절한 권한이 있어야 합니다.

이제 exploit-db의 테스트 케이스를 사용하여 버퍼 오버플로우가 가능한지 확인합니다. https://www.exploit-db.com/exploits/47995
perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id ^^위 코드 라인의 의미는 다음과 같습니다:
100개의 'A' 문자를 추가하여 sudo 명령으로 파이프하면, 이 문자들이 pwfeedback 힙 버퍼로 전달됩니다.

그러면 sudo는 sudo 프로세스를 계속 진행하는 방법을 알 수 없어 세그멘테이션 오류(segmentation fault)를 발생시킵니다.
이는 정적 힙 버퍼가 넘치면 CPU 레지스터와 다음 명령어의 흐름을 유지하는 명령어 포인터가 넘치기 시작하기 때문에 발생합니다.
이제 익스플로잇을 실행하여 버퍼 오버플로우를 일으키고 시스템에 대한 루트 액세스 권한을 얻을 수 있습니다. https://www.exploit-db.com/exploits/47995
