CTF用にSQLインジェクション問題を作成。
♦問題1 下記のURLにブラウザでアクセスしSQLインジェクションを用いて認証を突破せよ。インジェクションに成功するとFlagが表示される。
http://127.0.0.1:5000
♦問題2 SQLインジェクションの脆弱性があるソースコード(getuser.py)を修正せよ。修正後はcheckボタンを押下して確認を行う。修正が正しい場合はFlagが表示される。
~環境~
SQLインジェクションの脆弱性のあるWebサイトをPython+Flaskで実装する。
1.Pythonのpipモジュールインストール
curl -kL https://bootstrap.pypa.io/get-pip.py | python
2.flaskインストール
pip install Flask
3.Webアプリの起動
./sql-injection.py
※0.0.0.0:5000でWebサイトが起動する。
4.問題1 インジェクションの実行
文字例
「1′ or ‘1’ = ‘1’;–」
インジェクションが成功するとFlagが表示される。
5.問題2 脆弱性のあるコードの修正
修正対象ファイルは「getuser.py」
修正後にチェックツールボタンを押下して確認する。
※修正が成功しているとFlagが表示される。
メインコードであるsql-injection.pyの先頭には
#!/usr/bin/python
を記載して実行可能コードとする。rootのみに実行権限を与えCTFユーザには何も権限を許可しないようにしておく。
※スクリプト内にあるフラグ情報を見えないようにする必要があるため。
一方、CTFユーザに修正してもらうコードは「getuser.py」としてメインコードから分離して起き、ファイルパーミッションにRWを与えておく。