ホームページ > バックエンド開発 > Python チュートリアル > Python における一般的なコマンド インジェクションの脅威

Python における一般的なコマンド インジェクションの脅威

WBOY
リリース: 2016-06-16 08:46:45
オリジナル
2132 人が閲覧しました

ああ!実はタイトルほど深刻ではありません!

ただし、以下は製品開発の初期段階における悲惨な事例です。その他のセキュリティ脅威については、コマンド実行を超えた脅威について言及している Bei Bei の「Python hack」PPT をご覧ください。個人的な経験のコード。

コマンドを実行するときは、他の受信データを信頼しないようにしてください。問題を認識したので、それを修正するさまざまな方法があります。

私たちのシステムでは、複数の場所での問題を修正することは信頼できないため、ユニバーサル セキュリティ実行インターフェイスが必要です。これは後で更新されます。

さらに、新しい機能を開発するときは、コマンド実行の安全性に限定されない、安全なプログラミングの標準的なスキルも習得する必要があります。

要約すると、いくつかの要素があります:

• 入力パラメータをコマンドによって実行される文字列に結合しないでください。結合する必要がある場合は、入力パラメータをホワイトリストに登録します。たとえば、入力パラメータがわかっている場合は、そのパラメータに対して型検証を実行する必要があります。はい、int でテストしてください。より安全です
• たとえば、int 型のパラメータを結合する場合は、パラメータに %s の代わりに %d を使用します。
•サブプロセスを使用して複数のパラメータを渡し、コマンドラインインジェクションを防ぎます

以前のコード (最新バージョン =、= 時代は変わりました) のバグをチュートリアルとして使用します:

例 1 (変数はフィルタリングされません):

a.py

サイト変数は実際にはフィルタされていない URL 形式の文字列です。旧バージョンではサイト形式に問題はなかったのですが、新バージョンではURL形式に対応したため、さまざまな記号を渡すことができます。

コードをコピー コードは次のとおりです:
cmd = 'python /a.py --task_id=%s - -site= %s -b' % (タスク、サイト)

例 2 (信頼性の低いフィルタリング):

util/update.py

downloadFile 関数は fileName のフィルタリングを使用しますが、それをバイパスする方法はたくさんあります。

Linux ではコマンドを分離する方法がたくさんありますが、ブラックリストによる方法は信頼できません。

コードをコピー コードは次のとおりです:
fileName = downloadInfo[0]
fileName = fileName.replace( ';' ,'').replace('&','') #フィルターファイル名
localMd5 = os.popen('md5sum %s%s' %(path,fileName)).read()

この修正は、fileName に対してホワイトリスト形式のチェックを実行することです。たとえば、文字、数字、... のみが許可されます。

例 3 (安全でない形式文字列):

b.py

ターゲットは、フィルターされていない URL 形式の文字列です。また、潜在的な脅威が存在します。実際には、これは int である必要があるため、将来、ディープ変数に感染する可能性がある場合は、xxoo を使用します。

コードをコピー コードは次のとおりです:
cmd = 'python b.py --task_id "%s" - s %s --deep %s --check_level %s -b' %(task,target,deep,check_level)

例 4 (悪用不可能なコマンド インジェクション):

c.py

site_report 関数、tid パラメーターはフォーマットされておらず、データベースをクエリするステートメントがあるため現在使用できません:

get_object_or_404(Task, get_domain_query(request), id=tid)#ここでは、特殊記号を含む tid が見つからないため、404 となり、以下の cmd スプライシングを一時的に保護します。

このステートメントが変更されると、新たなコマンド インジェクションの脆弱性が発生します

cmd = 'sh /opt/report %s >/tmp/export_report.log 2>&1' % tid

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート