분류 전체보기
-
[HTB] Popcorn WriteupWargame/Hack The Box 2023. 3. 31. 01:28
스캐닝을 통해 정보를 수집해보자. nmap -sC -sS -sV -p- -O -o scanResult.txt 10.129.36.23 22, 80 포트가 오픈되어있음을 확인하여 추가적으로 취약점이 있나 확인해보았다. nmap --script vuln 10.129.36.23 -p 22,80 -o nmapVulnScanResult.txt -Pn /test 가 있다는 정보 외 다른 정보가 없어서, gobuster를 통해 추가 파일이나 디렉토리 정보를 찾아보았다. gobuster dir -k -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u http://10.129.36.23/ -x .php,.html,.txt -o gobusterResult.t..
-
[HTB] Phonebook WriteupWargame/Hack The Box 2023. 3. 28. 23:00
주어진 URL에 접근해보자. 별로 주어지는 정보가 없어, gobuster도 돌려보고, sqli도 시도해보고 등등 해봤지만, 수확이 없었다. 어쨌든 하단의 Reese로 부터 메시지가 있는 것으로 보아 Reese의 계정을 탈취해보기로 하고 Bruteforce 공격을 시도했다. import requests url = "http://167.172.52.160:31677/login" with open("/usr/share/wordlists/rockyou.txt","r",encoding='iso-8859-1') as file: for password in file: data = { "username": "Reese", "password": password } res = requests.post(url, data=d..
-
[Study] LINE CTF 2023 Adult Simple GoCurlCTF/LINE CTF 2023 2023. 3. 27. 23:13
Simple 문제(https://vardy.tistory.com/262)의 업그레이드 버전이다. 취약점이 존재했던 필터링 로직이 수정되어, X-Forwarded-For 혹은 X-Real-IP 헤더를 사용하여 c.ClientIP()의 값을 제어하는 기존 방법으로는 플래그를 획득 할 수 없다. if strings.Contains(reqUrl, "flag") || strings.Contains(reqUrl, "curl") || strings.Contains(reqUrl, "%") { c.JSON(http.StatusBadRequest, gin.H{"message": "Something wrong"}) return } 어쨌든 헤더 삽입 관련 내용이기 때문에 관련해서 수많은 삽질을 하다가 문제를 풀지 못했는데 풀..
-
[Clear] LINE CTF 2023 Baby Simple GoCurlCTF/LINE CTF 2023 2023. 3. 26. 09:00
주어진 URL에 접근해보자 URL, Header Key, Header Value를 입력받아서 요청을 날리고, 응답 값을 json형식으로 출력해준다. 응답이 단순히 json 데이터로 반환되기때문에 클라이언트 영역에서 리다이렉트시키거나 스크립트를 실행하는것은 불가능했다. 대략적인 기능을 파악했으니, 주어진 Go언어의 소스코드를 분석해보자. (디버깅을 위해 출력부분 관련하여 추가/수정된 부분이 있다.) package main import ( "errors" "io/ioutil" "log" "net/http" "os" "strings" "github.com/gin-gonic/gin" ) func redirectChecker(req *http.Request, via []*http.Request) error { l..
-
-
[Study] Cyber Apocalypse 2023 SpyBug WriteupCTF/Cyber Apocalypse 2023 2023. 3. 23. 23:57
주어진 페이지에 접근하면 로그인 페이지가 나타난다. 그 외 별다른 기능이 없는것같아서 주어진 소스코드를 분석해보았다. adminbot.js 라는 흥미로운 파일이 있어서 먼저 분석하여 봇의 행동을 파악 해보았다. //adminbot.js require("dotenv").config(); const puppeteer = require("puppeteer"); const browserOptions = { headless: true, executablePath: "/usr/bin/chromium-browser", args: [ "--no-sandbox", "--disable-background-networking", "--disable-default-apps", "--disable-extensions", "--..
-
[Clear] Cyber Apocalypse 2023 Didactic Octo Paddles WriteupCTF/Cyber Apocalypse 2023 2023. 3. 23. 14:42
주어진 페이지에 접근하니 로그인 창이 나타났다. 주어진 소스코드를 분석해보았다. UI상에 나타나지는 않지만 index.js 파일을 분석해보니 회원가입 기능이 있었다.(/register) //index.js module.exports = (db) => { const bcrypt = require("bcryptjs"); const router = require("express").Router(); const jwt = require("jsonwebtoken"); const jsrender = require("jsrender"); const AuthMiddleware = require("../middleware/AuthMiddleware"); const AdminMiddleware = require("../m..
-
[Clear] b01ler CTF 2023 fishy-motd writeupCTF/b01lers CTF 2023 2023. 3. 20. 23:31
주어진 URL에 접속해보면 메시지를 입력하여 MOTD(Message of the Day 인듯 하다) 를 생성 할 수 있는 입력창이 나타난다. Create를 하면 Preview와 Deploy가 있는데, Deploy를 하면 봇이 MOTD가 포함된 로그인 페이지에서 자동으로 로그인을 수행하도록 구성되어있다. Preview같은 경우 봇이 자동 로그인을 할 때 사용하는 페이지를 보여주는 듯 하다. 또한, 문제의 최종 목적은 로그인을 하여 플래그를 획득 하는 것이다. server.post('/login', (req, res) => { const username = req.body.username; const password = req.body.password; if (username === user && passw..