본문 바로가기

Web Hacking/Dreamhack

(52)
[Dreamhack] Command Injection Advanced write up 다음은 문제 코드이다. Online Curl Request URL GET요청의 url변수에 전달된 값을 가져오고 있다. strpos 함수를 통해 http가 포함된 문자열만 허용하고 있으며 받은 문자열을 shell_exec의 인자로 넘기고 있다. 문제 서버에 접속해보자. 해당 입력폼에 전달 시 GET 요청이 전송되는 것 같다. 이 문제에서는 escapeshellcmd 함수로 전달 받은 문자열을 필터링하고 있기 때문에 쉘 메타문자를 사용할 수 는 없다. 따라서 curl 명령어의 옵션만을 이용할 수 있다. 문제로 제공된 폴더를 보면 flag.c가 존재함을 알 수 있다. Dockerfile을 보면 flag.c 파일은 컴파일 되어 flag파일만 남고 사라짐을 알 수 있으며 파일 경로는 서버의 루트 경로 바로 밑에..
[Dreamhack] sql injection bypass WAF Advanced write up import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass') app.config['MYSQL_DB'] = os.environ.get('MYSQL_DB', 'users') mysql = MySQL(app) template =''' SE..
[Dreamhack] sql injection bypass WAF write up SQL Injection을 막는 WAF를 간단하게 설정해 놓고 admin의 pw를 구하는 간단한 문제이다. 바로 문제와 코드를 보자! 먼저 문제이다. 이전 문제와 같이 입력 폼이 존재하며 내 쿼리문을 볼 수 있다. 코드는, import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.environ.g..
[Dreamhack] error based sql injection write up 문제 설명이 간단하게 나와있다. 레벨 1인 만큼 기본적인 걸로 풀릴 것 같다. blind sql injection과 마찬가지로 입력폼과 내 입력이 쿼리문에 어떻게 들어가는지 확인할 수 있는 html 코드가 보여진다. 코드를 보자. import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.envir..
[Dreamhack] blind sql injection advanced write up 이 문제는 비밀번호에 한글이 포함된다. 한글은 인코딩 시 유니코드로 표현되기 때문에 1바이트에서 4바이트 사이의 가변적인 바이트 값을 가지게 된다. 이점에 유의하며 풀어야 한다. 문제를 보면 쿼리 문과 입력 폼이 하나 존재 한다. 코드를 보면, import os from flask import Flask, request, render_template_string from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.con..
[Dreamhack] DOM XSS write up #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) nonce = os.urandom(16).hex() try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cook..
[Dreamhack] XS-Search write up #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium.common.exceptions import TimeoutException from urllib.parse import urlparse from selenium import webdriver from selenium.webdriver.chrome.service import Service from hashlib import md5 import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("..
[Dreamhack] Relative Path Overwrite Advanced write up 이전 Relative Path Overwrite과 vuln의 코드만 다르다. vuln.php filter.js가 로드 되지 않으면 param에 "nope !!" 문자열이 들어가게 된다. 000-default.conf RewriteEngine on RewriteRule ^/(.*)\.(js|css)$ /static/$1 [L] ErrorDocument 404 /404.php 아파치 서버의 URL Rewrite를 정의한 파일이다. /로 시작하고 .js로 끝날 경우 404에러를 반환하며 /404.php로 리다이렉션 시킨다. 404.php 요청 URL을 가져와 not found라는 문자열과 함께 반환한다. 문자를 raw하게 그대로 리턴하기 때문에 스크립트가 삽입 시 실행될 확률이 있어 보인다. 취약점 분석 fi..