文件上传案例
- 1. 前台脚本检测扩展名
我们可以查看一下网页源代码,看扩展名是否在前端有显示。
是的话,我们就可以上传一个扩展名为.jpg(等图片的扩展名)利用burpsuite,修改扩展名为.php,会成功上传
- 2. 服务器验证content-type检测文件类型
上传一个.php文件,利用burpsuite改content-type类型为image/jpeg
- 3. 服务器端验证文件扩展名
1*(在apathe低版本2.0 -2.2的情况可以执行)
上传一个文件扩展名不存在的文件,比如1.php.aaa,在通过其他的手段改成.php的可执行的扩展名
2*使用00截断(在一些情况下,因为函数的原因,会导致00截断不能成功绕过)
上传文件名为1.phpp.jpg,通过burpsuite修改1.phpp.jpg中的p的十六进制为70改为00
- 4. 服务器端验证图片文件头
实验:我们使用一个真的11.php文件,修改扩展名为11.jpg
一个真的图片,1.jpg
将两个都分别上传,结果会发现真图片可以上传,而修改的.php文件却不能
原因就是服务器验证了图片的文件头,可以使用winhex软件进行查看
是因为getiamgesize()函数检测过滤了
解决方法:
第一步:将一句话代码嵌入到图片中,构造图片马,上传图片
第二步:通过解析漏洞或其他的方法将jpg还原为可执行文件
Iis6.0解析漏洞
目录解析:
在网站下建立文件夹名字为.asp/.asa的文件夹,在其目录中的任何扩展名的文件都被、iis当做.asp文件来解析并执行
利用方法:建目录a.asp,目录中a.asp/a.jpg将会被按照正常的asp文件进行解析
文件解析:
在iis6.0下,分号后面的不被解析,如a.asp;.jpg会被当做a.asp
利用方法:上传文件名为xx.asp;.jpg格式
Iis6.0默认的可执行文件除了asp还包含(常用来绕过黑名单检测)
.asa .cer .cdx
Apache 2.0-2.2
未知扩展名解析漏洞
Apache是从右往左开始判断文件扩展名来解析文件,如果文件扩展名不被识别,就在往左判断,直到可以识别为止
举个例子:abc.php.aaa这个.aaa是apathe不可识别解析的,它就会往前判断直到识别.php时,会将这个文件解析为abc.php文件
.htaccess配置文件(iis平台上不存在该文件)
负责某一个目录下的网页配置,通过.htaccess可以实现分布式的配置
比如:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定用户或者目录的访问、禁止目录列表、配置默认文档等功能
Apache .htaccess配置文件的解析利用
1. 建立.htaccess文件,写入 AddType application/x-httpd-php .jpg
可以实现将.jpg的文件按照php解析执行
2.将木马上传.htaccess到服务器的目录(在同目录或者子目录都可)
3.上传.jpg的图片马,访问图片即可执行
Nginx解析漏洞
- 低版本(0.5、0.6、0.7<=0.7.65、0.8<=0.8.37)的Nginx可以在任意文件名后面添加%00.php进行解析攻击 abc.txt%00.php
- 对于任意的文件名,在后面添加斜杠+某某某.php的解析漏洞(本质与nginx无关)
如:test.jpg/abc.php
漏洞场景:iis+php nginx+php
一些开源的文件编辑器可会有自身的漏洞,一般写博客什么的都会有上传图片功能,这些地方也可能会有文件上传漏洞