상세 컨텐츠

본문 제목

[LOB] gremlin -> cobolt

SYSTEM HACKING/LOB Redhat

by koharin 2019. 3. 28. 22:39

본문

728x90
반응형

<LOB gremlin->cobolt>

전에 우연히 알게된 방법인데 win을 누르면 login창으로 갈 수 있다.

지난 gremlin.c와의 차이는 buffer의 크기가 훨씬 작다는 것이다.

 

1. ret 전 채워야 할 dummy 구하기

strcpy() 함수가 리턴되고 add명령어가 실행되기 전까지의 크기를 구해야 하므로 add 명령어 부분에 breakpoint를 잡자.

인자로 “”A””*16 dummy를 넣어서 buffer를 채운 후 주소를 출력해보면 0xbffffb78sfp이고, 0x400309cbret 주소이다.

그러면 buffer(16) + sfp(4) + ret(4) 구조이므로 ret 전까지, 20dummy를 넣으면 된다.

 

2. system() 함수의 실행 후 시작주소 구하기

간단한 system() 함수가 있는 c프로그램을 작성한다.

저 주소는 system() 함수의 호출 지점이고, 실행시점에 공유 라이브러리를 로딩한 후 system() 함수의 시작점을 찾아야 한다.

실행 후 system() 함수의 시작주소는 0x40058ae0이다.

 

3. “”/bin/sh”” 위치 찾기

memcmp() 함수를 사용하는 것이 “”/bin/sh””의 주소를 찾을 가장 간단명료한 방법이었기 때문에 이번에도 memcmp()함수를 사용한다.

shell의 초기값은 system() 함수의 실행 시 시작주소이다.

shell++로 주소를 증가시키면서 shell“”/bin/sh””의 주소를 비교해서 “”/bin/sh””가 위치한 주소를 찾는다.

찾으면 while문을 나와 shell의 주소를 출력한다.

“”/bin/sh””의 주소는 0x400fbff9이다.

 

4. payload 작성

RTL 기법 이용

buffer(16) + sfp(4) + system() addr(0x40058ae0) + dummy(원래는 다음 실행할 명령주소) + “”/bin/sh”” addr(0x400fbff9)

1번에 의해 buffer(16) + sfp(4) dummy로 채운다.

이때 주소의 경우 little endian 방식으로 작성해야 하므로,

system() addr: \xe0\x8a\x05\x40

“”/bin/sh”” addr: \xf9\xbf\x0f\x40

다음 레벨의 패스워드를 획득했다.

728x90
반응형

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

[LOB] level10: vampire -> skeleton  (0) 2019.05.01
[LOB] level8: orge->troll  (0) 2019.04.28
[LOB] level3: cobolt -> goblin  (0) 2019.04.01
BOF(Buffer Overflow) 공격-고전적인 방법  (0) 2019.03.29
[LOB] gate -> gremlin  (0) 2019.03.28

관련글 더보기