tmxklab

[pwnable.kr] ascii_easy 본문

War Game/pwnable.kr

[pwnable.kr] ascii_easy

tmxk4221 2021. 6. 7. 14:40

 

1. 문제확인

ascii_easy@pwnable:~$ ls -l
total 1700
-r-xr-sr-x 1 root ascii_easy_pwn    7624 Nov  3  2017 ascii_easy
-rw-r--r-- 1 root root              1041 Nov  3  2017 ascii_easy.c
-r--r----- 1 root ascii_easy_pwn      52 Aug  6  2014 flag
-r--r----- 1 root ascii_easy_pwn     141 Oct 27  2016 intended_solution.txt
-rwxr--r-- 1 root root           1717736 Oct 27  2016 libc-2.15.so
ascii_easy@pwnable:~$

 

1) mitigation 확인

 

2) 문제 확인

 

3) 코드흐름 확인

3-1) ascii_easy.c

#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>

#define BASE ((void*)0x5555e000)

int is_ascii(int c){
    if(c>=0x20 && c<=0x7f) return 1;
    return 0;
}

void vuln(char* p){
    char buf[20];
    strcpy(buf, p);
}

void main(int argc, char* argv[]){

    if(argc!=2){
        printf("usage: ascii_easy [ascii input]\n");
        return;
    }

    size_t len_file;
    struct stat st;
    int fd = open("/home/ascii_easy/libc-2.15.so", O_RDONLY);
    if( fstat(fd,&st) < 0){
        printf("open error. tell admin!\n");
        return;
    }

    len_file = st.st_size;
    if (mmap(BASE, len_file, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, fd, 0) != BASE){
        printf("mmap error!. tell admin\n");
        return;
    }

    int i;
    for(i=0; i<strlen(argv[1]); i++){
        if( !is_ascii(argv[1][i]) ){
            printf("you have non-ascii byte!\n");
            return;
        }
    }

    printf("triggering bug...\n");
    vuln(argv[1]);

}
  • 인자 하나를 받고 실행하며 주어진 libc파일을 매핑한다.
  • argv[1]값은 ascii코드 범위(0x20 ~ 0x7f)안에 있어야 하며 vuln()의 파라미터로 들어간다.
  • vuln()에서 범위 값 지정을 안하고 바로 buf에 strcpy를 한다.
  • 즉 입력 값에 필터를 걸어놓고 libc를 이용해가지고 문제를 푸는 거 같다.

2. 접근 방법

vuln()에서 strcpy()를 통해 bof가 발생하므로 요걸 이용해서 rop를 해보자.

dest[ebp-0x1c]이므로 dummy값을 0x20만큼 주고 페이로드를 작성하자 

 


3. 문제 풀이

'War Game > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] otp  (0) 2021.06.07
[pwnable.kr] simple login  (0) 2021.06.07
[pwnable.kr] md5 calculator  (0) 2021.01.15
[pwnable.kr] brain fuck  (0) 2021.01.14
[pwnable.kr] horcruxes  (0) 2020.12.02
Comments