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' 다음에 새 줄이 인쇄됩니다.

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

관련 정보