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 |
댓글