본문 바로가기

드림핵

(68)
[드림핵 워게임] pathtraversal 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 기능 확인하기 첫 페이지는 위와 같다. Get User Info를 클릭해 접속해본다. userid를 입력하는 창이 뜬다. guest 계정에 대한 정보를 응답받았다. 2. 코드 분석하기 users = { '0': { 'userid': 'guest', 'level': 1, 'password': 'guest' }, '1': { 'userid': 'admin', 'level': 9999, 'password': 'admin' } } 코드를 살펴보면 계정정보를 확인할 수 있다. 1단계에서 응답받은 내용이 여기에 있는 계정 정보인 것을 알 수 있다. @app.route('/get_info', methods=['GET', 'POST']) def get_info(): ..
[드림핵 워게임] command injection-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 코드 및 페이지 파악하기 @APP.route('/') def index(): return render_template('index.html') @APP.route('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 "{host}"' try: output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5) return render_template('ping_result.html', data=output.decode('utf-8')..
[드림핵 워게임] Mango 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 코드 분석 첫 페이지에 접속해보면 위와 같은 페이지가 출력된다. 이 결과는 아래의 코드가 실행되어 나온 결과이다. app.get('/', function(req, res) { res.send('/login?uid=guest&upw=guest'); }); 문제는 푸는 데에 그리 중요한 부분은 아닌 듯하다. 또 다른 엔드포인트로는 아래의 /login 페이지가 있다. app.get('/login', function(req, res) { if(filter(req.query)){ res.send('filter'); return; } const {uid, upw} = req.query; db.collection('user').findOne({ 'uid': uid,..
[드림핵 워게임] simple-sqli 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 총 2개의 엔드포인트를 볼 수 있다. (1) 인덱스 페이지 ( / ) @app.route('/') def index(): return render_template('index.html') index.html을 렌더링 하고 있다. index 페이지에 접속해보면 메뉴바에 Home, About, Contact, Login 메뉴가 있는 것을 볼 수 있는데, 이 중에서 주목할 만한 페이지는 Login 페이지이다. (2) login 페이지 ( /login ) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login..
[드림핵 워게임] csrf-2 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 소스코드를 살펴보면 총 5개의 엔드포인트를 확인할 수 있다. (1) 인덱스( / ) @app.route("/") def index(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[session_id] except KeyError: return render_template('index.html', text='please login') return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not ..
[드림핵 워게임] csrf-1 위의 문제를 다음과 같은 방법으로 풀어보았다. 1. 총 4개의 엔드포인트가 있는 것을 확인할 수 있다. (1) vuln 페이지 @app.route("/vuln") def vuln(): param = request.args.get("param", "").lower() xss_filter = ["frame", "script", "on"] for _ in xss_filter: param = param.replace(_, "*") return param 코드를 살펴보면, /vuln에서는 xss_filter로 frame, script, on의 3가지 키워드를 필터링 하고 있어 xss 취약점을 보완하고 있는 것을 확인할 수 있다. 그러나 param 파라미터를 그대로 return하고 있으므로 필터링 되는 키워드를 사..
[드림핵 워게임] xss-2 위의 문제를 다음과 같은 과정으로 풀어보았다. 이 문제는 이전 게시물 [드림핵 워게임] xss-1과 유사하므로 두 풀이를 비교하면서 보면 더 잘 이해할 수 있다. 이전 게시물 : [드림핵 워게임] xss-1 https://studyforall.tistory.com/6 [드림핵 워게임] xss-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 총 4개의 페이지가 있는 것을 확인할 수 있다. 인덱스 페이지를 포함해 vuln, memo, flag 페이지가 있는 것을 볼 수 있다. 코드상으로는 47행부터 인 studyforall.tistory.com 1. 총 4개의 페이지가 있는 것을 확인할 수 있다. 2. 각 페이지의 특징을 살펴본다. (1) 인덱스 페이지 ( / ) 다른 페이지들로 이동할 수 있는 ho..
[드림핵 워게임] xss-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 총 4개의 페이지가 있는 것을 확인할 수 있다. 인덱스 페이지를 포함해 vuln, memo, flag 페이지가 있는 것을 볼 수 있다. 코드상으로는 47행부터 인덱스 페이지, 52행부터 vuln 페이지, 58행부터 flag 페이지, 73행부터 memo 페이지가 코딩되어 있다. 2. 각 페이지의 특징을 살펴본다. (1) 인덱스 페이지 ( / ) 다른 페이지들로 이동할 수 있는 home페이지다. (2) vuln 페이지 ( /vuln ) vuln 페이지로 들어가보면 alert 창이 뜬다. @app.route("/vuln") def vuln(): param = request.args.get("param", "") return param 코드를 확인해보면, vu..