목록CTF Writups (25)
White Security
Asia CTF web 2번 Flask SSTI 문제입니다. 접속하면 입력 폼 하나와, 링크 6개가 보이는데 링크는 아직까지도 무슨 의도인지 모르겠습니다. 소스를 보면 주석으로 파이썬 소스가 주어집니다. 소스가 필요할 정도로 어렵지는 않았는데 보너스 문제 같은 느낌이라 준 것 같습니다. from flask import Flask, session from flask_session import Session from flask import request from flask import render_template from jinja2 import Template import fort Flask.secret_key = fort.SECKEY app = Flask(__name__) app.config['SESSI..
TG:Hack 2019 CTF web 5번 Flask SSTI 문제입니다. 접속하면 로그인 폼이 보이는데, 대강 입력해보면 NO MAGIC DETECTED 에러 메시지가 출력됩니다. hidden 항목으로 지정된 has_magic 값을 1로 바꾸어주면 정상적으로 로그인 되는 것을 확인할 수 있습니다. 로그인을 하면 채팅창이 등장하는데 입력하는대로 저장되며 다른 사용자들과 담소를 나눌 수 있습니다.. ㅎㅎ 여러가지 입력을 넣어 보다가 배열을 입력으로 주니 KeyError 가 발생했는데 이를 보고 Flask 를 떠올렸습니다. response 에는 일단 nginx 라고 표시되었지만 wsgi 인가 하는 녀석을 이용하면 복합적으로 운용할 수 있으니까요. Flask SSTI 를 생각하고 채팅 시스템에 여러가지를 대입..
Hack Zone Tunisia 2019 web 4번 SSTI 문제입니다. 접속하면 멋진 플라스크 GIF와 이 플라스크로부터 플래그를 얻으라는 메시지가 보입니다. 소스를 살펴보면 깔끔합니다. css 파일도 열어봤지만, 전혀 도움이 되지 않았습니다. http://149.56.110.180:5000/robots.txt robots.txt 경로 힌트가 있는지 알아보기 위해 robots.txt 파일을 요청해 보았는데 뜻밖의 응답이 나왔습니다. 요청한 PATH가 그대로 출력이 되는 것이죠. 여기서 python-flask SSTI 취약점을 떠올릴 수 있었습니다. http://149.56.110.180:5000/{{7*7}} 49 기대한대로 연산이 수행되는 것을 확인할 수 있습니다. 다만 flask 기본 변수인 se..
ByteBandit CTF Web 4번 SSRF 문제입니다. 저는 이 문제를 풀지 못했습니다. 풀지 못한 문제의 Writeup을 올리는 것은 처음인데 재미있는 기법이 사용되었으므로, 특별히 기록하였습니다. 사이트에 접속하면 Online Previewer 1 문제와 동일한 단일 폼이 보입니다. 플래그가 숨겨진 장소도 동일합니다. 그럼 검증 방법이 강화되었다는 것이겠죠? 127.0.0.1 을 가리키는 도메인을 넣어도 훌륭하게 막고 있는것을 볼 수 있습니다. 동일하게 로컬호스트로 해석되는 도메인을 몇개 더 넣어봤지만 동일하게 막혀있는 것을 보면 실제로 도메인 서버에 요청하여 주소를 검증하고 있다는 것을 추측해볼 수 있습니다. 이 문제는 기형의 dns 서버를 구성함으로서 해결할 수 있습니다. 위 사진을 보면 동..
ByteBandits CTF Web 2번 SSRF 문제입니다. 사이트에 접속하면 단일 폼이 보입니다. 주소를 입력하고 제출하면 요청한 URL의 페이지가 표시되는 것을 확인할 수 있습니다. webhook.site 를 이용하여 해당 요청을 받아보면 user-agent 를 보아 서버에서 python의 requests 모듈을 이용해 데이터를 가져온다는 사실을 알 수 있습니다. 메인 페이지의 소스를 확인해 보면 127.0.0.1:1337 주소에 비밀이 숨겨져 있다는 것을 알려줍니다. 그러나 실제로 접속을 시도해 보면 Can't do that mate. 메시지와 함께 거부됩니다. 본 문제는 제공된 도메인 문자열을 통해 로컬호스트인지 검증을 수행하고 있는데요 실제 요청을 보내 확인하지 않고 문자열만을 통한 도메인 검..
ByteBandits CTF Web 1번 parse_str 함수 취약점 문제입니다. 링크에 접속하면 parse_url 함수로부터 파싱되는 요청 URL의 ? 뒷부분이 존재하지 않는다면 소스를 출력하도록 되어 있습니다. parse_str 함수에 의하여 GET 방식으로 제공된 인자는 모두 일반 php 변수로서 변환됩니다. 마치 register_globals = on 를 적용한 것과 비스무리한 결과를 가져오는 것이죠. sha2('posix') = 270dfabe9df986d649e48acd477c99c30245a25148b53f89b24ee34afcfdaa0f 따라서 get 메소드로 하여금 action, key, hashed_key 변수를 덮어씌워 주면, 인증을 우회할 수 있겠습니다. http://easyphp..
Midnightsun CTF web 1번 XSS 문제입니다. 사이트에 접속하면 위와 같은 폼이 하나 있는데 가운데 텍스트 박스에 접속시 alert(1) 가 뜨도록 xss 처리가 된 URL을 넣어주면 해결입니다. 물론 URL 해당 사이트 내부 URL 이어야 하고 중간의 here 이라는 색상이 다른 텍스트를 보면 링크가 걸려있는데요. 해당 서비스 페이지 내에서 파라미터를 적절히 넣어주면 자바스크립트를 통해 렌더링되기에 이를 잘 활용하면 되겠습니다. here 문자열을 클릭해 링크로 접속하면 Input, Preview 두개의 란이 존재합니다. Input에 뭔가를 입력하면 일정 규칙에 따라 변환되어 Preview 란에 나타나게 되는 것이죠. 사이트에 접속하면 location.search 에서 정규식을 통해 Inp..
Encrypt CTF web 4번 Flask SSTI 문제입니다. 사이트에 접속하면 푸른 아이콘들이 보이는데 스크롤을 내리려고 하면 이미지가 계속적으로 증가하기에 하단 내용을 확인할 수 없도록 되어 있습니다. 소스를 확인하면 스크롤시 이미지 증식 기능을 구현하는 자바스크립트 코드와 하단에 base64로 인코딩된 주석문이 보입니다. d2hhdF9hcmVfeW91X3NlYXJjaGluZ19mb3IK L2xvbF9ub19vbmVfd2lsbF9zZWVfd2hhdHNfaGVyZQ== Lz9zZWNyZXQ9ZmxhZw== what_are_you_searching_for /lol_no_one_will_see_whats_here /?secret=flag 주석은 새로고침을 할 때마다 랜덤으로 바뀌는데 디코딩 해보면 페이..