悪用可能なPHP関数


277

任意のコード実行に使用できる関数のリストを作成しようとしています。目的は、ブラックリストに登録するか、そうでなければ許可しない必要がある関数をリストすることではありません。むしろ、侵入先のサーバーでバックドアを検索するときに役立つ赤旗キーワードのgrepリストを作成しておくとよいでしょう。

アイデアは、c99やr57などの「Webシェル」スクリプトなど、多目的の悪意のあるPHPスクリプトを作成する場合、比較的小さな関数セットの1つまたは複数を使用する必要があるということです。ユーザーが任意のコードを実行できるようにするために、ファイルのどこかにあります。それらの関数を検索することで、何万ものPHPファイルの干し草の山を、より詳細な調査を必要とする比較的小さなスクリプトのセットに、より迅速に絞り込むことができます。

明らかに、たとえば、次のいずれも悪意のある(またはひどいコーディング)と見なされます。

<? eval($_GET['cmd']); ?>

<? system($_GET['cmd']); ?>

<? preg_replace('/.*/e',$_POST['code']); ?>

など。

先日、危険にさらされたWebサイトを検索しましたpreg_replaceが、/eフラグの使用によって危険にさらされる可能性があることに気づかなかったため、悪意のあるコードに気づきませんでした(深刻なのはなぜですか?なぜそこにあるのですか?)。他に見逃したものはありますか?

これまでの私のリストは次のとおりです。

シェル実行

  • system
  • exec
  • popen
  • backtick operator
  • pcntl_exec

PHP実行

  • eval
  • preg_replace/e修飾子付き)
  • create_function
  • include[ _once] / require[ _once](エクスプロイトの詳細については、マリオの回答を参照してください)

ファイルを変更できる関数のリストがあると便利かもしれませんが、99%の確率で、エクスプロイトコードに上記の関数の少なくとも1つが含まれると思います。しかし、ファイルの編集または出力が可能なすべての機能のリストがある場合は、それを投稿してください。ここに含めます。(そしてmysql_execute、それは別のクラスのエクスプロイトの一部なので、私はカウントしていません。)


43
傍注として、できれば近いうちにそのリストが公開されることを望みます:)
yoda

16
@yoda:どこで公開されましたか?SOはすべての知識のソースであるため、リストはここで更新しておきます。
tylerl 2010年

3
/e修飾子は何をしますか?
Billy ONeal

6
@Billy:e修飾子により、置換文字列がPHPコードとして評価されます。
nikc.org 2010

1
正規表現でコードを実行することは、PerlやPythonでも可能であり、PHPに限定されるものではありません。詳細はわかりません。
Adriano Varoli Piazza

回答:


205

このリストを作成するために、2つのソースを使用しました。 スカーレットラットの研究。私も自分のミックスをミックスに追加し、このスレッドの人々が助けてくれました。

編集:このリストを投稿した後、RIPSの創設者に連絡しました。現在、このツールはこのリストのすべての関数の使用についてPHPコードを検索しています。

これらの関数呼び出しのほとんどは、シンクとして分類されます。汚染された変数($ _REQUESTなど)がシンク関数に渡されると、脆弱性が発生します。RATSRIPSなどのプログラムは、grepのような機能を使用して、アプリケーション内のすべてのシンクを識別します。これは、プログラマーがこれらの関数を使用するときは特別な注意を払う必要があることを意味しますが、それらがすべて禁止されている場合、多くのことを行うことはできません。

大きな力には大きな責任が伴います。

-スタン・リー

コマンド実行

exec           - Returns last line of commands output
passthru       - Passes commands output directly to the browser
system         - Passes commands output directly to the browser and returns last line
shell_exec     - Returns commands output
`` (backticks) - Same as shell_exec()
popen          - Opens read or write pipe to process of a command
proc_open      - Similar to popen() but greater degree of control
pcntl_exec     - Executes a program

PHPコードの実行

evalPHPコードを実行する他の方法とは別に、include/ requireは、ローカルファイルインクルードおよびリモートファイルインクルードの脆弱性の形でリモートコード実行に使用できます。

