일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- LD_PRELOAD
- 정보보호병 면접
- CTF writeup
- 2019 사이버작전 경연대회 writeup
- 2019 사이버작전 경연대회
- ctf web writeup
- 정보보호병 면접 후기
- 파일 업로드 bypass
- 2019 사이버작전
- 문화상품권 핀번호 자동등록
- file_upload bypass
- 상품권 매크로
- 정보보호병 면접 질문
- ctf php
- 컬쳐랜드 매크로
- file upload ld_preload mail
- 문화상품권 매크로
- 화이트햇 writeup
- ctf php eval
- file upload ld_preload
- 정보보호병 면접 준비
- 사이버작전 경연대회 writeup
- CTF
- 파일 업로드 취약점
- file upload vulnurability
- 파일 업로드 ld_preload
- 2019 화이트햇 writeup
- 육군 정보보호병
- webhacking
- 2019 화이트햇
- Today
- Total
Blog to Blog
[Webhacking] 2019 사이버작전 경연대회(화이트햇) 라이트업 - The Camp 본문
해당 문제는 2019 사이버작전 경연대회(구 화이트햇) 에서 출제된
The Camp라는 문제의 writeup 입니다.
어렵지 않은 문제지만 마지막에 매우 이상한 짓(?)을 하나 더 해야 풀 수 있는 문제였습니다.
이 문제는 아쉽게도 CTF 도중에 풀지 못했습니다.
그래도 XSS를 하는 부분은 남겨놓을만 해서 적어둡니다.
블랙박스 문제입니다.
Write를 통해 편지를 보낼 수 있다고 합니다.
편지를 보내면 어드민이 읽고 확인 후에 친구한테 보내준다고 적혀있습니다.
여기서부터 XSS 냄새가 솔솔 났습니다.
먼저 그냥 일반적인 방법으로 편지를 보내봤습니다.
크롬 Headless 브라우저 등으로 요청이 들어오면 체크해주는 것으로 추측됩니다.
그러나 여기서 문제가 있습니다.
<script를 막아둬서 스크립트 태그를 사용할 수 없습니다.
하지만 <img src="#" onerror="alert(1)">과 같은것은 가능합니다.
그러면 여기서 그냥 해결을 보면 되지 않냐고 생각할 수 있지만,
어드민에게 체크를 요청할 때 날리는 URL에 safe_view의 역할 때문에 저렇게 해결할 수는 없습니다.
저 safe_view가 GET parameter에 존재하면, CSP의 script-src를 'self'로 해서 응답하기 때문에,
inline-script를 사용할 수 없습니다.
게다가 저 URL을 수정해서 safe_view를 없애는것도 막혀있습니다.
<script> 태그가 사용 불가능하니
결국 iframe과 같은 방법으로 들고와야 합니다.
여러가지를 시도한 후에 <iframe>이나 <META>는 막혀있지만
<object> 태그는 막아두지 않았다는 사실을 알게 되었습니다.
또한 문제에서 어드민의 세션을 탈취하라고 적혀있으므로, 쿠키 값을 가져와야겠다고 생각했습니다.
먼저 위와 같은 letter을 작성해줍니다.
이 친구는 나중에 object 안에 들어가서 실행되는 역할입니다.
무료 bin 사이트를 이용했고, GET 파라미터에 document.cookie를 같이 날리도록 했습니다.
그리고 방금 만든 letter을 object로 갖는 letter을 새로 만들었습니다.
iframe이나 object로 만들었기 때문에 부모가 CSP로 script-src 'self' 헤더를 갖고있더라도
영향을 받지 않아 inline-script가 실행될것입니다.
이로 인해 CSP가 적용되더라도 object 내부의 스크립트가 정상적으로 작동됩니다.
(해당 무료 bin 사이트의 URL로 들어가면 위와같은 "success":true가 뜹니다)
이제 이걸 어드민이 체크하도록 하고 결과를 봐봅시다.
기다리면 쿠키값을 읽어오게됩니다.
cred라는 값에 y0u_4r3_g0000000d_47_byb_!!가 날라옵니다.
PHPSESSID도 날라오는데 이건 할때마다 다른 값이 날라옵니다.
결국 저 cred라는 쿠키값이 중요한 것인데,
이 이후로는 어떻게 해야 플래그를 얻을 수 있을지 알아낼 수 없었습니다.
사실 사이트에 secret.php라는 것이 있긴 한데
여기에 들어가도 항상 admin이 아니므로 서버를 초기화할 수 없다는 말만 나옵니다.
그래서 cred를 y0u_4r3_g0000000d_47_byb_!!로 바꾸고 들어가 보기도 하고,
해당 어드민 봇이 저기에 접속하도록 유도해서 응답 값을 가져와 보기도 하고(XMLhttprequest 이용)
local ip로 접속해야만 되나 해서 어드민 봇이 127.0.0.1로 들어간 다음에 이동하도록 유도해 보기도 했습니다만, 모든 방법은 실패했습니다.
그렇게 5시간 이상을 이 문제에 투자하고 포기한 뒤에 대회가 끝나자 마자 푼 팀의 해설을 들어봤는데 너무 충격적이었습니다.
해당 php 파일의 swp 파일이 존재한다는 것이었습니다.
그리고 해당 파일을 확인하면
PHP phar을 이용해서 뭔가 적혀있는 모습을 볼 수 있습니다.
여기서 flag.php가 있는 걸로 봐서 해당 php 파일을 실행시키면 플래그를 읽을 수 있을 것입니다...
그리고 해당 파일은 admin.phar/flag.php로 접속하면 볼 수 있습니다.
그리고 여기서 admin이 아니라는 단어가 나오는데,,
그냥 쿠키의 cred에 아까 얻은 y0u_4r3_g0000000d_47_byb_!!를 넣고 들어가면 됩니다.
그러면 FLAG를 얻게 됩니다...
.swp 파일을 찾아볼 생각을 하지 못해서 풀지 못했던 아쉬운 문제였습니다ㅜ
정답 : FLAG{w0000h_RainbowReflect_PHP}
'Hacking > Writeup' 카테고리의 다른 글
[WebHacking] TG:HACK 2020 WriteUp - Bobby (0) | 2020.04.11 |
---|---|
[WebHacking] Securinets Prequals 2K20 WriteUp - Welcome (0) | 2020.03.22 |
[WebHacking] 2019 PwnTheBytes CTF WriteUp - The Ultimate Shipping System (0) | 2019.10.03 |
[Webhacking] 2019 사이버작전 경연대회(화이트햇) 라이트업 - Hidden Command (3) | 2019.08.19 |