网站被传了后门,php 代码写在一个 gif 后缀的文件里面, nginx 怎么写 deny 规则

2015-10-18 14:42:29 +08:00
 ab
程序是个 DEDE, 我只是禁止了一些比较敏感的目录.

想对文件类型对做一下限制,求个规则
10286 次点击
所在节点    NGINX
54 条回复
looyao
2015-10-19 09:04:29 +08:00
加个 try_files ,访问不存在的直接返回 404 。类似这种 1.jpg/1.php 尝试, 1.jpg 就不会被解析了。

location ~ \.php$ {
try_files $uri = 404;

fastcgi_pass 127.0.0.1:9000;
...
}
tabris17
2015-10-19 09:08:00 +08:00
通过 pathinfo 执行的,是 nginx 配置的问题。

比如一个包含 php 代码的 gif : http://target/test.gif
通过类似: http://target/test.gif/not_exists.php 来执行
abscon
2015-10-19 09:39:38 +08:00
@ab 常言道:喝酒不开车,开车不喝酒。哦串词了,是上传不运行,运行不上传

@tabris17 为何不用 example.com 而要用 target
popok
2015-10-19 09:53:26 +08:00
这种是文件包含执行的木马隐藏方式,你禁用 gif 的执行没有用,因为调用 gif 的是 php 文件
erevus
2015-10-19 10:02:02 +08:00
这都是用包含了
tabris17
2015-10-19 10:18:54 +08:00
@abscon exploit 类的文章喜欢写成 target
realpg
2015-10-19 11:36:50 +08:00
楼主试试
http://www.yoursite.com/yourpath/file.gif?file.php
http://www.yoursite.com/yourpath/file.gif/file.php
这两个哪个能执行

如果这两个都不能执行,那十有八九只是人家在测试攻击并失败而已。
Ryans
2015-10-19 11:51:44 +08:00
表示关注
lijinma
2015-10-19 11:52:06 +08:00
location ~ ^[^.]+\.php(/|$) {
...
fastcgi_split_path_info ^(.+?\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
...
}

使用 fastcgi_split_path_info 也可以解决上面的问题,保证 SCRIPT_FILENAME 是一个 PHP
shuimugan
2015-10-19 13:56:15 +08:00
1.gif 的内容是典型的一句话木马,利用 preg_replace 函数中第一个参数后面的 /e,来把替换后的字符串当代码执行,str_rot13('riny')就是 eval 了,密码就是 good,利用经典的中国菜刀就可以连接上了.
http://php.net/manual/zh/function.preg-replace.php
http://php.net/manual/zh/reference.pcre.pattern.modifiers.php

2.<?php require_once (dirname(__FILE__) . "/../../templets/3vpk/images/mood/ico-mood-16.gif"); ?>
这句肯定是黑客加上去的,require 和 include 文件,会执行 gif 里面的 php 代码
http://php.net/manual/zh/function.include.php
当一个文件被包含时,语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML 模式,到文件结尾处恢复。由于此原因,目标文件中需要作为 PHP 代码执行的任何代码都必须被包括在有效的 PHP 起始和结束标记之中

3.这个 gif 是利用 dedecms 上传上去的,例如简单图片上传功能,把 php 文件改个扩展名成 gif,然后上传模块中只是简单的检查下扩展名,而不试着获取下图片宽高来判断是真的图片,导致上传成功

4.dedecms 代码不严谨,有任意包含文件漏洞
比如
$file = $_GET['file'];
include $file;

只需要填写 gif 被上传后的路径,即可导致 gif 文件内容被解析成 php 代码执行.
至于网站的路径有多种方法探测,例如报错信息

你现在设置规则我觉得已经来不及了,上周我就和同事配合搞了像这样的应急响应,phpcms 的任意文件包含漏洞,被上传了一大堆马,抓了好几天,在 nginx 的日志中记录 post 内容,去分析了 n 个 php 文件,才清完
p1n3
2015-10-19 15:22:17 +08:00
楼楼把 nginx 日志丟上来吧。。
realpg
2015-10-19 16:03:25 +08:00
忘了说一个问题。上传文件被包含执行的话,直接把上传的 base 目录放到 open_basedir 之外,放到独立的 vhost 最好
domino
2015-10-20 02:48:03 +08:00
感觉是利用解析上传漏洞,上传 webshell , 然后写入一句话小马 gif
透过 require 运行 , 用 gif 方便让后门隐藏,也许是让 webshell scaner 忽略,
或目录中多个 php 来的容易察觉.
deny 目录不治本,因为还是可跨目录上传文件
liyvhg
2015-10-20 16:01:00 +08:00
php 文件包含, 没有什么好的防御办法, 楼主上权限白名单吧 XD:

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX