분류 전체보기
[분석 일기] docs 정독으로 Grav CMS에서 RCE 취약점 찾은 썰
[분석 일기] docs 정독으로 Grav CMS에서 RCE 취약점 찾은 썰
2024.01.121. Grav CMS Grav CMS는 php로 개발된 CMS 입니다. Grav is a Fast, Simple, and Flexible, file-based Web-platform. GitHub - getgrav/grav: Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony - GitHub - getgrav/grav: Modern, Crazy Fast, Ri..
synology nas에서 gluetun docker를 이용하여 twitch 1080p 자동 녹화 서버 만들기
synology nas에서 gluetun docker를 이용하여 twitch 1080p 자동 녹화 서버 만들기
2023.11.101. 개요 몇년 전 '그' 사건으로 인해 twitch 1080p 가 막히고 다시보기 또한 볼 수 없게 되었다. 필자는 `streamlink`를 이용하여 녹화를 잘 하고 있었지만, 어느순간 1080p가 막히게 되면서 방법을 찾다가 gluetun docker를 접하게 되었다. 2. 환경 세팅 다음과 같은 사전 세팅이 필요하다. synology nas에 ssh 접속 설정 docker 및 docker-compose 설치 proton vpn 회원가입 회원 가입 후 아래 링크에서 3번까지 진행하기 https://young-cow.tistory.com/95 위에서 다운로드 받은 openvpn config 파일, openvpn id 및 pw 확인 twitch API key 발급 (아래 4번에서 설명) 3. gluetu..
WACon2023 CTF Write up
WACon2023 CTF Write up
2023.09.03주변에 아는 사람들이랑 총 4명이서 WACon2023 CTF에 참가했습니다. 결과는 15등으로 마무리 했네요. 1. [web] mosaic 문제 코드는 다음과 같습니다. 이 문제의 컨셉은 이미지 업로드 관련 기능을 제공합니다. from flask import Flask, render_template, request, redirect, url_for, session, g, send_from_directory import mimetypes import requests import imageio import os import sqlite3 import hashlib import re from shutil import copyfile, rmtree import numpy as np app = Flask(__na..
ctf 문제를 통해 CSP bypass 정리하기
ctf 문제를 통해 CSP bypass 정리하기
2023.03.131. 업로드 기능을 활용한 bypass 서버에 다음과 같이 CSP가 적용되어 있다고 가정해 봅시다. `script-src` 지시자에는 `self` 와 랜덤한 `nonce` 값이 설정되어 있습니다. 즉, `` 와 같은 payload는 `nonce` 값이 없기 때문에 실행이 되지 않습니다.
hacktm ctf 2023 writeup
hacktm ctf 2023 writeup
2023.02.211. [web] Blog cookie 값을 `unserialize()` 하고 있다. 이를 활용하여 취약한 클레스를 찾다 보니, `Profile` 클래스가 눈에 들어왔다. `file_get_contents()` 함수가 `$this->picture_path` 맴버 변수 값을 통해 파일을 읽으려고 한다. 즉, `Profile` 클래스의 `picture_path` 맴버 변수를 이용하여 flag 값을 읽으면 문제를 해결할 수 있다. O:4:"User":2:{s:7:"profile";O:7:"Profile":2:{s:8:"username";s:8:"universe";s:12:"picture_path";s:46:"/02d92f5f-a58c-42b1-98c7-746bbda7abe9/flag.txt";}s:5:"post..
lactf 2023 writeup
lactf 2023 writeup
2023.02.141. [pwn] gatekeep 이 문제는 단순 bof를 통해 다른 변수의 값을 변조시켜 flag를 획득하는 문제이다. `lactf{sCr3am1nG_cRy1Ng_tHr0w1ng_uP}` 2. [pwn] bot 이 문제의 c코드는 다음과 같다. #include #include #include #include int main(void) { setbuf(stdout, NULL); char input[64]; volatile int give_flag = 0; puts("hi, how can i help?"); gets(input); if (strcmp(input, "give me the flag") == 0) { puts("lol no"); } else if (strcmp(input, "please give ..
Dicectf 2023 writeup
Dicectf 2023 writeup
2023.02.08대회 당일날 웹 한문제 밖에 못 풀었지만, 이후 writeup을 보고 정리하고자 한다. 1. recursive-csp 해당 문제는 GET 파라미터로 전달한 값을 그대로 출력하여 XSS 가 가능하다. 하지만, 이 값을 암호화 하여 csp 정책에 들어가게 된다.
SSRF bypass using DNS Rebinding
SSRF bypass using DNS Rebinding
2023.01.041. 들어가기에 앞서 일반적으로 SSRF 공격을 막기 위해 개발자들은 다음과 같은 로직을 구현합니다. 차단할 IP 범위 도메인 이름 확인 (이상한 문자열로 우회하는 공격..) DNS를 이용한 IP 확인 위 과정을 통과하게 되면 사용자가 입력한 URL로 접속하게 됩니다. 이러한 상황을 간단한 코드로 나타내면 다음과 같습니다. const dns = require("dns/promises"); const axios = require("axios"); async function request(url){ const check_domain_name = is_domain_name(url); const check_dns = await dns.resolve4(url); const check_ip = is_blacklis..
2022년 마지막 날을 정리하며
2022년 마지막 날을 정리하며
2022.12.312022년도는 크고 작은 사건들이 많은 해였던거 같습니다. 어떤 일들이 있었고, 다음 해에는 어떤 목표를 세울지 기록하고자 합니다. 버그 바운티 작년 목표였던 CVE 발급을 위해, 올해 wordpress plugin 취약점 발굴을 시작했습니다. 코드 분석한 결과 다수의 취약점을 찾아 10개(?) 정도의 CVE를 발급 받았습니다. (아직 패치 되지 않은 플러그인 때문에,,) CVE-2022-29452 CVE-2022-34154 CVE-2022-34648 CVE-2022-34656 CVE-2022-36285 CVE-2022-36343 CVE-2022-27858 아래는 patchstack에서 wordpress plugin 1월달 취약점 제보 순위 1위 한 결과 입니다. 네이버 버그바운티에 참가하여 최종 4등을..
nodejs unicode
nodejs unicode
2022.10.061. Intro 기본적인 ASCII 범위를 벗어나 전세계 언어를 표현하기 위해 unicode를 많이 사용합니다. 이로 인해 ASCII로 표현이 불가능 했던 문자를 unicode로 표현이 가능해졌습니다. 이로 인해 예상치 못한 버그가 발생하곤 합니다. 이에 대해 설명하고자 합니다. 2. Compare unicode 사용자는 unicode를 통해 다양한 문자를 입력할 수 있습니다. 서버는 사용자가 입력한 값을 처리하는 과정을 거치겠죠. 예를들어, 사용자가 unicode K 를 입력했다고 가정합시다. 이 값과 ASCII 에서 소문자 k 와 비교하면 당연히 `false`가 출력 되겠죠. "K" == "k" false 하지만, unicode K를 toLowerCase() 함수를 이용하여 소문자로 바꾼 뒤, ASC..
[android] - macos m2 android virtual device (emulator) 검은 화면 해결 방법
[android] - macos m2 android virtual device (emulator) 검은 화면 해결 방법
2022.09.201. Intro 저는 macos m2 를 사용하고 있습니다. 안드로이드 앱을 분석할 일이 있어 android studio를 설치하여 AVD를 설치했습니다. 하지만, AVD에서 검은 화면만 출력되어 문제를 겪었습니다. 2. How to solve 제 환경에서는 다음과 같은 AVD를 설치하여 해결했습니다. 1. Pixel 4를 선택합니다. 2. 아래 사진에서 파란색 박스를 선택합니다. Release Name : S API Level: 31 Target: Android 12.0 3. 설치를 완료하고 실행하면, 아래 사진처럼 성공적으로 AVD가 실행된 것을 볼 수 있습니다. 4. 실행이 안되거나, 예전에 실행이 됐었지만 다시 실행했을 때 검은 화면이 출력된다면, Cold Boot Now를 선택하면 해결됩니다.
[수상] - 제 3회 KOSPO 웹서비스 정보보안 경진대회 최우수상
[수상] - 제 3회 KOSPO 웹서비스 정보보안 경진대회 최우수상
2022.09.16그토록 웹 모의해킹 대회에서 상을 타보고 싶어, 제 1회부터 매년 참가했습니다. 제 1회에는 순위권에 못들었고, 제 2회에는 3점 차이로 장려상을 놓쳤습니다. 하지만 올해 제3회는 진짜 마지막이라고 생각하면서 팀원들을 모집했습니다. 개인적인 일로 참가를 못할 뻔 했지만, 친구의 도움으로 대회에 임할 수 있었습니다. 그결과,, 최우수상(2위) 이라는 좋은 결과를 얻었습니다. 정말 그토록 바랬던 수상을 하게 되었습니다. 끝까지 최선을 다한 팀원분들이 있었기에, 그리고 올해 마지막의 대학생 팀으로 참가하여 좋은 상을 타게 되어 정말 좋았습니다.
Spring boot HandlerMethodArgumentResolver
Spring boot HandlerMethodArgumentResolver
2022.09.07https://starkying.tistory.com/entry/Spring-MVC-%E2%80%94-HandlerMethodArgumentResolver-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
[분석일기] - php switch case
[분석일기] - php switch case
2022.09.061. Intro 얼마전 cake CTF 2022 대회가 있었는데, 일 때문에 주말에는 쉬고 싶어서 참가는 안했네요,,, 암튼 이후 writeup을 봤는데 신기해서 기록하고자 합니다. 2. switch case if else 구문이 지저분한 사람들이 switch case 구문을 좋아하더라구요. 아래처럼 switch case 구문이 있다고 가정해 봅시다. POST방식으로 `user` 정보를 받고 이를 json으로 파싱하고 있습니다. 이후 if 문으로 입력 값을 검증하고 있습니다. 최종적으로는 `user->name` 변수의 값이 admin 이어야 하지만, if문에서 admin 문자열을 필터링 하고 있습니다. 어떻게 하면 이를 bypass 할 수 있을까요? 정답은 switch case 구문에 있습니다. 공식 d..
DiceCTF 2022 writeup
DiceCTF 2022 writeup
2022.07.250. Intro TeamH4C에 가입하여 처음으로 참가한 CTF 대회 입니다. 저는 웹만 풀었는데,, 다른 분들이 웹 외의 분야도 많이 풀어서 19등으로 마무리 되었네요. 웹 문제는 쉬운 문제를 제외하고, 풀이를 작성하려고 합니다. 1. web / point 이 문제는 golang 으로 작성된 web 문제 입니다. go 언어에 대해 지식이 없지만, 이번 기회를 통해 풀어보려고 했습니다. POST 방식으로 전송하면, body에 특정 문자열이 있는지를 검증하고 있습니다. 아래 코드에서는 2번째 if 문에서 `what_point` 와 `\` 를 필터링 하고 있네요. 이후, `json.Unmarshal()` 함수를 통해 body 값을 json parsing 하고 있습니다. json paring 결과는 `what..
[분석 일기] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)
[분석 일기] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)
2022.07.21🚪 Intro 2022년 4월달에 nodejs 의 모듈인 EJS에서 RCE 취약점이 발견되었습니다. 맨 아래 Reference 에 있는 링크를 참고하여 어떻게 EJS에서 RCE가 가능한지를 분석해 봤습니다. 취약한 EJS 버전은 `3.1.6` 이하 버전입니다. 해당 취약점은 `3.1.7`에서 패치 되었습니다. 💡Analysis 환경 세팅을 위해 아래와 같은 명령어로 취약한 EJS 버전을 설치해 줍니다. npm install ejs@3.1.6 이후 간단한 코드를 작성하여 서버를 시작해 줍니다. // index.js const express = require("express"); const app = express(); app.set("view engine", "ejs") app.get("/", (req, ..
[분석 일기] - Microsoft Teams - Cross Site Scripting (XSS) Bypass CSP (CVE-2021–24114)
[분석 일기] - Microsoft Teams - Cross Site Scripting (XSS) Bypass CSP (CVE-2021–24114)
2022.07.19해당 내용은 아래 사이트를 통해 어떻게 취약점을 찾았는지를 분석하는 글 입니다. Microsoft Teams — Cross Site Scripting (XSS) Bypass CSP During my early stages of employment at Gais Cyber Security in 2021, my manager had reached out to me over the phone and said with… medium.com Microsoft Teams 에서 스티커를 보내는 기능이 있습니다. (필자는 해당 기능을 찾아봤는데, 저런 기능이 안보이더라구요,,) 스티커 기능을 통해 메시지를 전송하면, 아래 사진처럼 POST 방식으로 body에 데이터를 넣어 전송합니다. 이때 content 라는 key의..
Node.js querystring 함수 분석과 bug 설명
Node.js querystring 함수 분석과 bug 설명
2022.07.09🚪 Intro 작년 Line 2021 CTF 웹 문제를 풀다가 기록하고 싶어 작성하려고 합니다. 바로 Node.js 에서 built-in 모듈인 `querystring` 입니다. 현재는 deprecated 된 모듈입니다. 💡 About querystring module Node.js 공식 문서에 설명된 `querystring`에 대한 설명은 다음과 같습니다. 기본으로 URL의 query string을 파싱하는데 사용됩니다. 사용방법은 공식문서에 다음과 같이 설명하고 있습니다. `parse()` 함수의 첫번째 인자에 URL의 query string 값을 넘겨줘야 하며, 나머지 인자들은 기본 값으로 설정 됩니다. 예를들어, 아래 사진처럼 `parse()` 함수의 첫번째 인자에 foo=1&abc=2 라는 값을..
[WACon 2022] yet_another_baby_web
[WACon 2022] yet_another_baby_web
2022.06.28🚪 Intro 웹 2번째 문제 입니다. 이 문제 역시 poc 코드와 힌트를 보고 정보를 찾은 뒤 풀게 되었는데요. 이 문제를 풀기 위해서는 `session upload progress` 에 대해 알고 있어야 합니다. 💡 Analysis - 코드 분석 POST 방식으로 url 데이터를 넘기면 curl 명령어를 실행합니다. 이때 url 값은 여러번의 필터링을 거치게 되죠. curl 실행 후 출력 값에는 본인의 UUID 값이 포함되어 있어야 출력 값을 볼 수 있습니다.
[WACon 2022] ppower write up
[WACon 2022] ppower write up
2022.06.28🚪 Intro 웹 3번째 문제 ppower 입니다. 이 문제는 `prototype pollution` 을 통한 RCE를 하는 문제입니다. 💡 Analysis - 코드 분석 /answer 페이지로 GET 방식의 데이터를 전달할 수 있습니다. 이는 `req.query` 에 저장되여 `merge()` 함수를 통해 `r` 변수에 저장되는데, `merge()` 함수는 어떠한 검증없이 merge 하고 있습니다. 전형적인 prototype pollution 공격에 취약한 코드 입니다. 또한, 53번째 줄에서 `config.flagForEveryone` 값이 무조건 false가 아니어야 합니다. 그래야 `sendFlag()` 함수가 실행되죠. `sendFlag()` 함수를 보면, 25번째 줄에서 `childProces..
[WACon 2022] Kuncɛlan write up
[WACon 2022] Kuncɛlan write up
2022.06.27🚪 Intro 20명이나 푼 웹 첫번째 문제 입니다. 물론 풀다가 포기하고, 대회 끝난 이후 힌트와 친구의 도움으로 해결했습니다. 해당 문제를 풀기 위한 Keyword는 다음과 같습니다. `LFI` `hash length extension attack` `SSRF` `SQLI` 💡 Analysis - 화면 흐름 문제 사이트에 접속하면 로그인 페이지로 이동 됩니다. 로그인 후 "fun" 이라는 페이지로 이동하면 아래 사진처럼 SSRF 느낌이 나는 페이지가 출력됩니다. input 태그에 값을 입력하면, 해당 기능은 로컬에서만 동작하는 것을 알 수 있습니다. 코드가 없는 상태에서 우회하기에는 힘들기 때문에, 다른 방법을 찾아야 합니다. 💡 Exploit - LFI 위 페이지에는 LFI 취약점이 존재합니다. f..
처음으로 CVE 발급 받은.ssul [CVE-2022-29452]
처음으로 CVE 발급 받은.ssul [CVE-2022-29452]
2022.05.28Intro 작년 까지는 국내 버그 바운티 프로그램에 참가하여 취약점을 제보하고 포상금을 받았습니다. 올해의 목표는 CVE 를 발급 받는 것이었는데요. 어떻게 찾게 되었는지 간단하게 작성하고자 합니다. CVE를 발급해주는 기관을 찾다보니 wordpress 와 wordpress plugin에서 취약점을 찾게 되면, 정해진 기관에 제보하여 CVE 발급을 해줄 수 있다는 정보를 얻었습니다. 저는 Patchstack 기업에 wordpress plugin 취약점을 찾아 제보하였는데요. 제보를 하다보니 1월달에는 여러개의 취약점을 찾아 제보하게 되었습니다. 운이 좋게도, Patchstack은 달마다 순위를 매기게 되는데 1등을 차지 했습니다. 포상금 기대를 하지 않고 CVE 목적으로 제보했는데, 1등이라 포상금도 주..
분석 일기 - file upload 취약점
분석 일기 - file upload 취약점
2022.05.12🚪 Intro 취약점 및 CVE 획득을 위해 분석하고 있는 프로젝트가 있습니다. file upload를 통한 webshell 획득 과정을 정리하고자 합니다. 💡 Analysis 분석하려는 웹 사이트에는 업로드 기능이 존재 합니다. 다만 ico, webp, svg 확장자만 업로드 할 수 있습니다. 그런데 아래 코드를 보면서 의문점이 생기더라구요. 보통 파일 업로드 관련 기능을 만들 때, 확장자 검증은 .(dot) 을 기준으로 문자열을 나누어 맨 마지막 값을 확장자로 판단 합니다. 이렇게 추출된 확장자로 업로드 할 파일을 필터링 하게 되죠. 하지만, 위 코드는 `strpos()` 함수를 사용하여 업로드 파일의 확장자를 검사하고 있습니다. 이 함수는 문자열의 위치를 int 로 리턴합니다. 예를 들면, 아래와 ..
NBB-2330
NBB-2330
2022.04.21📅 Timeline 2022-03-14: Reported vulnerability. 2022-03-14: Checked report. 2022-03-16: Verified a vulnerability and reported to dev department. 2022-04-21: Fixed a Vulnerability. Comming soon.
NBB-2301
NBB-2301
2022.04.21📅 Timeline 2022-02-21: Reported vulnerability. 2022-02-22: Checked report. 2022-02-22: Verified a vulnerability and reported to dev department. 2022-04-13: Fixed a Vulnerability. Comming soon.
NBB-2238
NBB-2238
2022.04.21📅 Timeline 2022-01-06: Reported vulnerability. 2022-01-06: Checked report. 2022-01-06: Verified a vulnerability and reported to dev department. 2022-02-23: Fixed a Vulnerability. 2022-03-22: Bounty time.
NBB-2217
NBB-2217
2022.04.21📅 Timeline 2021-12-21: Reported vulnerability. 2021-12-22: Checked report. 2021-12-22: Verified a vulnerability and reported to dev department. 2022-01-12: Fixed a Vulnerability. 2022-02-08: Bounty time.
NBB-1810
NBB-1810
2022.04.21📅 Timeline 2021-04-09: Reported vulnerability. 2021-04-12: Checked report. 2021-04-12: Verified vulnerability and reported to dev department. 2021-05-17: Fixed Vulnerability.
KVE-2021-1414
KVE-2021-1414
2022.04.21📅 Timeline 2021-11-10: Reported vulnerability. 2021-11-10: Checked report. 2021-11-10: Verified vulnerability and forword to manufacturer. 2021-12-06: Bounty time.
KVE-2022-0015
KVE-2022-0015
2022.04.21📅 Timeline 2021-12-27: Reported vulnerability. 2021-12-27: Checked report. 2021-02-15: Verified vulnerability and forword to manufacturer. 2021-04-05: Bounty time.