Wargame - 웹 20

Dreamack - Dream Gallery

문제 소스 입력받은 URL로부터 데이터를 읽어와 저장하는 기능이다. from flask import Flask, request, render_template, url_for, redirect from urllib.request import urlopen import base64, os app = Flask(__name__) app.secret_key = os.urandom(32) mini_database = [] @app.route('/') def index(): return redirect(url_for('view')) @app.route('/request') def url_request(): url = request.args.get('url', '').lower() title = request.arg..

Wargame - 웹 2023.10.23

Dreamhack - crawling

단축 URL (Shortened URL) 긴 URL을 단축하고 단축된 URL을 클릭하면 원래의 긴 URL로 이동하는 웹 기술이다. URL Redirection 기법을 이용한다. 문제 설명 드림이는 웹 크롤링 사이트를 구축했습니다. 크롤링 사이트에서 취약점을 찾고 flag를 획득하세요! 소스 로컬 호스트로 /admin 페이지를 접속하면 flag를 출력한다. 하지만, check_get에서 필터링을 적용한다. #app.py import socket import requests import ipaddress from urllib.parse import urlparse from flask import Flask, request, render_template app = Flask(__name__) app.flag ..

Wargame - 웹 2023.10.20

Tomcat Manager

Tomcat은 웹 환경의 관리자 콘솔을 제공한다. 관리자 콘솔이 외부로부터 침해되는 경우 웹에 관련된 모든 권한을 누출할 수 있으므로 관리에 주의해야 한다. 관리자 인증을 위한 페이지가 쉽게 인지 가능하거나 유추로 인해 접근 되어지는 경우에는 취약하다. 접근 방법 IP주소/manager IP주소/admin -> 164.122.2.61/manager 풀이 메인 페이지 개발자 도구로 확인해보니 image.jsp?file=working.png에 대한 요청 확인 image.jsp?file=../image.jsp로 접근 이를 통해서 ../를 사용해 경로 이동이 자유로운 것을 확인 Dockerfile 확인 tomcat-users.xml 파일에는 사용자 이름, 역할, 패스워드를 포함한 정보가 있다. 위 파일을 브라우..

Wargame - 웹 2023.10.18

filestorage

Javascript Prototype 자바스크립트는 프로토타입(Prototype) 기반 언어라고도 불린다. 자바스크립트는 객채지향 언어이지만 C++이나 Java처럼 class가 없다. 대신 프로토타입이라는 개념이 등장한다. 1. Prototype vs Class 클래스(class)라는 개념은 객체지향 언어에서 빠질 수 없는 개념이다. 하지만 자바스크립트에는 클래스라는 개념이 없다. 대신 프로토타입(Prototype)이라는 개념이 존재한다. 클래스가 없으니 기본적으로 상속이 불가능하다. 그래서 보통 프로토타입 기반으로 상속을 흉내내도록 구현해 사용한다. 최근의 ECMA6 표준에서는 Class 문법이 추가되었습니다. 하지만 문법이 추가되었다는 것이지, 클래스 기반으로 바뀌었다는 것은 아닙니다. 2. 사용법 ..

Wargame - 웹 2023.06.03

[wargame.kr] fly me to the moon

풀이 자바스크립트 기반으로 작성된 게임이다. 개발자 도구로 살펴보니 코드가 난독화되어 있다. 개발자 도구로 네트워크 탭을 확인하니 token.php라는 파일이 10초 정도에 한 번씩 갱신되는 것을 확인할 수 있다. 게임을 하다 끝나면 31337점을 획득해야 한다고 출력하며 게임이 끝나면서 high-scores.php라는 파일로 token과 score라는 파라미터를 전송한다. 일부러 연소으로 두 번 죽어봤는데 두 요청 모두 동일한 token 값을 사용했다. 아마 10초 정도에 한 번씩 token.php 파일이 갱신될 때 token 값이 변경되는 거 같다. 게임 시작 후 일부로 빠르게 죽어서 token 값을 알아낸 후 token.php 팡링 갱신되기 전에 burp suite을 통해 token 파라미터를 알아..

Wargame - 웹 2023.05.07

weblog-1

풀이 admin 계정의 pw를 알아내야 한다. 주어진 access 파일에서 로그를 확인할 수 있다. password를 검색해 보니 admin 계정의 pw를 알아내기 위해 sql 쿼리문을 통해 한 글자씩 비교한 흔적이 있다. 자세히 보니 1192라는 다른 응답 크기가 있다. 아마 참 일 때만 응답의 크기가 1192인 거 같다. 응답 크기가 1192인 요청 모두를 찾아 파이썬 코드를 통해 비밀번호 생성 pw = [97, 100, 109, 105, 110, 58, 84, 104, 49, 115, 95, 49, 115, 95, 65, 100, 109, 49, 110, 95, 80, 64, 83, 83, 44, 103, 117, 101, 115, 116, 58, 103, 117, 101, 115, 116] res..

Wargame - 웹 2023.05.01

mongoboard

풀이 "/" 페이지에서 게시글 no 값을 보면 96be2960f6cf6 값이 중복된다. 그리고 FLAG 게시글은 no 값이 없다. index.js 파일 소스를 보니 data.secret라는 값이 존재하면 null 아니면 _id 값을 no 값으로 설정한다. module.exports = function(app, MongoBoard){ app.get('/api/board', function(req,res){ MongoBoard.find(function(err, board){ if(err) return res.status(500).send({error: 'database failure'}); res.json(board.map(data => { return { _id: data.secret?null:data._..

Wargame - 웹 2023.04.26