2014-09-08 2 views
3

데비안 amd64 시스템에서 샘플 프로그램에서 32 비트 악용 페이로드 테스트를 실행하려고합니다. 필자는 32 비트 가상 머신에서 테스트 한 결과 이러한 페이로드가 작동한다는 것을 알고 있습니다.32 비트 프로그램 exec() 64 비트 프로그램

32 비트 또는 64 비트 프로그램을 실행하는 데 필요한 모든 라이브러리가 설치됩니다.

그러나 쉘 코드가 을 호출하여 exec("/bin/sh", ...)을 호출하면 시스템 호출이 실패하고 -2 (ENOENT) 오류 코드가 반환됩니다.

다른 32 비트 프로그램을 실행하기 위해 쉘 코드를 수정하면 쉘 코드가 예상대로 작동합니다.

그래서 32 비트 프로그램의 64 비트 프로그램 exec()에 연결할 방법이 있습니까?

+0

실행 파일에 올바른 경로가 있는지, 실행 파일의 모든 라이브러리가 있는지 확인하십시오. –

+0

예. 나는/bin/sh를 실행하고있다. 나는 그것이 효과가있을 것이라고 확신한다. –

+0

어떤 시스템 호출 번호를 사용하고 있는가? x86 32 비트와 64 비트 사이의 Linux에서는 동일하지 않습니다. – duskwuff

답변

0

execl 라이브러리 기능을 사용할 때 작동합니다.

쉘 코드에서 라이브러리 함수를 호출하기는 어려울 수 있지만 정상적인 프로그램에서 실행을 추적하고 동일한 기능을하는 쉘 코드를 작성하는 방법을 참조하십시오.

관련 문제