White Security
19년 5월 24일 부터 https://p.osix.kr 으로 이전하였음을 알려드립니다. 감사합니다.
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..