はじめに
贅沢な名だね、とは言わせねーよ! nikkieです。
実習として、やられサイトにSQLインジェクションしました。
これで湯婆婆と遭遇しても身を守れます!
目次
やられサイトBad Todo List
Webセキュリティでおなじみ、徳丸さんが公開されている脆弱性診断実習用アプリです。
インストール方法はこちら:
https://github.com/ockeghem/badtodo/blob/90966d999b258e7cf458bf9b6a6fdfb828c71407/docs/install.md
- リポジトリをclone
docker compose up -d
で立ち上がります!(簡単👏)- 私は「PROXYを経由しない設定方法」でアクセスしています:http://127.0.0.1:4080/todo/
脆弱性の概要はこちら:
https://github.com/ockeghem/badtodo/blob/90966d999b258e7cf458bf9b6a6fdfb828c71407/docs/vulnerabilities.md
「SQLインジェクション」もサポート1しています
脱線:湯婆婆とSQLインジェクションってなんの関係があるの?
湯婆婆は『千と千尋の神隠し』に登場する、名前を奪う魔女です(※すごーく語弊のある紹介)。
元画像:https://www.ghibli.jp/works/chihiro/#&gid=1&pid=16 (ジブリさんの公開に感謝)
技術要素とどんな関係があるかというのは、当然の疑問ですね。
千尋が名前を伝えるときにSQLインジェクションするというツイートがあるんです!
湯婆婆「フン『千尋' AND Password = '1'; DROP TABLE employee"』というのかい。 」
— ロボ太 (@kaityo256) 2021年10月23日
千尋「はい」
湯婆婆「贅沢な名だね。今からおまえの名前は、名前は………?」
Bad Todo ListがSQLインジェクションをサポートしていると知ったとき、「これやってみたい!」とテンションが上がりました(念のためですが、あくまでやられサイトへの実習としてです)
実習 SQLインジェクション
検索画面を触っていきます。
この検索画面はtodoを検索できるのですが、
- デフォルトで文字列の完全一致
- 「あいまい検索」にチェックを入れると部分一致
です。
ログインせずに進めています。
ツイートを元に「パソコンを買う'」と末尾にシングルクォートを付けて検索。
検索時にエラーが発生しました SELECT todos.id, owner, users.userid, todo, c_date, due_date, done, org_filename, real_filename, public FROM todos INNER JOIN users ON users.id=todos.owner AND (todos.owner=-1 OR ?) AND (todos.owner = ? OR todos.public > 0 OR ? > 0) AND todo = 'パソコンを買う'' SQLSTATE[42000]: Syntax error or access violation: 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文全部見えちゃってるじゃないですか!!!!(おいおいおいおい)
「パソコンを買う';」だと普通に検索できます。
でもSQL文としては完結しているはずだから、この後にDROP TABLEを入れると...
「パソコンを買う'; DROP TABLE todos;」
検索結果が表示されますが、これでtodosテーブルが消えたので、トップに戻るとぶっ壊れてます!
検索時にエラーが発生しました SELECT todos.id, owner, users.userid, todo, c_date, due_date, done, org_filename, real_filename, public FROM todos INNER JOIN users ON users.id=todos.owner AND (todos.owner=-1 OR ?) AND (todos.owner = ? OR todos.public > 0 OR ? > 0) SQLSTATE[42S02]: Base table or view not found: 1146 Table 'todo.todos' doesn't exist
これがSQLインジェクション...!!
ぶっ壊しておいてなんですが、初期状態に戻すのにちょっとハマりました。
ボリューム込みで落とす(down)必要があります。
% docker compose down --volumes
終わりに
やられサイトBad Todo Listの実習でSQLインジェクションしました。
- 徳丸さんによるBad Todo Listは
docker compose
で簡単環境構築 - 検索画面で「パソコンを買う'; DROP TABLE todos;」
- エラーにSQL文自体を出しちゃうのもNGですよね
これで湯婆婆に遭遇しても名前を取られずに身を守れるぞ〜
徳丸本など参照して、今後理解を深めていきたい!
⚠️最後に。ローカル環境のやられサイトだから嬉々として実習していますが、これを同じテンションで実サイトにやったら、攻撃したことになっちゃうぞ❤️(よいハッカーはやらないでね)
- サポートという言い回しは適切なのかな?↩