본문 바로가기

Wargame/Web

(12)
[Dreamhack] file-download-1 소스 코드 분석/upload파일명에 ..가 들어가면 upload_result.html을 반환한다. 그렇지 않은 경우, 해당 파일을 열어서 내용을 보여준다.@APP.route('/upload', methods=['GET', 'POST'])def upload_memo(): if request.method == 'POST': filename = request.form.get('filename') content = request.form.get('content').encode('utf-8') if filename.find('..') != -1: return render_template('upload_result.html', data='bad char..
[Dreamhack] image-storage 소스 코드 분석list.phpuploads 디렉터리의 파일을 리스트 형식으로 출력한다. Image Storage Home List Upload $value) { echo "".$value.""; } ?> upload.phpPOST 방식으로 uploads 디렉터리에 파일을 업로드 할 수 있다. 0 ) { echo "Error: " . $error . ""; }else { if (file_exists($di..
[Dreamhack] command-injection-1 소스 코드 분석/ping@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')) except subprocess.TimeoutExpired: ..
[Dreamhack] Mango 소스 코드 분석 /login uid, upw 값을 전달 받고, filter 함수를 통해서 필터링을 수행한다. 이후 결과에 따라서 err, uid, undefined를 각각 반환한다. 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, 'upw': upw, }, function(err, result){ if (err){ res.send('err'); }else if(result){ res.send(result['uid']); }else{ res.send('undef..
[Dreamhack] simple-sqli 소스 코드 분석 db table 정보와 계정 정보를 알 수 있다. admin 계정의 비밀번호는 난수를 생성하고, 16바이트 길이의 바이너리 데이터로 만든 다음, 이를 16진수 문자열로 변환하고 디코딩한 값이다. DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid char(100), userpassword char(100));') db.execute(f'insert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(o..
[Dreamhack] csrf-2 소스 코드 분석 / sessionid가 없으면 login 하라는 문구를 보여주고, sessionid가 있지만 admin이 아니라면 user명을 admin이라면 FLAG를 보여준다. @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 == "..
[Dreamhack] csrf-1 소스 코드 분석 /vuln param 값을 전달 받아 출력한다. param 값에 frame, script, on 문자열이 있으면 이를 *로 치환하여 반환한다. @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 /flag param 값을 POST 방식으로 전달 받아 check_csrf 함수의 인자로 전달한다. check_csrf 함수에서 반환값으로 read_url에 url, cookie를 전달하는데, cookie 값으로 로컬 domain..
[Dreamhack] xss-2 소스 코드 분석 /vuln render_template 함수를 통해서 화면을 출력한다 @app.route("/vuln") def vuln(): return render_template("vuln.html") /flag 전달 받은 param 값과 FLAG를 check_xss로 전달한다 이후 read_url에 FLAG를 cookie로 하여 전달 후 새로운 cookie를 생성한다 def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: service = Service(executable_path="/chromedriver") options = webdriver.ChromeOpti..
[Dreamhack] xss-1 소스 코드 분석 /vuln param 값을 전달 받아 그대로 출력한다 @app.route("/vuln") def vuln(): param = request.args.get("param", "") return param /flag param 값과 FLAG를 check_xss로 전달 후에 read_url 함수의 결과 값을 반환한다 read_url 함수에서 FLAG를 값으로 cookie를 생성한다 def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: service = Service(executable_path="/chromedriver") options = webdriver...
[Dreamhack] session-basic 소스 코드 분석 / session으로부터 가져온 username이 admin이면 FLAG를 출력하고 아니면 admin이 아니라는 문구 출력한다 @app.route('/') def index(): session_id = request.cookies.get('sessionid', None) try: # get username from session_storage username = session_storage[session_id] except KeyError: return render_template('index.html') return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin"..
[Dreamhack] cookie 소스 코드 분석 / cookie로부터 가져온 username이 admin이면 FLAG를 출력하고 아니면 admin이 아니라는 문구를 출력한다 @app.route('/') def index(): username = request.cookies.get('username', None) if username: return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}') return render_template('index.html') /login form으로부터 전달 받은 password와 users의 password를 비교하여 일치하면 ..
[Dreamhack] devtools-sources 풀이 Step1) 문제 파일 확인 Step 2) index.html 파일을 열어서 개발자 도구 source로 이동 Ctrl + Shift + F(전체 페이지 검색)에 DH를 입력하면 css 파일에 flag 값이 있음을 알 수 있다.