eval()
assert()  - identical to eval()
preg_replace('/.*/e',...) - /e does an eval() on the match
create_function()
include()
include_once()
require()
require_once()
$_GET['func_name']($_GET['argument']);
$func = new ReflectionFunction($_GET['func_name']); $func->invoke(); or $func->invokeArgs(array());

コールバックを受け入れる関数のリスト

これらの関数は、攻撃者が選択した関数を呼び出すために使用できる文字列パラメーターを受け入れます。機能に応じて、攻撃者はパラメータを渡すことができる場合とできない場合があります。その場合、次のInformation Disclosureような関数をphpinfo()使用できます。

Function                     => Position of callback arguments
'ob_start'                   =>  0,
'array_diff_uassoc'          => -1,
'array_diff_ukey'            => -1,
'array_filter'               =>  1,
'array_intersect_uassoc'     => -1,
'array_intersect_ukey'       => -1,
'array_map'                  =>  0,
'array_reduce'               =>  1,
'array_udiff_assoc'          => -1,
'array_udiff_uassoc'         => array(-1, -2),
'array_udiff'                => -1,
'array_uintersect_assoc'     => -1,
'array_uintersect_uassoc'    => array(-1, -2),
'array_uintersect'           => -1,
'array_walk_recursive'       =>  1,
'array_walk'                 =>  1,
'assert_options'             =>  1,
'uasort'                     =>  1,
'uksort'                     =>  1,
'usort'                      =>  1,
'preg_replace_callback'      =>  1,
'spl_autoload_register'      =>  0,
'iterator_apply'             =>  1,
'call_user_func'             =>  0,
'call_user_func_array'       =>  0,
'register_shutdown_function' =>  0,
'register_tick_function'     =>  0,
'set_error_handler'          =>  0,
'set_exception_handler'      =>  0,
'session_set_save_handler'   => array(0, 1, 2, 3, 4, 5),
'sqlite_create_aggregate'    => array(2, 3),
'sqlite_create_function'     =>  2,

情報開示

これらの関数呼び出しのほとんどはシンクではありません。しかし、返されたデータのいずれかが攻撃者に見える場合、それは脆弱性かもしれません。攻撃者がphpinfo()それを見ることができる場合、それは間違いなく脆弱性です。

phpinfo
posix_mkfifo
posix_getlogin
posix_ttyname
getenv
get_current_user
proc_get_status
get_cfg_var
disk_free_space
disk_total_space
diskfreespace
getcwd
getlastmo
getmygid
getmyinode
getmypid
getmyuid

その他の

extract - Opens the door for register_globals attacks (see study in scarlet).
parse_str -  works like extract if only one argument is given.  
putenv
ini_set
mail - has CRLF injection in the 3rd parameter, opens the door for spam. 
header - on old systems CRLF injection could be used for xss or other purposes, now it is still a problem if they do a header("location: ..."); and they do not die();. The script keeps executing after a call to header(), and will still print output normally. This is nasty if you are trying to protect an administrative area. 
proc_nice
proc_terminate
proc_close
pfsockopen
fsockopen
apache_child_terminate
posix_kill
posix_mkfifo
posix_setpgid
posix_setsid
posix_setuid

ファイルシステム関数

RATSによると、phpのすべてのファイルシステム関数は厄介です。これらのいくつかは、攻撃者にとってあまり有用ではないようです。他の人はあなたが思っているよりも便利です。たとえばallow_url_fopen=On、URLをファイルパスとして使用できる場合、への呼び出しをcopy($_GET['s'], $_GET['d']);使用して、システム上の任意の場所にPHPスクリプトをアップロードできます。また、サイトがGETを介して送信されるリクエストに対して脆弱である場合、それらのファイルシステム機能のすべてが悪用され、サーバーを介して別のホストにチャネルおよび攻撃される可能性があります。

