본문 바로가기
Misc

[DIMI CTF] reader

by L3m0n S0ju 2021. 8. 22.


import sys

def send(data, end='\n'):

    sys.stdout.write(data + end)

    sys.stdout.flush()

 

def read():

    return raw_input()

 

def filtering(filename): f

    ilter = ['flag', 'proc', 'self', 'etc', 'tmp', 'home', '~', '.', '*', '?', '\\', 'x']

    for i in filter:

        if i in filename:

            send("Filtered!")

            sys.exit(-1)

 

if __name__ == '__main__':

    flag = open('flag', 'r')

    send("You can't read flag")

    send("But you can read file without filter XD")

    send("Filename :> ", end='')

    filename = read()

    filtering(filename)

    try:

        f = open(filename, 'r')

        send(f.read())

    except:

        send("No such file")

 

 

 

 


위 문제 코드를 살펴보면 필터링을 피해서 파일을 열어야 한다. 와일드카드를 사용하려 했으나 모두 필터링 되므로 문제 힌트에 있는 /dev 디렉터리를 이용해야 합니다. /dev에서 fd 디렉토리로 들어가면 파일 디스크립트 번호로 실행되는 프로그램들이 나열되어 있습니다. 문제 힌트에 있듯이 이미 파일이 열려있으므로 fd를 사용해 파일을 열 수 있다. 파일 디스크립터 0,1,2는 입력, 출력, 에러를 나타내는 표준 파일 디스크립터이고 파일을 open으로 열면 파일 디스크립터 3번부터 번호가 부여되므로 /dev/fd/3을 입력하면 플래그가 출력된다.

 

 

 

 

 


플래그

'Misc' 카테고리의 다른 글

[HackCTF] BF  (0) 2021.09.10
[HackCTF] Baseball Price  (0) 2021.09.10
[DIMI CTF] dimi-math  (0) 2021.08.19
[Square CTF] Stegasaurus  (0) 2021.08.18
[Square CTF] 🍎🍌🍍🤔😱😭  (0) 2021.08.13

댓글