목록2019/04/14 (4)
White Security
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..