// open filesystem handler
fopen
tmpfile
bzopen
gzopen
SplFileObject->__construct
// write to filesystem (partially in combination with reading)
chgrp
chmod
chown
copy
file_put_contents
lchgrp
lchown
link
mkdir
move_uploaded_file
rename
rmdir
symlink
tempnam
touch
unlink
imagepng   - 2nd parameter is a path.
imagewbmp  - 2nd parameter is a path. 
image2wbmp - 2nd parameter is a path. 
imagejpeg  - 2nd parameter is a path.
imagexbm   - 2nd parameter is a path.
imagegif   - 2nd parameter is a path.
imagegd    - 2nd parameter is a path.
imagegd2   - 2nd parameter is a path.
iptcembed
ftp_get
ftp_nb_get
// read from filesystem
file_exists
file_get_contents
file
fileatime
filectime
filegroup
fileinode
filemtime
fileowner
fileperms
filesize
filetype
glob
is_dir
is_executable
is_file
is_link
is_readable
is_uploaded_file
is_writable
is_writeable
linkinfo
lstat
parse_ini_file
pathinfo
readfile
readlink
realpath
stat
gzfile
readgzfile
getimagesize
imagecreatefromgif
imagecreatefromjpeg
imagecreatefrompng
imagecreatefromwbmp
imagecreatefromxbm
imagecreatefromxpm
ftp_put
ftp_nb_put
exif_read_data
read_exif_data
exif_thumbnail
exif_imagetype
hash_file
hash_hmac_file
hash_update_file
md5_file
sha1_file
highlight_file
show_source
php_strip_whitespace
get_meta_tags

37
@whatnick実際には、PHPと他のWebアプリケーション言語の間に大きな違いはありません。結局のところ、プログラマは、eval()コーディング、システムコマンドの実行、データベースへのアクセス、ファイルの読み取り/書き込みを行う機能を必要としています。このコードは攻撃者の影響を受ける可能性があり、それは脆弱性です。
2010

8
多くの機能が禁止されました!万が一あなたは私のウェブサイトのホストですか?
ランディザデヴ

2
@Andrew Dunn笑 これらの機能をすべて禁止した場合、PHPアプリケーションが機能しなくなります。特にinclude()、require()、およびファイルシステム関数。
2010

2
@Rook:私の考えは正確ですが、これらは潜在的な問題に対するものであり、明確なものではありません。正しく使用すれば、これらのどれも差し迫った脅威にはなりません。ただし、回避できる場合は回避する必要があります。
Geekster

3
私見preg_matchではe害はありません。マニュアルには、「この修飾子はpreg_replace()のみが使用します。他のPCRE関数では無視されます」と記載されています。
NikiC 2010年

59

include($ tmp)とrequire(HTTP_REFERER)と* _onceもスキャンする必要があります。エクスプロイトスクリプトが一時ファイルに書き込むことができる場合、後でそれを含めるだけで済みます。基本的には2段階の評価です。

また、次のような回避策を使用してリモートコードを非表示にすることもできます。

 include("data:text/plain;base64,$_GET[code]");

また、Webサーバーがすでに侵害されている場合は、常にエンコードされていない悪が表示されるとは限りません。多くの場合、エクスプロイトシェルはgzipでエンコードされています。include("zlib:script2.png.gz");ここでは「評価なし」と考えてください。同じ効果があります。


1
PHPの構成方法に応じて、includeは実際には任意のURLからのコードを含めることができます。「example.com/code.phps」などが含まれます。その機能とregister_globalsの組み合わせを使用して侵入された侵害されたWebサイトを見ました。
BlackAura

@BlackAura regiser_globalsはどのように攻撃に適合しましたか?それを使用するので$_GET[xyz]はなく、使用するのと同じくらい簡単に引き離すことができたもの$xyzですか?それとももっと深いものがありましたか?
tylerl 2010年

なぜこのように行われたのかはよくわかりませんが、ウェブサイトは次のようなことを続けています:include($ prefix。 '/filename.php'); 設定ファイルで$ prefix変数を設定することで、コアコードをWebルートの外に移動できるという考えでした。攻撃者がその値を「example.com/code.phps?」のような値に設定すると、PHPは代わりにそのリモートファイルを含めます。私の知る限りでは、ボットは実際に一般的なエクスプロイトを使用して侵入することができました。どうやら、古いPHPコードの多くがその間違いを犯したようです。基本的に、ユーザーが送信した値をincludeステートメントの近くに配置しないでください。
BlackAura

これを一般化して、ファイル名に「:」を含むものに含めることができると思います...ファイル名が変数である可能性があることを除いて、これは困難grepです。PHP-なんという災害でしょう。
tylerl 2010年

2
include括弧は不要です。include "…"十分です。
Gumbo

48

これ自体は答えではありませんが、興味深いものがあります。

$y = str_replace('z', 'e', 'zxzc');
$y("malicious code");

同じ精神で、call_user_func_array()難読化された機能を実行するために使用できます。


1
そして、コードを実行せずにこれを見つける方法はありません:(静的解析は、ここでは助けにはなりません。
NikiC

15
@tylerl:...または他の言語?
ハンニバルレクター博士、

@dr Hannibal Lector:コンパイルされた言語ですか?
ポンカドゥードル

3
@Wallacoloo:バイナリでgrepする簡単なテキスト文字列がないため、コンパイルされた言語のCGIバックドアを非表示にするのはさらに簡単です。
Iiridayn、2010年

2
いいですね。$ f = 'ev'。 'al'で試しました。$ f($ _ POST ['c']); ...>)(そのExecの面白いことはないが、これは動作しますので、 -しかし、仕事は「evalは」機能が、含まれ、エコーなどのような特殊な構造ではないのでしませんでした
redShadow

20

セキュリティの悪用のポイントとしてecho、誰も言及しprintていないことに驚いています。

クロスサイトスクリプティング(XSS)は、サーバー側のコード実行エクスプロイトよりも一般的であるため、深刻なセキュリティエクスプロイトです。


これは、技術的にはサーバーではなくクライアントに影響を与えるベクトルです。
ダミアンブ

@damianb:サイトがAjaxを使用していて、任意のユーザーのセッションで任意のJavaScriptが評価される可能性がある場合、サーバーに多くの悪影響を及ぼす可能性があります。
Bill Karwin、2012年

"サーバー上" ....接続されたクライアントに; サーバーのバックエンドには影響しません。これは、カーソルジャッキング、CSRF、ヘッダーインジェクションなどのクライアント側の悪用に該当します。はい、危険ですが、まったく別の分類に分類されます。
damianb

19

私は特にこのリストにunserialize()を追加したいと思います。これには、任意のコード実行、サービス拒否攻撃、メモリ情報漏えいなど、さまざまな脆弱性の長い歴史があります。ユーザー提供のデータに対して呼び出すことはできません。これらの脆弱性の多くは、過去の露年間のリリースで修正されていますが、現時点ではまだいくつかの厄介な脆弱性が残っています。

危険なPHP関数/使用法に関するその他の情報については、強化されたPHPプロジェクトとそのアドバイザリを参照してください。また、最近のPHPセキュリティ月間および2007年のPHPバグ月間プロジェクト

また、設計上、オブジェクトのシリアル化を解除すると、コンストラクター関数とデストラクタ関数が実行されます。ユーザー提供のデータで呼び出さない別の理由。


unserializeの問題について詳しく知りたいです。これは単なる実装上のバグですか、それとも設計上の欠陥ですか(つまり、修正できません)?特にその問題に関する詳細情報を教えていただけますか?
tylerl 2010年

任意コードの実行とメモリ情報の漏洩については、php-security.org
2010/06/25 /


17

VPSは次の機能を無効にするように設定されています。

root@vps [~]# grep disable_functions /usr/local/lib/php.ini
disable_functions = dl, exec, shell_exec, system, passthru, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, pfsockopen, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid

PHPには、リストが大きすぎてgrepできないほど破壊される可能性のある関数が十分にあります。たとえば、PHPにはchmodとchownがあり、Webサイトを単に非アクティブ化するために使用できます。

編集:おそらく、危険によってグループ化された関数(悪い関数、悪い関数、決して使用すべきでない関数)の配列のファイルを検索し、危険の相対性を計算するbashスクリプトを作成することができます。ファイルがパーセンテージに課すこと。次に、これをディレクトリのツリーに出力し、各ファイルの隣にタグ付けされたパーセンテージを付けます。たとえば、しきい値が30%の危険性よりも大きい場合


コンパイル時に「--disable-posix」フラグを設定して、disable_functionsからそれらのposix関数をすべて削除できます。
Pixel開発者、

15

また、任意のメモリ位置の読み書きを可能にする「割り込みの脆弱性」のクラスにも注意してください。

これらは、trim()、rtrim()、ltrim()、explode()、strchr()、strstr()、substr()、chunk_split()、strtok()、addcslashes()、str_repeat()などの関数に影響します。これは主に、しかし排他的ではないが、10年間非推奨となっているが無効にされていない言語の呼び出し時参照渡し機能によるものです。

詳細については、BlackHat USA 2009 Slides Paperで Stefan Esserによる割り込みの脆弱性とその他の低レベルのPHPの問題に関する講演をご覧ください。

このペーパー/プレゼンテーションでは、dl()を使用して任意のシステムコードを実行する方法も示しています。


1
痛い。まあ、私はそれらのスライドを見る前にPHPは多少安全だと本当に思っていました...
NikiC

14

プラットフォーム固有の、しかし理論上の実行ベクトル:

  • dotnet_load()
  • 新しいCOM( "WScript.Shell")
  • 新しいJava( "java.lang.Runtime")
  • event_new()-最終的に

そして、もっと多くの偽装方法があります:

  • proc_openはpopenのエイリアスです
  • call_user_func_array( "exE" .chr(99)、array( "/ usr / bin / damage"、 "--all"));
  • file_put_contents( "/ cgi-bin / nextinvocation.cgi")&& chmod(...)
  • PharData :: setDefaultStub-.pharファイル内のコードを検査するためのいくつかの作業
  • runkit_function_rename( "exec"、 "innocent_name")またはAPD rename_function

また、その2番目のリストのcall_user_func()
Cheekysoft

1
答えは1つで十分です;)以前の質問に追加するだけです。
ジャスティンジョンソン、

13

eval言語構造とは別に、任意のコード実行を可能にする別の関数があります。assert

assert('ex' . 'ec("kill --bill")');

10

興味深いエクスプロイトのソースの1つは言及されていません。PHPでは、文字列に0x00バイトを含めることができます。基礎となる(libc)関数はこれを文字列の終わりとして扱います。

これにより、PHPの(不十分に実装された)健全性チェックがだまされる可能性がある状況、たとえば次のような状況が可能になります。

/// note: proof of principle code, don't use
$include = $_GET['file'];
if ( preg_match("/\\.php$/",$include) ) include($include);

これには、次の.php呼び出しによって、すべてのファイルが含まれている可能性がありますscript.php?file=somefile%00.php

そのため、PHPの文字列長に従わない関数は、何らかの脆弱性につながる可能性があります。


nullを含むファイルパスは、5.4および最新の5.3バージョンでは許可されなくなりました。
StasM 2011

@stasMこれは、しばらくPHPについて聞いた中で最も良いことの1つです。共有いただきありがとうございます。
ウィリアム

9

危険な構文要素はどうですか?

変数変数」($$var)は、$ varの名前で現在のスコープ内の変数を検索します。誤って使用すると、リモートユーザーは現在のスコープの変数を変更または読み取ることができます。基本的に弱いeval

例:コードを記述して$$uservar = 1;から、リモートユーザー$uservarが「admin」に$admin設定する1と、現在のスコープに設定されます。


どういう意味かわかりますが、これは別のクラスのエクスプロイトのようです。このメカニズムを使用して任意のPHPコードを(上記の関数を使用せずに)実行できる方法はありますか?または、変数の内容を変更するためだけに悪用される可能性はありますか?私は何かが足りない場合、それを正しくしたいです。
tylerl 2010年

6
また、スクリプトを評価しないと解決できない変数関数を使用することもできます。例:$innocentFunc = 'exec'; $innocentFunc('activate skynet');
erisco

また、反射に注意してください。
erisco

6

ソースファイルを解析しても、考えられるすべてのエクスプロイトを実際に見つけることはできないと思います。

  • ここに本当に素晴らしいリストが提供されている場合も、悪用される可能性がある機能を見逃す可能性があります

  • このような「隠された」悪質なコードがまだ存在する可能性があります

$ myEvilRegex = base64_decode( 'Ly4qL2U =');

