gets()에 바이너리 데이터 보내기

gets()에 바이너리 데이터 보내기

(버퍼 오버플로 취약점이 있는) 피해자 프로그램이 있습니다. 이 프로그램은 gets()를 사용하여 고정 크기 버퍼에 씁니다.

쉘코드를 SC 파일에 넣었다고 가정해 보겠습니다.

$ ./victim < SC
Input your data: 
$

쉘코드가 작동하지 않는 것처럼 보이는 이유는 다음과 같습니다. SC가 피해자에게 리디렉션되고 쉘코드가 삽입되어 쉘이 생성되지만 생성된 쉘은 stdin이 닫혀 있음을 발견하고 즉시 종료됩니다.

expect주입을 시도했지만 expect산란 후 껍질이 폭발합니다.

유일한 실용적인 방법은 쉘코드를 마우스의 붙여넣기 버퍼에 넣어 키보드를 입력 장치로 유지하면서 쉘코드를 삽입하는 것입니다. 하지만 붙여넣기 버퍼에 이진 데이터를 넣는 방법을 모르겠습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변1

이 문제(누군가 동일한 상황에서 발생한)에 대한 해결책은 다음과 같습니다. https://stackoverflow.com/questions/8509045/execve-bin-sh-0-0-in-a-pipe

답변2

특수 문자가 인쇄되는 간단한 스크립트를 사용하여 이를 달성할 수 있습니다.

예를 들어, Perl에서는 16진수 코드를 지정하여 모든 문자를 인쇄할 수 있습니다. 예를 들어, perl -e 'print "\x54\x0A"'"T"를 인쇄한 다음 새 줄을 인쇄합니다.

그러면 인쇄된 텍스트가 보이지 않더라도 복사할 수 있습니다. 물론 터미널은 원시 모드에 있어야 합니다.

관련 정보