음 문제 자체는 괜찮았을거 같은데 buuctf에서 정보를 안준건지.. 하여튼 좀 그렇다.
이유는 차차 설명하도록 하겠따.
일단 문제 컨셉 자체는 blackhat usa 19에서 발표되었던 host split attack 이다.
unicode를 idna로 정규화 하였을 때 NFKC로 정규화하여 url hostname의 해석 시 한글자의 유니코드가 여러글자의 아스키로 변환되는 등 특이동작을 유발하여 필터링을 우회하는 공격이다.
여기선 python에서 urlparse.urlsplit 함수가 NFKC 정규화를 따르지 않아 idna 정규화된 결과와 urlsplit의 결과가 달라 hostname filtering을 우회할 수 있는 문제를 지적하여 문제로 만들었따.
https://bugs.python.org/issue36216
Issue 36216: CVE-2019-9636: urlsplit does not handle NFKC normalization - Python tracker
Issue36216 Created on 2019-03-06 17:37 by steve.dower, last changed 2019-05-10 18:05 by ned.deily. This issue is now closed. URL Status Linked Edit PR 12201 closed steve.dower, 2019-03-06 17:45 PR 12213 merged steve.dower, 2019-03-07 16:07 PR 12215 merged
bugs.python.org
어쨌든 스키마검사는 안하고
urlparse.urlparse와 urlparse.urlsplit의 hostname이 'suctf.cc'가 아니게 나오게 하고,
idna 인코딩 이후엔 urlparse.urlsplit의 hostname이 'suctf.cc'가 나오게 하면 된다.
[!] unistr ℂ (2102) -> c (63) |
머 이런거 이용해주면 되는데 작년에 한참 host split 문제 나와가지고 빡쳐있었는데 이거 본 참에 전수조사 해버렸따. blackhat 발표자료에 나온거 외에도 많이 나왔는데,
궁금하신분들은 직접 조사해보시길!~ 안알려줄거지롱~~
어쨌든 저 중 하나 써보면 되는데
아니 이문제 불합리하다고 느낀게
내 파이썬 환경에서 urllib.urlopen('file:') 스키마에서 어떻게해도 문제 풀이처럼 file://suctf.cc/opt/../etc/passwd 를 열 수가 없다.
아마 모종의 이슈로 file스키마에 대한 검증부분이 더 들어갔거나.. 아니면 문제 환경에서 특정 python version을 명시해줬는데 buuctf에선 안해줬따거나 그런거 같은데.
하튼 저 위에 구문대로 하면 lfi가 가능해진다.
file://suctf.℆sr/../etc/passwd |
이제 문제에선 nginx 아냐고 물어봤는데
nginx.conf 가져와보자
'Web > BUUCTF' 카테고리의 다른 글
[BUUCTF] - [极客大挑战 2019]BabySQL1 (0) | 2020.03.06 |
---|---|
[BUUCTF] - [GXYCTF2019]Ping Ping Ping1 (0) | 2020.03.06 |
[BUUCTF] - [极客大挑战 2019]Http1 (0) | 2020.02.28 |
[BUUCTF] - [BUUCTF 2018]Online Tool (0) | 2020.02.28 |
[BUUCTF] - [ZJCTF 2019]NiZhuanSiWei1 (0) | 2020.02.26 |