みなさんこんにちは!おさかなです!
今回は「Beginners’ SQLi」について、書いていこうと思います!
それでは、レッツゴー!!!!!
・SQLの学習をしたい方
・CTFの問題を解きたい方
・SQLを活用したい方
残り3ステージ!
クリアまで残り3ステージだ!!!
ちょっとずつ難易度が上がるけど、焦らずね💦
よーしっ!
事前準備
「Beginners’ SQLi」って何?という方、アカウントの作成がまだの方は、こちら!
ステージ5の解き方はこちら!
※実際のハッキング行為はお止めください。当ブログは一切責任を負いません。
ステージ6を解いてみよう!
問題のチェック
それでは早速サイトにアクセスします!
今回は「ステージ6」の解き方について、わかりやすく解説していきたいと思います!
こんな感じの問題です!
「Guess the query(クエリを推測する)」というタイトルで、「Just a typical injection.(典型的なインジェクション)」とあります。
リンクを開いてみると、こんな感じです!
「I saw ‘wasedataro’ logged in into this page!
Do I need a password…?」
このページに「wasedataro」がログインしているのを見ました!
パスワードが必要ですか…?
とあり、ログインページのようなものが表示されています。(ふむふむ…。)
とりあえずユーザー名は「wasedataro」だということがわかりますが、パスワードはわからない状態です。
「SQLインジェクション」とは?
今回は「SQLインジェクション」という攻撃手法を行って、ログインを試みてみます!
SQLインジェクションとは、データベースと連動したWebアプリケーションなどに対する攻撃手法の一つで、検索文字列など外部から指定するパラメータの一部にSQL文の断片などを混入させ不正な操作を行うもの。また、そのような攻撃を可能にする脆弱性。 “injection” は「注入」の意。
IT用語辞典より引用
↓問題を解く上で、下記サイトもヒントになります✨
ログインを試みよう!
それでは実際にSQLインジェクションのコードを書いていきましょう!
(と言ってもコード自体はすごくシンプル…!)
1' or '1' = '1';--
パスワードの欄に上記のコードを入れることで、処理を行う際のSQL文がこのようになります。
すると、‘1’ か ‘1’ が ‘1’なら真という条件式が出来てしまうので、パスワードがわからない状態でも、ログインが可能になってしまいます💦
SELECT user_id,password FROM users WHERE user_id='1' or '1' = '1'-- AND password='$password';
条件式については、こちらも参考になります!
末尾の「—」は以降のSQL文をコメントアウトするために使用します。(ふむふむ…。)
1' or '1' = '1';--
コードを実行してみると…?こんな感じでログインすることができました!(わーい!)
ちなみに条件式が正しければ「1」でなくても良くて、「4」とか「33」、空文字でもログインが可能です。(これでもOK!)
' or '' = '';--
何なら!ユーザー名の「wasedataro」がわからなくても、実はSQLインジェクションだけでログインが可能です!(なんだってー?!)
(もうちょっと…🍹)
FLAGを回答しよう!
FLAG「m1z0r3{sh0lder_h4ck1ng_1s_gu1lty}」とあるので、回答ページで入力してみると…?
無事にクリアできました!!(おめでとう🎉)
全クリ目指して、がんばろう~🚩
これで全ての操作は完了です。(やった~!)
お疲れ様でした☕
ここまで読んでくださり、ありがとうございました!