이 문제에서 주목해야하는 취약점을 알려줬다 무슨 취약점인지 모르지만 일단 python의 pickle에서 Deserialize 취약점을 이용하여 문제를 풀면 되는 것 같다 문제 사이트에 들어가보자 'Create Session'과 'Check Session' 두 가지 탭이 존재한다 첫 번째 탭은 세션을 만드는 기능을 하는 탭인 것 같고, 두 번째 탭은 만든 세션을 조회하는 기능을 하는 탭인 것 같다 첫 번째 탭에서 Name, Userid, Password를 설정한 세션을 만들 수 있는 것 같고 두 번째 탭에서 만든 세션을 조회할 수 있는 것 같은데, 무슨 값을 session input에 넣어서 조회를 해야할지 모르겠으니 일단 첫 번째 탭으로 돌아가서 test 세션을 만들어보자 세 가지 값에 'test' 값을..
덧셈 식을 계산해주는 계산기를 구현한 웹인 것 같으니 들어가서 확인해보자 대충 입력에 "1+1" 이런식으로 입력하면 아래 "Enter the value"라고 적힌 곳에 결과가 "2"로 나온다 그럼 입력하는 input의 이름을 살펴보고 소스코드로 넘어가서 웹이 어떻게 이루어졌는지 살펴보자 이름은 "formula"인 것을 확인했고, 소스코드로 넘어가서 formula가 어떤 식으로 작동되는지 살펴보자 #!/usr/bin/python3 from flask import Flask, request, render_template import string import subprocess import re app = Flask(__name__) def filter(formula): w_list = list(string...
"그런데 외부로 요청하는 기능이 안전한 건지 모르겠다고 하네요…" 이 설명을 보고 SSRF 취약점을 사용하겠구나 생각했다. 외부로 요청하는 기능이 안전한지 모르겠다고 하니 우선 사이트에 들어가서 파일 업로드 페이지는 제쳐두고 이미지 요청 페이지를 집중적으로 파보기로 했다 이러한 페이지가 나오게 된다. 두 입력창에는 각각 'url'과 'title'이라는 이름으로 값이 전달되게 되는 것 같다 그렇다면 이제 소스코드를 살펴보자 from flask import Flask, request, render_template, url_for, redirect from urllib.request import urlopen import base64, os app = Flask(__name__) app.secret_key =..
파일 관리 홈페이지를 덜 구현한 것을 재현한 문제인 것 같다 const express=require('express'); const bodyParser=require('body-parser'); const ejs=require('ejs'); const hash=require('crypto-js/sha256'); const fs = require('fs'); const app=express(); var file={}; var read={}; function isObject(obj) { return obj !== null && typeof obj === 'object'; } function setValue(obj, key, value) { const keylist = key.split('.'); const ..
문제를 들어가면 uid와 upw를 입력할 수 있는 입력창과 Login버튼, Cancel버튼이 보인다. 개발자 도구로 입력창의 name을 보니 uid인 것을 확인하고 소스코드를 보러 넘어갔다. 굉장히 많은 코드들이 있지만 여기서 우리가 볼 것은 index.ejs와 app.js 두 개 뿐이다 uid upw 보면 form태그 안에 위에서 말한 uid, upw 입력창, login, cancel버튼이 있는 것이 보인다 $("#form").submit(function( event ) { event.preventDefault(); $("#form").serializeObject() $.ajax({ type:"POST", data: JSON.stringify($("#form").serializeObject()), da..
url을 입력하고 curl 명령을 실행시키는 입력창과 submit 버튼이 보인다. 코드를 살펴보자 Online Curl Request URL if(isset($_GET['url'])){ $url = $_GET['url']; if(strpos($url, 'http') !== 0 ){ die('http only !'); 위 코드 중 이 부분은 url 입력창에 http가 포함이 되어 있어야만 curl 명령을 실행시키는 기능을 구현하고 있다. else{ $result = shell_exec('curl '. escapeshellcmd($_GET['url'])); $cache_file = './cache/'.md5($url); file_put_contents($cache_file, $result); echo "ca..
CSRF (Cross-Site Request Forgery) 사이트 간 요청 위조의 줄임말로 인증된 사용자가 웹 애플리케이션에 특정 요청을 보내도록 유도하는 공격 행위이다 이 문제에서는 비밀번호를 바꾸는데 필요한 세션 아이디를 공격자가 만들어서 권한을 얻어 비밀번호를 변경하여 플래그를 취득하는 방식으로 진행된다 @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(..
문제 설명 존재하지 않는 페이지 방문시 404 에러를 출력하는 서비스입니다. SSTI 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. SSTI취약점을 처음 들어보는 것 같아 정보를 찾기 위해 구글링을 해보았다. SSTI : Server-Side Templete Injection : 템플릿 엔진을 이용하여 웹 어플리케이션을 구동할 때, 사용자의 입력이 적절하게 필터링 되지 않아 템플릿 구문을 삽입 할 수 있을 때 발생한다. 또한 웹 템플릿 엔진에는 서버사이드 템플릿 엔진과 클라이언트사이드 템플릿 엔진 이렇게 두 개가 있는데 이 문제에서는 서버사이드 템플릿 엔진을 사용하고 있다. 서버사이드 템플릿 엔진 : 서버에서 DB나 API에서 가져온 데이터와 사전에 설정해놓은..