Hello there, (^^ゞ
🎯 想定される処理の流れ
stockreport.pl 381 29
このコマンドは、商品ID(productID)と店舗ID(storeID)を受け取り、在庫情報を返すスクリプトです。
🌐 Web側のURL
https://insecure-website.com/stockStatus?productID=381&storeID=29
このリクエストを処理するサーバ側のロジックは、次のように実装されていると想定されます:
system("stockreport.pl " + productID + " " + storeID)
つまり、ユーザー入力が直接OSコマンドの引数に渡っている可能性があるということです。
🧨 攻撃の糸口:storeIDに注入してみる
storeIDに次のような入力を渡した場合:
29; whoami
生成されるコマンド:
stockreport.pl 381 29; whoami
➡ stockreport.pl
の後に whoami
が実行される!
🚨 攻撃の影響
- OS上で任意のコマンドが実行可能
- アプリケーションのユーザー権限でファイル読み取り・改ざん・削除
- ネットワーク内部の探索や攻撃のピボット
✅ 防御策
- OSコマンド呼び出しの代わりにネイティブAPIを使う
- 入力値を数値としてバリデーション(ホワイトリスト)
- コマンドを実行する場合は引数を配列で渡し、シェル解釈を避ける
Best regards, (^^ゞ