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

一、%00截断和00截断

1,白名单比黑名单机制安全了太多,但是也不是绝对安全

2,%00是干嘛的
		在说这的作用之前,先说一下服务器保存机制(其中的一种)
		用户上传图片 -> 上传到临时目录 -> php移动重命名
			%00就是再移动重命名的时候,动手脚
		比如,我们上传木马命名为:1.php%00.jpg,当程序读取到
		%00 他就认为到这结束了,于是保存为1.php
	
	注意:这也是由php版本限制的,高版本貌似修复了此bug
		
		%00是url编码后的,实际上是构造ASCII码值的0

	了解%00实际上我们要先了解0x00,0x00实际上是一个十六进制表示方法,实际上就是表示ASCII码值为0,
有些函数在处理这个字符的时候会把这个字符当做结束符,他们就读取到这里认为这一段结束了。
php5.4版本以下存在这个问题。

00截断:访问的地址,最后的图片后缀可以去掉,但是asp是不可以去掉的。
其实%00就是代表一个结束符。

二、实战注意

1,上传文件漏洞,不能仅仅靠眼睛去判断,最好是用burp
2,burp修改可以在Hex那修改,改为00
3,图片马 尽量做成gif图片马,而不是jpg
		~基本不会被渲染影响,渲染影响只会造成gif的部分影响,看情况插马
		~如何防御:二次渲染即可
		~上传成功图片马必须配合文件包含使用

靶场作业

11.(%00截断):前面讲了%00截断,然后现在土木,它会自动重名,这个头疼的问题,应该怎么解决,
	这里很明显使用了直接的凭借,然后我们对$_GET['save_path']却没有检测,那么我们是可以构建的然后再%00,岂不是就可以绕过了,get提交1.php%00然后是不是最后就输出了1.php。
	上传图片,发现图片被重命名了,这时直接输入%00就没有效果了,这里发现是get传参,可以在传参位置用%00
12.(%00截断):这个东西和第一题很像无非就是变成了pos方式提交save_path,问题在于post方式我们用%00却失效了,这是因为post传参并不会url解码,我们需要改hex改为00.一般情况下最后写个a,a的hex是61
13.(图片马绕过)(gettimagesize图片类型绕过)(php_exif模块图片类型绕过)(二次渲染绕过);这个题目实际上不能利用,只是你上传一个图片马,必须配合文件包含使用。
	建议使用 gif后缀的图片马
14.图片类型绕过:
15.php_exif模块图片类型绕过
16.二次渲染绕过:得到图片后重新渲染一次,,这时需要gif动图去做
	gif动图:如果没有 gif可以使用 别的zip、txt、flv、xls。
		1.不会被渲染影响
17.条件竞争:开始和服务器比手速的时候到了,我们用burp抓包然后爆破就行,一个不断上传,一个不断访问,
	先上传,再移动, 再命名, 再校验
18.条件竞争:实际上还是条件竞争,只不过做了各种检查,其实还是一样的,只不过这次要上传图片马。
19.00截断:这里又是一个00截断,做法和之前的%00截断没区别,第一开始也讲了,这两个其实原理一样,这里主要用到了move_uploaded_file(),这是移动文件的函数,上传上去然后移动到这边重命名。

三、条件竞争

1,服务器验证上传文件的两种形式:
		~先上传后验证
		~先验证后上传
2,这个知识点就是讲到,利用并发进程,在未删除之前,抢先一步访问这个文件
	简单的说:
				服务器删除文件需要时间--->	假设0.01s
				100个线程不间断得上传的文件 --->
				100个线程不间断得访问的文件 --->
					有的访问到文件 <--> 执行 <-> 占用(执行速度也很快)
					当比删除速度快,就访问成功了(有概率,还得等几分钟)
	代码:
		';file_put_contents('1.php',$a)?>
	
	适用条件:先上传后验证
	解决方法:发现较大线程访问,直接ban掉IP

3,具体操作步骤:
	~上传正常图片
	~看看图片保存位置
	~多线程上传图片马,(burp爆破模块)
	~上传图片马的同时,多线程访问,(burp爆破模块)
	~等待。。。
	
	原理容易理解,步骤较为繁琐,还有点看脸的感觉。

文件上传常见问题汇总

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

你可能感兴趣的:(安全入门,数据库,安全,php)