我在江北学习针对各大服务器的攻击和攻击原理分析

嗯,果然昨天写WAMP写得好,让我能够短时间内搭建Apache+PHP环境。

=====================================================================

一.Apache的攻击

Apache的文件名解析漏洞:从后面开始往前检测,检测到最.后一个合法后缀为止,按最后一个合法后缀执行。这个后缀的定义文件是:conf/mime.types,它里面会定义x1.x2.x3这样子的拓展名,如果最后的x3没有定义(不合法),那么就会解析x2。比如 a.php.aaa,Apache就会当成a.php执行了。那么关键在什么是合法后缀了。

事实上,本人尝试了a.php.aaa发现,因为aaa肯定是不合法的,所以会解析php:

我在江北学习针对各大服务器的攻击和攻击原理分析_第1张图片

但是这样子没用,我们要的是能够上传xiaoma.php.jpg或者xiaoma.php.doc或者xoapma.php.rar之类的文件,这样子才科学,才有价值。很可惜,我尝试了这三种类型,浏览器直接把它们下载下来了。这说明在conf/mime.types中已经定义了x1.x2.x3的x3的合法性。

然后我修改mine.types中的一句话:

application/msword				doc dot
把它删除掉了,就出现了这个:

我在江北学习针对各大服务器的攻击和攻击原理分析_第2张图片


类似的我们把这些删掉:

application/x-rar-compressed			rar
image/jpeg					jpeg jpg jpe

就能够上传xx.php.rar和xx.php.jpg了,很可惜,现在默认的apache2.2竟然都把这些定义上了,真的是让人蛋疼啊,我讨厌更新!

这个漏洞并没有版本上的区别,主要是没在mime.types文件中定义相关文件,就会被我们利用。



二. Nginx的攻击

安装配置费了点劲。
如果您还没安装配置完成,且看: 搭建windows+Nginx+PHP配置指南 以及 之后的问题解决

Ps:没有版本的攻击是无意义的!本人搭建的Nginx是当前最先版本:1.3.0

(一)
Nginx也有个文件名字解析漏洞:
先看(当然这个a.jpg肯定不仅仅是一张图片,里面包含了shell哦~~)
我在江北学习针对各大服务器的攻击和攻击原理分析_第3张图片
                                                                    图片 2-1
原理是;nginx默认以cgi的方式支持php的运行。在nginx的配置文件有一段代码:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
1)fastcgi_script_name就是URI(请分清什么是URL什么是URI)中获得的名字,在图片2-1中获取的URL就是/a.jpg/aaasdf.php,意味着fastcgi_script_name=/a.jpg/aaasdf.php。
2)而nginx传到后端fastcgi的变量就是这个SCRIPT_FILENAME,它由前面所说的 fastcgi_script_name确定。
3)我们把眼光聚焦到PHP的配置文件php-ini中,它存在这么一个选项: cgi.fix_pathinfo,目的是从SCRIPT_FILENAME中取出真正的脚本名字。

这个时候也行你还不太清楚漏洞是如何产生的,请看本人用图2-1的做的分析:
1).访问页面http://localhost:83/a.jpg/aaasdf.php获得的URI,并把它赋给fastcgi_script_name
 /a.jpg/aaasdf.php
2).由此生成的SCRIPT_FILENAME ,并完成location指令,将SCRIPT_FILENAME传递到后端cgi处理,传递过去的SCRIPT_FILENAME 是:
scripts/a.jpg/aaasdf.jpg
3).这个cgi当然要从SCRIPT_FILENAME中获取真正的脚本名字了,所以它进行了一系列的操作,操作中用到了PHP的pathinfo(),把这个SCRIPT_FILENAME分离成两个部分:真正的脚本名 + PATH_INFO:
scripts/a.jpg 和 aaasdf.php
4).这个PHP的pathinfo(),会返回该path的:dirname,basename 和 extension,总之,就是把请求的对象:
scripts/a.jpg
完全当成一个php文件(aaasdf.php,其实这里的aaasdf是任意的,随便写成*.php都行)去解析,而我们把一个shell伪装成jpg,php还是解析成php文件,达到了我们拿到webshell的目的。

Ps:scripts/a.jpg中的scripts是网站的根目录。
Ps:从上面的分析看来,如果目标机把php.ini的cgi.fix_pathinfo给置为0,那就没戏了。。不过一般默认是1,嘻嘻~~

(二) %00 执行任意代码php漏洞
还是那句话,没有 版本的攻击都是无意义的!
nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37
先看:
我在江北学习针对各大服务器的攻击和攻击原理分析_第4张图片
                                                 图 2-2
图2-2中本人上传了一个a.jpg,然后就能用%00空字节执行php代码(注意:我的版本号为8.3.3!!)
原理官网没多提,就说是:Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码。



你可能感兴趣的:(我在江北学习针对各大服务器的攻击和攻击原理分析)