본문 바로가기

웹해킹

(116)
드림핵 Mango 롸업 이 문제는 데이터베이스에 저장된 플래그를 획득하는 문제입니다. 플래그는 admin 계정의 비밀번호 입니다. 플래그의 형식은 DH{…} 입니다. {‘uid’: ‘admin’, ‘upw’: ‘DH{32alphanumeric}’} flag를 얻기 위해서는 admin 계정의 upw를 알아내야 한다. http://host3.dreamhack.games:11711/login?uid=guest&upw[$regex]=.* 이런식으로 regex 명령어를 통해 데이터를 검색할 수 있다. const BAN = ['admin', 'dh', 'admi']; filter = function(data){ const dump = JSON.stringify(data).toLowerCase(); var flag = false; BAN...
드림핵 simple_sqli 롸업 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: userid = request.form.get('userid') userpassword = request.form.get('userpassword') res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"') if res: use..
SQL Injection DBMS(데이터베이스)는 관계형, 비관계형 이렇게 두 종류로 나눠진다. 관계형(Relational) DBMS는 행과 열의 집합인 테이블 형식으로 데이터를 저장하고, 비관계형(Non-Relational)은 테이블 형식이 아닌 key-value 형태로 값을 저장한다. 관계형 DBMS에는 MYSQL, MariaDB, PastgreSQL, SQLite 등이 있고 비관계형 DBMS에는 MongoDB, CouchDB, Redis 등이 있다. SQL은 RDBMS의 데이터를 정의하고 질의, 수정 등을 하기 위한 언어이다. SQL은 사용 목적, 행위에 따라 다양한 구조가 존재한다. DDL(Data Definition Language) - 데이터를 정의하기 위한 언어, 데이터베이스의 생성, 수정, 삭제 등 데이터베이스 생..
드림핵 csrf-2 롸업 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. @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 an admin"}') ..
드림핵 csrf-1 롸업 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. @app.route("/admin/notice_flag") def admin_notice_flag(): global memo_text if request.remote_addr != "127.0.0.1": return "Access Denied" if request.args.get("userid", "") != "admin": return "Access Denied 2" memo_text += f"[Notice] flag is {FLAG}\n" return "Ok" 여기서 flag를 얻을 수 있다. 주소가 localhost이고 userid가 admin이어야 한다. @app.route("/vuln..
ClientSide: CSRF CSRF는 Cross Site Request Forgery의 약자로 교차 사이트 요청 위조라는 뜻이다. 쿠키와 세션을 통해 이용자를 식별하는데 이를 탈취할 수 있다면 이용자의 권한으로 요청을 보낼 수 있다. CSRF는 이를 이용해 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. 공격자가 작성한 악성 스크립트를 이용자가 실행해야 하는데, 메일로 보내던가 게시글에 심어놓는 등의 방법이 있다. HTML을 이용한 공격 방법 img 태그 또는 form 태그를 이용해 요청을 보내면 이용자의 쿠키 인증 정보가 포함 되어서 요청이 보내진다. javascript를 이용한 공격 방법 window.open으로 원하는 주소의 창을 띄우거나 location.href, location.replace..
드림핵 xss-2 롸업 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. xss-2는 vuln 링크가 xss-1과 다르다. @app.route("/vuln") def vuln(): return render_template("vuln.html") 입력된 param그대로 반환하지 않고 vuln.html을 렌더링한다. {% block content %} {% endblock %} vuln.html파일을 보니까 이런 식으로 xss공격을 막아두었다. 그래서 xss-1에서처럼 script 태그를 사용하면 정상적으로 공격이 되지 않는다. xss 공격 우회 태그에 대해서 검색해보니 태그가 막혔을 때 사용할 수 있는 방법이 나왔다..
드림핵 xss-1 롸업 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. XSS 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("flag.html") elif request.method == "POST": param = request.form.get("param") if not check_xss(param, {"name": "flag", "value": FLAG.strip()}): return '' return '' flag를 얻으려면 여기서 check_xss에 전달되는 val..