본문 바로가기

웹 해킹/드림핵13

[Dreamhack] funjs 이번 문제는 웹 리버싱이다. 난독화된 javascript를 하나씩 분석하여 플래그를 찾는 문제이다. 코드는 아래와 같이 여러 변수, 배열들의 이름이 난독화되어있어서 코드를 해석하기 쉽지않다. 따라서 notepad나 메모장으로 파일을 열어서 하나씩 차례대로 난독화된 변수이름을 수정하는 작업을 거쳐서 가독성을 높여야한다. 어느정도 가독성이 생기면 일반적인 자바스크립트 코드가 되고 하나씩 구글에 검색하면서 각 함수, 변수, 문법의 역할을 알아내야한다. Find FLAG ! 위 코드는 난독화된 코드이고 아래 코드는 나름대로 가독성을 높인 코드이다. Find FLAG ! 위에서 분석한 코드를 브라우저로 열고 아무 값이나 입력하면 Console창에 플래그가 출력된다. 2021. 10. 10.
[Dreamhack] simple-ssti #!/usr/bin/python3 from flask import Flask, request, render_template, render_template_string, make_response, redirect, url_for import socket app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' app.secret_key = FLAG @app.route('/') def index(): return render_template('index.html') @app.errorhandler(404) def Error404(e): template = ''' Page Not Found. %s ''.. 2021. 7. 20.
[Dreamhack] Mango const express = require('express'); const app = express(); const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/main', { useNewUrlParser: true, useUnifiedTopology: true }); const db = mongoose.connection; // flag is in db, {'uid': 'admin', 'upw': 'DH{32alphanumeric}'} const BAN = ['admin', 'dh', 'admi']; filter = function(data){ const dump = JSON.stringify(data).toLowerCas.. 2021. 7. 18.
[Dreamhack] php-1 문제에서 주어진 코드는 php로 아래와 같이 4개의 파일이 존재한다. index.php PHP Back Office Home List View list.php List list 페이지에 들어가면 위 그림과 같이 2개의 목록이 있다. flag.php는 권한이 막혀있고 hello.json은 view 페이지로 이동하면서 출력된다. flag가 출력되지 않는 이유는 file=../uploads/flag.php에서 파일을 가져오는데 view 페이지에서 file에 flag라는 값이 있으면 Permission denied 문자열을 출력하고 종료되도록 설계되었다. 따라서 file이 아닌 page를 통해서 flag.php를 출력하면 되지 않을까? 라는 생각을 할 수 있다. flag.php 위치는 file=../upload.. 2021. 7. 16.
[Dreamhack] pathtraversal 이번 문제는 pathtraversal 기법을 사용해야 한다. pathtraversal 기법이란 ../ 같은 문자를 사용하여 권한이 주어지지 않은 상위 디렉토리로 이동하는 기법을 말합니다. 문제는 아주 간단합니다. app.py #!/usr/bin/python3 from flask import Flask, request, render_template, abort from functools import wraps import requests import os, json users = { '0': { 'userid': 'guest', 'level': 1, 'password': 'guest' }, '1': { 'userid': 'admin', 'level': 9999, 'password': 'admin' } } .. 2021. 7. 16.
[Dreamhack] proxy-1 app.py #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for import socket app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' @app.route('/') def index(): return render_template('index.html') @app.route('/socket', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('soc.. 2021. 7. 16.
[Dreamhack] csrf-1 이번 문제는 CSRF 취약점을 이용해 플래그를 획득해야 한다. CSRF란 사용자를 직접 공격하는 XSS 공격과 다르게 다른 권한을 가진 사용자에게 특정 행동을 유도하는 공격기법이다. 문제에서 주어진 코드는 아래와 같다. app.py #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, c.. 2021. 7. 15.
[Dreamhack] xss-1 문제에서 XSS 취약점을 이용해 플래그를 획득하라고 요구한다. XSS 취약점은 실제로 쿠키 탈취에 많이 사용되는데 이번 문제 역시 코드를 살펴보면 쿠키 값이 플래그임을 알 수 있다. 코드는 파이썬의 플라스크를 사용하는데 항상 그렇듯이 처음보는 언어라도 어떤 내용인지는 파악할 수 있으므로 할 수 있다. 문제에서 주어진 파이썬 코드는 아래와 같다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.t.. 2021. 7. 15.
[Dreamhack] Carve Party 문제에서 주어진 html 파일을 열면 위 그림과 같이 호박이 있고 호박을 클릭하면 아래에 카운터가 10000에서 1씩 줄어든다. 위 코드는 html 파일에서 자바스크립트 부분만 가져온 것이다. 해당 코드에서 몇 가지 핵심 코드를 추출하겠다. var pumpkin = [ 124, 112, 59, 73, 167, 100, 105, 75, 59, 23, 16, 181, 165, 104, 43, 49, 118, 71, 112, 169, 43, 53 ]; 다음 코드는 길이가 22인 배열을 생성하는 코드이다. 플래그의 길이와 비슷한 것으로 보아 플래그 값을 구하는데 필요할 것이다. if (counter 2021. 4. 22.