요즘 CTF 나 워게임에서 감사하게도 도커파일까지 주는 경우가 많다.기왕받은 도커파일을 잘 활용하여 취약점 분석에 도움이 되기 위해 값을 직접 찍어본다던지, 중간중간 로그들을 출력하여 payload에 대한 값을 찍어보며 문제를 푸는경우가 많아졌다. 주어진 소스코드가 node.js 파일인 경우 console.log 로 간단하게 값을 출력하고PHP인 경우 echo로 간단하게 변수값을 확인해 볼 수 있다.그런데 python의 flask / fast api / Django 등 으로 빌드된 서버의 경우 print 로 값을 확인해 보려 하지만 뜻대로 도커에서 출력되지 않아 굉장히 답답했던 경험이 있다. flush = True간단한 해결방법은 print의 flush옵션을 true로 설정해 주는 것이다.print..
이해를 돕기 위해 아래에 극단적인 코드 예시를 가져왔다. app.post('/login',function(req,resp){ var id = req.body.id if (id.toLowerCase()!=='hiroo' && id.toUpperCase() === "HIROO") { res.render('alert',{contents:'hello admin!',red:'/admin'}) } } 언뜻 보기엔 말이 되지 않는 코드, 통과할 수 없는 if 문 이지만, 이는 얼마든지 우회, 통과가 가능하다. toLowerCase(), toUpperCase() 함수를 사용하여 비교구문을 작성할때, 예상치 못한 결과가 도출될 수 있음에 주의하자. Javascript(혹은 여타 언어) 의 toLowerCase(), to..
Made Sense - misc 소스코드import os from pathlib import Path import re import subprocess import tempfile from flask import Flask, request, send_file app = Flask(__name__) flag = open('flag.txt').read() def write_flag(path): with open(path / 'flag.txt', 'w') as f: f.write(flag) def generate_makefile(name, content, path): with open(path / 'Makefile', 'w') as f: f.write(f""" SHELL := /bin/bash .PHONY: ..