Python テンプレート エンジンのインジェクション問題の分析

高洛峰
リリース: 2017-02-11 13:16:22
オリジナル
1463 人が閲覧しました

この記事では、主に Python テンプレート エンジンのインジェクション問題の分析と、それを防ぐ方法と注意すべき点について説明します。必要な友人は参考にしてください。

最近では、jinjia2 Injection などのテンプレート エンジンが使用されており、{{1+1}} などの特定の命令形式をテンプレート エンジンに挿入し、2 を返すことで、脆弱性が存在することがわかります。実際、特に Python 3.6 で新しい f 文字列が追加された後、同様の問題が Python ネイティブ文字列にも存在します。ただし、その使用状況はまだ明らかではありませんが、注意する必要があります。

元の %

userdata = {"user" : "jdoe", "password" : "secret" }
passwd = raw_input("Password: ")

if passwd != userdata["password"]:
  print ("Password " + passwd + " is wrong for user %(user)s") % userdata
ログイン後にコピー

ユーザーが %(password)s を入力すると、ユーザーの実際のパスワードを取得できます。

formatメソッド関連

https://docs.python.org/3/library/functions.html#format

ただし、上記のペイロードはprintとして書き換えられます(「パスワード「+passwd+」が間違っています) for ユーザー {user}").format(**userdata) に加えて、

>>> import os
>>> '{0.system}'.format(os)
&#39;<built-in function system>&#39;
ログイン後にコピー

を使用することもできます。最初に 0 を format 内のパラメーターに置き換えてから、関連する属性の取得を続けます。

しかし、属性を取得できるだけで、メソッドを実行できないようですか?ただし、一部の機密情報も取得される可能性があります。

例: http://www.php.cn/

CONFIG = {
  &#39;SECRET_KEY&#39;: &#39;super secret key&#39;
}

class Event(object):
  def __init__(self, id, level, message):
    self.id = id
    self.level = level
    self.message = message

def format_event(format_string, event):
  return format_string.format(event=event)
ログイン後にコピー

format_string が {event.__init__.__globals__[CONFIG][SECRET_KEY]} の場合、機密情報が漏洩する可能性があります。

Python 3.6 の f 文字列

この文字列は非常に強力で、JavaScript ES6 のテンプレート文字列に似ており、現在のコンテキストで変数を取得する機能を備えています。

https://docs.python.org/3/reference/lexical_analysis.html#f-strings

>>> a = "Hello"
>>> b = f"{a} World"
>>> b
&#39;Hello World&#39;
ログイン後にコピー

そして属性に限定されず、コードを実行することもできます。

>>> import os
>>> f"{os.system(&#39;ls&#39;)}"
bin   etc   lib   media  proc   run   srv   tmp   var
dev   home   linuxrc mnt   root   sbin   sys   usr
&#39;0&#39;

>>> f"{(lambda x: x - 10)(100)}"
&#39;90&#39;
ログイン後にコピー

しかし、通常の文字列をF-stringに変換する方法はないようです。つまり、ユーザーがF-stringを制御できず、使用できない可能性があります。引き続きチェックする必要があります。

Python テンプレート エンジン インジェクションの問題分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

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