热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全

php_info漏洞与伪静态解决方案

发布时间:2010-08-23 09:45文章来源:网络文章作者:kindle 点击次数:
摘要:首先我们要知道 1.request_filename表示当前连接请求的文件路径,由root或alias指令与URI请求生成。这个变量是本地文件系统的文件名称 2.!-e判断不存在 3.set在这里是设定shell变量并赋值 4.剩余的就是if判断,~*区分大小写,\转义字符,其余的这里不多说了...

首先我们要知道
1.request_filename表示当前连接请求的文件路径,由root或alias指令与URI请求生成。这个变量是本地文件系统的文件名称
2.!-e判断不存在
3.set在这里是设定shell变量并赋值
4.剩余的就是if判断,~*区分大小写,\转义字符,其余的这里不多说了
下面来对比下张宴给出的php_info漏洞的俩个解决方案

  1. if ($request_filename ~* .*\.(php|php5)$) { 
  2.  
  3. set $is_path_info '0'; 
  4.  
  5.  
  6. if (-e $request_filename) { 
  7.  
  8. set $is_path_info '1'; 
  9.  
  10.  
  11. if ($is_path_info ~ '0') { 
  12.  
  13. return 403; 
  14.  
  15. if ($request_filename ~* (.*)\.php) { 
  16.  
  17. set $php_url $1; 
  18.  
  19.  
  20. if (!-e $php_url.php) { 
  21.  
  22. return 403; 
  23.  


明显区别就是判断的第一句最后的$符号,是结尾的意思,也就是说不是php结尾即可- -!!,之后去掉了$只去掉$还不行,
重启nginx会出错[emerg]: invalid condition “.*\.php”需要把.*用括号,括起来
至于为什么michael说的如http://localhost/..1.jpg/1.php/?abc=1这样的url二次执行可以绕过第一种配置
原因其实很简单,大家可以新建test.php代码如下

  1. <?system ($_GET[id]);?> 


访问http://http://localhost/test.php?id=uname%20-a和http://localhost/test.php/?id=uname%20-a
同样是可以执行的,根据以上判断这个大家不难理解,所以什么”..xx.jpg”前面的点有没有都是无所谓的.这个也算是一个bug吧放入nginx.conf测试一切正常,支持php_info伪静态,问题得到解决.
为了便于多个虚拟主机引用,我们可以加入fcgi.conf,内容如下

  1. if ($request_filename ~* (.*)\.php) { 
  2.  
  3. set $php_url $1; 
  4.  
  5.  
  6. if (!-e $php_url.php) { 
  7.  
  8. return 403; 
  9.  


fastcgi_param GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx;


fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;


fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_NAME $uri;

fastcgi_param REQUEST_URI $request_uri;

fastcgi_param DOCUMENT_URI $document_uri;

fastcgi_param DOCUMENT_ROOT $document_root;

fastcgi_param SERVER_PROTOCOL $server_protocol;


fastcgi_param REMOTE_ADDR $remote_addr;

fastcgi_param REMOTE_PORT $remote_port;

fastcgi_param SERVER_ADDR $server_addr;

fastcgi_param SERVER_PORT $server_port;

fastcgi_param SERVER_NAME $server_name;


# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param REDIRECT_STATUS 200;

标签分类: linux安全

上一篇:实现linux启动加密的方法
下一篇:利用mod_limitipconn限制同ip的Apache连接数