CTF
-
[Study] ALLES! CTF 2021 J(ust)-S(erving)-P(ages) WriteupCTF/ALLES! CTF 2021 2021. 9. 5. 19:18
주어진 URL에 접근해보자. 눈에 보여지는 기능은 로그인/로그아웃, 회원가입 기능 뿐이었다. 아마 admin 권한 계정으로 접근하면 플래그를 출력해주는 것 같다. 주어진 소스를 분석해보자. *ConfigSevlet.java package cscg.servlets; import java.io.*; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReque..
-
[Clear] ALLES! CTF 2021 Sanity Check WriteupCTF/ALLES! CTF 2021 2021. 9. 5. 16:48
이 대회는 sanity check을 특이하게 misc나 기본 제공이 아닌 web 카테고리로 출제를 하였다. 주어진 URL에 접근하면 아래와 같은 페이지가 나타난다. 처음에는 저 이모티콘이 케이크처럼보여서 You aren't a cake, right?이 무슨소린가 했는데, 자세히 보느 로봇이었다. 따라서 /robots.txt에서 플래그를 획득 할 수 있었다. Flag = ALLES!{1_nice_san1ty_ch3k}
-
[Clear] corCTF 2021 web/devme WriteupCTF/corCTF 2021 2021. 8. 23. 22:17
다소 생소한? 분야의 문제여서 그런지 난이도에 비해 푸는데 오래걸렸던 문제이다.. 주어진 페이지에 들어가보자. 아래 기능 말고는 작동하는 기능이 없다. 요청이 어떤식으로 이루어지는지 Burp Suite를 통해 확인해 보았다. 이메일을 입력하면 query의 동작을 통해 username이 생성되는 듯 했다. 요청 URL(/graphql) 과 쿼리의 형식으로 봤을 때, graphql injection 공격을 통해 풀이 할 수 있을 것이라고 추측했다. graphql은 페이스북에서 개발되어진 질의어라고 하는데, 문제에서 페이스북 어찌구 했던 것이 그 이유였던것 같다. https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%98%ED%94%84QL 그래프QL - 위키백과, 우리 모두의 백..
-
[Study] Hacker's Playground 2021(SSTF) poxe_center WriteupCTF/Hacker's Playground 2021(SSTF) 2021. 8. 23. 21:40
이번 SSTF Hacker's Playground 2021 는 웹 문제 가뭄이었다.. 다른 WEB 태그가 달린 문제는 사실상 Pwn이었다. 이 문제는 유일하게 WEB 스러운(?) 문제였는데 문제가 늦게 나와서 업무시간과 겹치는 바람에 대회 기간내에는 집중해서 풀지 못했었다. 그래서, 대회는 종료되었지만 이 문제를 풀어보았다. 전설의 포켓몬을 잡으라는 문제인듯 하다. 주어진 페이지에 접속해보자. http://poxecenter.sstf.site:31888/demo/getGochaList?sortName=full_name&sortFlag=desc 위와 같은 URL이 호출되면서 Gatcha list 라는 페이지가 안내된다. 파라미터 이름과 내용을 보니 ~~~ ORDER BY {sortName} {sortFla..
-
[Clear] LIT CTF 2021 web/A Flask of Pickles WriteupCTF/LIT CTF 2021 2021. 7. 21. 07:26
주어진 페이지에 접속해보면 다음과 같이 안내된다. Create Profile 을 실행해보면 임의의 id가 발급되면서 아래와 같은 페이지가 나타난다. 입력 값을 서버에서 처리하는 과정에서 Python Pickle Deserialization Vulnerability 가 발생하는 듯 하다. 주어진 소스를 보면 단순한 Pickle 문제는 아님을 알 수 있다. 데이터를 전송 할 때, 사용자 입력 값에 대하여 아래와 같이 일련의 바이트 데이터와 함께 처리 하는 과정이 포함되어 있으며 Profile Page Maker Name: Bio: Create Profile! 데이터를 받아서 처리 하는 로직 또한 바이트 데이터로 일종의 필터링이 되어 있다. import secrets from flask import Flask..
-
[Clear] LIT CTF 2021 web/LIT BUGS WriteupCTF/LIT CTF 2021 2021. 7. 20. 18:46
주어진 페이지에 가보면 대회 페이지와 유사한 페이지가 나타난다. 다른 기능들은 막혀있고, 회원 가입 및 로그인 기능만 살아있다. 문제에서 언급되어있듯이, 가입되어있는 팀 이름이 플래그라고 한다. 주어진 소스의 일부이다. 핵심 기능인 로그인 부분을 분석해보자. 특이한점은 소켓 통신을 하고 있다는 점이다. io.on('connection',(socket) => { socket.on('login',(tn,pwd) => { if(accounts[tn] == undefined || accounts[tn]["password"] != md5(pwd)) { socket.emit("loginRes",false,-3); ##### ............................. (1) return; } socket...
-
[Clear] redpwnCTF 2021 web/cool WriteupCTF/redpwnCTF 2021 2021. 7. 13. 23:56
주말부터 월요일 밤까지 redpwnCTF가 열렸다. 이번 대회는 Dreamhack CTF #10 과 겹치기도했고, 시간이 많이 안나서 틈틈히 참여했다. 총 5문제 Solve하였는데 그 중 그마나 난이도가 있었던 cool 문제를 풀이해보자 주어진 페이지에 접근해보자. 회원 가입 후 로그인을 시도하면 아래와 같은 안내문구가 나온다. ginkoid 계정으로 로그인을 하면 플래그가 주어지는듯 하다. 주어진 소스를 분석해보자. 플래그 획득 조건은 아래와 같다. @app.route('/message') def message(): if 'username' not in session: return redirect('/') if session['username'] == 'ginkoid': ##### .............
-