Study

HackTM Quals 2023 CTF

P4P3R_H 2023. 2. 21. 00:14

WEB

- BLOG

http://34.141.16.87:30000/login.php

해당 문제는 위와 같은 login.php 페이지와 register.php, index.php, create.php, util.php로 구동됩니다.

회원가입을 하여 로그인 하면 index.php로 이동하게 되는데 아래와 같이 Create post를 통해 블로그 글을 포스팅할 수 있는 형태로 되어있었습니다.

 

처음 문제를 접하였을 때, 해당 포스팅 기능을 이용하여 쿠키 값을 가져오도록 하는 문제로 생각하였습니다.

하지만 생각한 것과 다르게 xss가 작동은 하였지만, 저의 cookie값만 확인 가능하였습니다.

 

Tzo0OiJVc2VyIjoyOntzOjc6InByb2ZpbGUiO086NzoiUHJvZmlsZSI6Mjp7czo4OiJ1c2VybmFtZSI7czozOiIxMTEiO3M6MTI6InBpY3R1cmVfcGF0aCI7czoyNzoiaW1hZ2VzL3JlYWxfcHJvZ3JhbW1lcnMucG5nIjt9czo1OiJwb3N0cyI7YTowOnt9fQ%3D%3D

해당 값이 나왔고, 해당 값은 base64로 encoding되어 url encoding된 값으로 되어있었습니다.

 

O:4:"User":2:{s:7:"profile";O:7:"Profile":2:{s:8:"username";s:3:"111";s:12:"picture_path";s:27:"images/real_programmers.png";}s:5:"posts";a:0:{}}

처음에는 이와 같은 값이 나와 포스트 페이지에 script를 이용한 공격을 모두 해보았지만, 되지않았습니다.

 

다시 처음 쿠키 부분으로 돌아와 decoding한 값을 확인해보았습니다.

처음 O는 Class의 글자 수 처럼 보였고, 2라는 값을 통해 {}를 선언하고 s를 통해 해당 Class에 있는 변수의 글자 수와 이름, 값을 설정하는 것처럼 보였습니다.

주어진 util.php를 확인하였을 때, 해당 값은 php에서 제공하는 serialize()를 통해 직렬화하여 위와 같은 값으로 보여지는 것이었습니다.

 

여기서, username에 s:3:"111"되어 있는 부분이 로그인한 user정보인데 "111"과 id길이인 3을 존재하는 id와 길이로 변경하면 다른 사람의 id로 로그인이 되었습니다. 그렇기에 다른 사람이 작성한 블로그 내용을 확인할 수 있었는데 여기서 이러한 방식으로 문제를 해결하는지 알고 계속 해당 방식으로 문제를 풀어보았습니다.

그러다 script관련 공격을 하다 LFI공격을 시도해봤던 것이 생각나 picture_path부분인 images/real_programmers.png와 해당 값의 길이 부분을 /etc/passwd로 변경하여 index.php부분에서 새로고침을 시도해보았습니다.

이미지가 변경된 것을 확인하였고, 이미지 태그의 내용이 base64로 encoding되어 출력되고 있는 것을 확인하였습니다.

아래와 같은 값이 출력된 것을 확인하여 해당 기능을 이용하여 flag의 경로를 적어 입력하면 될 것으로 보여 flag.txt가 있을만한 경로와 에러 메시지로 확인한 기본 경로인 /var/www/html을 기준으로 출력해보았습니다.

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin

계속 찾지 못하고, 코드를 다시 보는데 /sqlite3/db에 입력 값들을 저장하는 것을 확인하여 해당 값을 img태그에 출력하도록 만들어 확인하였습니다. base64 decoding을 하여 확인 중 ../../../../../02d92f5f-a58c-42b1-98c7-746bbda7abe9/flag.txt와 같이 flag.txt를 찾는 입력값들이 많이 보였고, 해당 flag.txt는 /02d92f5f-a58c-42b1-98c7-746bbda7abe9 디렉토리에 있을거라 보여 img태그에 넣어 확인하였습니다.

base64 decoding을 통해 HackTM{r3t__toString_1s_s0_fun_13c573f6}의 flag를 확인하였습니다.

 

결국, 해당 문제는 방향을 잘못잡아 대회가 끝난지 모르고 계속 풀다가 flag를 획득하고 정답을 입력할 때 대회가 끝난걸 알게된 문제였습니다.🥲

해당 디렉토리 명은 문제에 조그만하게 적혀있었던거 같은데,,, 하나하나 제대로 확인하는 것을 중요시 해야 한다는 것을 느꼈습니다.

 

Blog : HackTM{r3t__toString_1s_s0_fun_13c573f6}

'Study' 카테고리의 다른 글

[DreamHack] REV 파일 패치 문제풀이  (0) 2022.01.09
[DreamHack] REV 입력 값 검증 문제풀이1  (0) 2022.01.05