ID : orc
Passwd : cantata
wolfman에 다음레벨의 seteuid가 걸려있는 것 확인 가능!
- wolfman.c 소스 코드
현재 버퍼의 크기는 40이고, 환경변수를 비우는 for loop문을 사용중이다.
또한 strcpy 함수를 사용해서 bof 취약점이 발생하고 있다.
이번 문제에서는 buffer hunter를 사용해서 buffer를 비우는 memset 함수를 사용하였지만 strcpy 함수 이후에 사용하였으므로 상관없음 -> lob 4번과 똑같은 방법으로 풀면된다!
main 함수 디버깅으로 가기 전 extern에 대해 알아보고 가자!
* extern
extern 자료형 전역변수;
: 선언한 전역 변수를 다른 파일의 코드에서 사용하고 싶을 때 extern 사용
- main 함수 디버깅
현재 스택에서 44만큼 제외해주고 있는데, 이것은 buffer(40)+i(4) = 44 에 해당하는 값이다.
-> dummy 존재 x
그리고 buffer는 sfp 기준 40만큼 떨어진 거리에 존재한다!
- breakpoint
strcpy를 수행한 지점 이후에 breakpoint를 걸어준다
-> <main+194>에 breakpoint!
- buffer 주소 찾기
argv[1][47]이 '\xbf'이여야 하므로, 48개의 문자를 '\xbf'로 채우고, 쉘코드가 들어갈 주소 공간을 찾기 위해 "A"(41)를 100개 출력한다.
bffffac0이 "A"문자가 시작되는 첫번째 주소이므로, 이 이후의 주소공간을 선택하여 ret의 값으로 넣어준다.
-> 선택 주소 : 0xbffffad4
- payload 작성
buffer와 sfp를 다른 값으로 채워주고 ret에는 전 단계에서 선택한 주소인 0xbffffad4를 넣는다.
그리고 Nop Sled 기법을 사용하기 위해 '\x90'을 채워준 후 쉘코드를 작성하여 payload를 완성한다.
- exploit
공격에 성공하여 euid가 505로 상승한 것을 확인할 수 있다!
'Write Up > LOB' 카테고리의 다른 글
LOB #6 wolfman (0) | 2019.11.14 |
---|---|
LOB #4 goblin - argv[2] + NOP Sled이용 (0) | 2019.11.11 |
LOB #4 goblin - NOP Sled 이용 (0) | 2019.11.11 |
LOB #3 cobolt (0) | 2019.10.10 |
LOB #2 gremlin (0) | 2019.10.10 |