perlでのコード・インジェクションの攻撃例を教えてください。


http://jvndb.jvn.jp/ja/cwe/CWE-94.htmlにphpでの攻撃例がありますが
php同様なperlでの攻撃例(脆弱なコードの例と攻撃例)
を教えてください

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/07/24 17:16:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dev2 No.2

回答回数67ベストアンサー獲得回数26

ポイント500pt

  • 4-2. Perl の危険な関数


  • 上記はIPAのセキュリティ講座で、
    Perl(eval)のインジェクションについて解説されています。

OSコマンドインジェクションではなく
「コードインジェクション」=スクリプトを挿入する攻撃について


 それから、上記のようなご質問者様の区別には違和感があります。

この脆弱性のカテゴリにおける最も典型的な例として、SQL インジェクションおよび書式文字列の問題があります。


 ご質問者様が挙げたページにも、上記のようにあります。つまり、SQLインジェクションは(コード)インジェクションに含まれるということです。

意図するOSコマンドの構文やふるまいを改ざんすることが(略)


 同様に、OSコマンドインジェクションもコードインジェクションに含まれます。そのページのPHPのサンプルコードも、結局systemを使って攻撃していますね。

 インジェクションというとOSコマンドやSQLの記事が多いから、ご質問されたのだと思います。しかしなぜ多いかといえば、それらが攻撃者にとって攻撃目標になりやすいからです。

 防御側は相手の攻撃に対応しないといけなくて、好きな防ぎ方をするわけにいかないので、コマンドの例を避けることにメリットがあまりないと思います。

その他の回答1件)

id:alfa-gadget No.1

回答回数254ベストアンサー獲得回数50

こちらが参考になると思います。
OSコマンドインジェクション攻撃 ‐ 通信用語の基礎知識

サンプルソースコード(Perl)
CGIプログラムで、メールアドレスの登録者に自動で返信する処理を想定する。

#!/usr/bin/perl
use strict;
use CGI;
my $cgi = new CGI;
my $mail = $cgi->param('mail')
my $fp;
open(fp, "|/usr/lib/sendmail $mail");
print fp "Subject: Registration of mail address\n";
print fp "From: regist@example.com\n\n";
print fp "登録ありがとうございます。\n";
close($fp);

この例では、Webのフォームなどから呼ばれ、利用者が入力したメールアドレスがCGIパラメーターmailの値となることとする。
もしメールアドレスに「nurupo@example.jp」と入力された場合、上のプログラムでは次のような文字列を作り、シェルに渡され実行される。

    /usr/lib/sendmail nurupo@example.jp

恐らくこれが、本来想定された動作だろう。しかしもし、悪意ある利用者が「nurupo@example.jp; rm -rf /」と入力した場合、どうなるであろうか。この場合、次のコマンドが実行されてしまう。

    /usr/lib/sendmail nurupo@example.jp; rm -rf /
id:aukjs

質問者から

aukjs2015/07/21 18:51:26

OSコマンドインジェクションの例が回答されていますが、

OSコマンドインジェクションではなく「コードインジェクション」=スクリプトを挿入する攻撃についてです。

id:dev2 No.2

回答回数67ベストアンサー獲得回数26ここでベストアンサー

ポイント500pt

  • 4-2. Perl の危険な関数


  • 上記はIPAのセキュリティ講座で、
    Perl(eval)のインジェクションについて解説されています。

OSコマンドインジェクションではなく
「コードインジェクション」=スクリプトを挿入する攻撃について


 それから、上記のようなご質問者様の区別には違和感があります。

この脆弱性のカテゴリにおける最も典型的な例として、SQL インジェクションおよび書式文字列の問題があります。


 ご質問者様が挙げたページにも、上記のようにあります。つまり、SQLインジェクションは(コード)インジェクションに含まれるということです。

意図するOSコマンドの構文やふるまいを改ざんすることが(略)


 同様に、OSコマンドインジェクションもコードインジェクションに含まれます。そのページのPHPのサンプルコードも、結局systemを使って攻撃していますね。

 インジェクションというとOSコマンドやSQLの記事が多いから、ご質問されたのだと思います。しかしなぜ多いかといえば、それらが攻撃者にとって攻撃目標になりやすいからです。

 防御側は相手の攻撃に対応しないといけなくて、好きな防ぎ方をするわけにいかないので、コマンドの例を避けることにメリットがあまりないと思います。

  • id:TransFreeBSD
    シェルコードはダメということですが「php同様」だからphpコードなのか、perlだからperlコードなのかという曖昧さがまだありますよ。
    あと、回答のでもシェルコード経由でphpやperlのコード入れれるとか出来なくもない。
    あと、JVNのは外部ファイル経由だけど、そこもこだわりポイントかどうかとか。

    perlでシェルコードではないコードインジェクションというとeval使ってるとか、引数でuseしてるとか、useする設定ファイルを書き出しているとか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません