Dreamhack (37) 썸네일형 리스트형 [LEVEL 1] sql injection bypass WAF 웹 서비스에 접속하면 매우 단순한 화면이 나타납니다. 화면 상단에는 실행될 SQL 쿼리가 표시되어 있습니다.그 아래에는 uid 입력창과 submit 버튼이 있어, 사용자가 입력한 값이 쿼리의 {uid} 부분에 들어가는 구조임을 알 수 있습니다. uid 입력창에 hi를 입력하고 submit 버튼을 눌렀습니다. 화면 상단의 쿼리가 다음과 같이 변경된 것을 확인할 수 있습니다:이를 통해 사용자가 입력한 값이 '{uid}' 부분에 그대로 삽입되는 구조임을 알 수 있습니다. 보다 정확하게 파악해보기 위해서 문제 파일을 다운로드 받아보았습니다. app.pyimport osfrom flask import Flask, requestfrom flask_mysqldb import MySQLapp = Flask(__name.. [LEVEL 1] Command Injection Advanced 웹 서비스에 접속하면 URL 입력창과 submit 버튼이 제공된 매우 단순한 화면이 나타납니다. "Online Curl Request"라는 제목이 표시되어 있어, 사용자가 입력한 URL로 curl 요청을 보내는 기능임을 알 수 있습니다. 127.0.0.1을 넣어서 보내보면은 아래의 사진처럼 http only가 뜨게 됩니다.URL 입력창에 http로 시작하지 않는 값을 입력하면 "http only !"라는 메시지가 표시되는 것을 확인할 수 있습니다. 이는 서버가 curl 요청을 보낼 때 URL이 반드시 http로 시작해야 한다는 필터링이 적용되어 있음을 의미합니다 다시 http를 붙인 뒤 요청을 보내게 되면 아래와 같은 응답을 받을 수 있습니다. 다음으로 문제에서 제공하는 소스코드 파일을 다운받아 분석해보.. [LEVEL 1] error based sql injection 웹 서비스에 접속하면 위와 같이 매우 단순한 화면이 나타납니다. 상단에는 실행되는 SQL 쿼리문 SELECT * FROM user WHERE uid='{uid}';가 그대로 노출되어 있어, 사용자의 입력값이 {uid} 위치에 직접 삽입된다는 것을 알 수 있습니다. 하단에는 uid를 입력할 수 있는 입력창과 submit 버튼이 배치되어 있습니다. 간단하게 uid부분에 1을 넣으면 아래사진 처럼 입력값이 들어가는 것을 확인 할 수 있습니다. SQL injection 이니까 대표적인 페이로드를 넣어보았더니 아래와 같은 에러가 뜬 것을 확인 할 수 있습니다.이 에러 메시지를 통해 데이터베이스가 MariaDB임을 확인할 수 있습니다. 🔎 MariaDB란?MariaDB는 MySQL의 포크(fork)로, MySQL.. [LEVEL 1] type confusion 웹 서비스에 접속하면 비밀번호 입력창과 확인 버튼이 제공된 매우 단순한 화면이 나타납니다. 하단에는 소스 코드를 확인할 수 있는 view-source 링크가 함께 배치되어 있습니다. 앞서 살펴본 입력창에 직접 값을 넣어 동작을 확인해보았습니다. 예시로 test라는 문자열을 입력한 뒤 확인 버튼을 눌러보았습니다. view-source 링크를 통해 소스 코드를 확인해 보겠습니다. view-source key == $key) { $ret = ["code" => true, "flag" => $FLAG]; } else { $ret = ["code" => false]; } die(json_encode($ret)); } function gen_key(){ $key.. [LEVEL 1] [wargame.kr] strcmp 웹 서비스에 접속하면 단순한 로그인 폼과 같은 화면이 나타납니다. 비밀번호를 입력받는 입력창과 확인 버튼이 제공되며, 하단에는 view-source 링크가 존재합니다. 비밀번호 입력창에 임의의 값을 넣고 확인을 시도해본 결과, 잘못된 값을 입력하면 Wrong password라는 메시지가 출력되는 것을 확인할 수 있었습니다. 이를 통해 서버에서 입력값에 대한 검증 로직이 존재함을 알 수 있습니다. view-source 링크를 통해 소스 코드를 확인해보면, 비밀번호 검증 로직이 어떻게 구현되어 있는지 알 수 있습니다. view-source" . $FLAG .""; exit(); } else { echo "Wrong password.."; } .. [LEVEL 1] [wargame.kr] fly me to the moon 웹 서비스에 접속하면 별도의 설명 없이 클릭을 하면 미니 게임이 시작됩니다. 화면 중앙에 우주선이 등장하고, 좌우에 배치된 초록색 장애물들을 피해 이동하면서 점수를 쌓는 방식임을 확인할 수 있습니다. 게임에서 충돌하면 화면에 "YOU NEED GET THE SCORE 31337. XD"라는 문구가 나타나며, 목표 점수가 31337임을 알 수 있습니다. 즉, 단순히 게임을 플레이하는 것이 아니라 이 특정 점수에 도달해야만 클리어 조건을 만족한다는 것을 확인할 수 있습니다. 따라서 단순히 플레이해서 점수를 얻는 것이 아닌, 내부적으로 어떤 로직이 동작하는지를 확인하기 위해 Burp Suite를 통해 요청과 응답을 살펴보기로 하였습니다. Burp Suite에서 Intercept를 활성화한 뒤 게임을 종료시키자.. [LEVEL 1] csrf-2 웹 서비스에 접속하면 상단에 “CSRF-2” 제목과 Home 메뉴가 보이며, 그 아래에 vuln(csrf) page, flag, login 링크가 순서대로 배치되어 있습니다. 현재 인증이 되지 않은 상태이므로 본문에는 굵은 글씨로 “please login” 메시지가 표시됩니다. 로그인 페이지로 이동한 후, 가장 흔히 사용되는 기본 계정 조합인 guest : guest를 입력하여 로그인을 시도하였습니다. vuln(csrf) page에 접속해보면, script 태그가 필터링되어 * 문자로 치환되는 것을 확인할 수 있었습니다. 자세히 살펴보기 위해서 코드를 살펴보겠습니다. app.py#!/usr/bin/python3from flask import Flask, request, render_template, m.. [LEVEL 1] xss-2 웹 서비스에 접속하면 상단에는 "XSS-2" 라는 제목과 함께 Home 메뉴가 표시됩니다. 그 아래에는 vuln(xss) page, memo, flag와 같이 각각의 링크가 나열되어 있습니다.이번 문제는 XSS-1과 유사한 유형이지만, 세부적으로는 필터링 동작의 차이가 존재합니다.이전에는 vuln page에 접근했을 때, URL 파라미터에 를 삽입하면 즉시 팝업창이 발생했지만, 현재 환경에서는 동일한 입력에도 팝업이 실행되지 않는 것을 확인할 수 있었습니다.이를 통해 단순 스크립트 실행이 차단되는 필터링 로직이 적용되어 있음을 유추할 수 있었습니다.필터링으로 인해 태그는 더 이상 동작하지 않았기 때문에, 이를 우회하기 위한 대체 기법을 적용했습니다.그 방법으로는 img 태그의 onerror 속성을 활용.. 이전 1 2 3 4 5 다음