preg_replace($ myEvilRegex、$ _POST ['code']);

  • あなたは今言うことができます、私はこれにも一致するように私のスクリプトを単に拡張します

  • しかし、あなたはその可能性のある「おそらく邪悪なコード」を手に入れます

  • (疑似)安全であるためには、実際に適切なコードを記述し既存のすべてのコードを自分で読み取る必要があります


WordPressベースのマルウェアで悪用にbase64_decode()が頻繁に使用されるのを見てきました。リストへの良い追加。
クリスアレンレーン


5

move_uploaded_fileは言及されていることを知っていますが、一般的にファイルのアップロードは非常に危険です。の存在だけが$_FILES懸念を引き起こすはずです。

PHPコードをあらゆるタイプのファイルに埋め込むことは十分に可能です。画像は、テキストコメントで特に脆弱になります。コードが$_FILESデータ内にある拡張子をそのまま受け入れる場合、問題は特に厄介です。

たとえば、ユーザーは「foo.php」として埋め込まれたPHPコードを含む有効なPNGファイルをアップロードできます。スクリプトが特に素朴な場合、実際には「/uploads/foo.php」としてファイルがコピーされる可能性があります。ユーザーアップロードディレクトリでスクリプトを実行できるようにサーバーが構成されている場合(多くの場合、ひどい見落とし)、任意のPHPコードを即座に実行できます。(画像が.pngとして保存されている場合でも、他のセキュリティ上の欠陥によりコードが実行される可能性があります。)

アップロードを確認するための(完全ではない)リスト:

  • コンテンツを分析して、アップロードが意図したタイプであることを確認してください
  • これまで実行されない既知の安全なファイル拡張子を付けてファイルを保存します
  • ユーザーアップロードディレクトリでPHP(およびその他のコード実行)が無効になっていることを確認します

5

pcntl_signalpcntl_alarmをリストに追加してみましょう。

これらの関数を使用して、php.iniまたはスクリプトで作成されたset_time_limit制限を回避できます。

たとえば、このスクリプトは、にもかかわらず10秒間実行されます set_time_limit(1);

(クレジットはSebastian Bergmannsのツイート要旨に行きます:

<?php
declare(ticks = 1);

set_time_limit(1);

function foo() {
    for (;;) {}
}

class Invoker_TimeoutException extends RuntimeException {}

class Invoker
{
    public function invoke($callable, $timeout)
    {
        pcntl_signal(SIGALRM, function() { throw new Invoker_TimeoutException; }, TRUE);
        pcntl_alarm($timeout);
        call_user_func($callable);
    }
}

try {
    $invoker = new Invoker;
    $invoker->invoke('foo', 1);
} catch (Exception $e) {
    sleep(10);
    echo "Still running despite of the timelimit";
}

4

PHP.iniファイルの設定で無効にできるPHPエクスプロイトがたくさんあります。明白な例はregister_globalsですが、設定によっては、HTTP経由でリモートマシンからファイルをインクルードまたはオープンすることも可能であり、プログラムがinclude()またはファイル処理関数のいずれかに変数ファイル名を使用する場合に悪用される可能性があります。

PHPは、変数名の末尾に()を追加することで変数関数の呼び出しも許可します。たとえば$myvariable();、変数で指定された関数名を呼び出します。これは悪用可能です。たとえば、攻撃者が変数「eval」を含む変数を取得し、パラメータを制御できる場合、プログラムにeval()関数が実際には含まれていなくても、攻撃者は何でもできます。


4

これらの関数は、いくつかの厄介な影響を与える可能性もあります。

  • str_repeat()
  • unserialize()
  • register_tick_function()
  • register_shutdown_function()

最初の2つは利用可能なメモリをすべて使い果たし、後者は使い果たし続けます...


2

最近security.stackexchange.comでこれについていくつかの議論がありました

任意のコード実行に使用できる関数

まあそれはスコープを少し減らします-しかし 'print'はjavascriptを注入するために使用できるため(したがってセッションを盗むため)、それでもやや恣意的です。

ブラックリストに登録するか、許可しない関数をリストすることではありません。むしろ、grep可能なリストが欲しい

それは賢明なアプローチです。

ただし、独自のパーサーを作成することを検討してください。すぐに、grepベースのアプローチが制御不能になることに気付くでしょう(awkの方が少し良いでしょう)。間もなく、ホワイトリストも実装したいと思い始めます。

明白なものに加えて、文字列リテラル以外の引数を使用してインクルードを行うものにフラグを立てることをお勧めします。__autoload()にも注意してください。


2

私の答えは少し否定的かもしれないと思いますが、...

私見、そこにあるすべての単一の機能と方法は、悪意のある目的に使用することができます。それを悪意のトリクルダウン効果と考えてください。変数はユーザーまたはリモート入力に割り当てられ、変数は関数で使用され、関数の戻り値はクラスプロパティで使用され、クラスプロパティはファイル関数で使用されます。など。覚えておいてください:偽造されたIPアドレスまたは中間者攻撃がWebサイト全体を悪用する可能性があります。

最善で始まる、任意の可能なユーザまたはリモート入力を最初から最後まで追跡することで$_SERVER$_GET$_POST$_FILE$_COOKIEinclude(some remote file)あれば allow_url_fopen上にある)、あなたがプログラム的にスタック・トレースプロファイルを構築するなど、リモートのファイルを扱う他のすべての機能/クラス各ユーザーまたはリモート提供の値の。これは、割り当てられた変数と、それが使用されている関数またはメソッドのすべての繰り返しインスタンスを取得し、それらの関数/メソッドのすべての出現のリストを再帰的にコンパイルすることなどによって、プログラムで実行できます。それを調べて、最初に、接触する他のすべての関数と比較して、適切なフィルタリングおよび検証関数を通過することを確認します。これはもちろん手動による検査です。それ以外の場合、合計数はcase PHPの関数とメソッドの数(ユーザー定義を含む)に等しいスイッチ。

または、ユーザー入力のみを処理する場合は、すべてのスクリプトの最初に静的コントローラークラスを初期化します。1)許可された目的のホワイトリストに対してユーザーが入力したすべての入力値を検証および保存します。2)その入力ソース(つまり)をワイプします$_SERVER = null。あなたはこれが少しナチエスクを得るところを見ることができます。


もちろん、多くのプログラミング言語と同様に、邪悪な行為を隠す方法は尽きません。しかし、それは私が求めていたものの意図を逃していると思います。シナリオは次のようなものです。Webサイトがハッキングされた後、助けを求められます。朝までにウェブサイトを保護できる場合、クライアントは追加料金を支払うことになります。このサイトには475のPHPファイルが含まれており、有用なフォレンジックの詳細は破棄されています-巨大な干し草の山と悪名高い小さな針があります...どこから探し始めますか?(私の一日の仕事の
要約

1

セキュリティの目的でプロバイダーが無効にする機能のリストを次に示します。

  • エグゼクティブ
  • dl
  • show_source
  • apache_note
  • apache_setenv
  • クローズログ
  • debugger_off
  • debugger_on
  • define_syslog_variables
  • escapeshellarg
  • escapeshellcmd
  • ini_restore
  • オープンログ
  • パススルー
  • pclose
  • pcntl_exec
  • ポペン
  • proc_close
  • proc_get_status
  • proc_nice
  • proc_open
  • proc_terminate
  • shell_exec
  • Syslog
  • システム
  • url_exec

1

コード内の攻撃のほとんどは、複数のアクセスソースまたは複数のステップを使用して実行されます。コードや悪意のあるコードを持つメソッドだけでなく、すべてのメソッド、関数の実行または呼び出しを検索します。最良のセキュリティには、フォームデータのエンコードと検証も含まれます。

システム変数の定義にも注意してください。それらは後でコード内の任意の関数またはメソッドから呼び出すことができます。


0

テキストを解釈する4ビット文字関数を使用して、いくつかのバッファオーバーフローが発見されました。htmlentities()htmlspecialchars()

一番上にあったのは、解釈の前にmb_convert_encoding()を使用して単一のエンコーディングに変換することです。


0

敏感なシンク(悪用可能なphp関数)とそのパラメーターの継続的に更新されたリストは、PHPバックドアも検出するPHPアプリケーションの脆弱性の静的ソースコードアナライザーであるRIPS /config/sinks.phpにあります。


RIPSはこのページのリストを使用しています。
2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.