任意文件上传和下载
写代码的时候,代码规定一个绝对路径,只能在某个文件夹里面下载文件,这样就能防止这个漏洞,但
是很多程序员不知道这个问题,导致了漏洞。另一个防御方法,就是将 ../ 之类的符号屏蔽或者过滤
掉。



首先,是客户端的js检查和过滤,会针对你的上传文件的格式进行校验
这时候,我们可以通过抓包将后缀修改成php或者直接在页面代码中将其校验的部分删除
那么服务端的过滤呢?

后端绕过:1、可以通过修改content-type来绕过MIME类型检查(相当于一个白名单,在白名单里面的类型可以上传)
getimagesize()绕过
getimagesize() 是php的一个函数,用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE 并产生一条 E_WARNING 级的错误信息,如果用这个涵数来获取类型,从而判断是否是图片的话,会存在问题。其实这个函数比较难绕过,也就是比较安全的一个函数,绕过它三种方法,但是利用起来还需要一个前提条件,就是对方站点还要有一个文件包含漏洞,才能绕过它,或者修改文件数据的头部数据。
方法1:直接伪造头部GIF89A
GIF89A是gif图片格式的数据开头。
我们首先可以通过修改php后缀名为php3或者php5来绕过对黑名单的检测
如果不能添加的话,我们还可以设置后缀为.htaccess
先上传:(代码其实是修改php权限,不管用户上传什么文件,操作系统都视为php文件解析)
<FilesMatch "">
SetHandler application/x-httpd-php
</FilesMatch>
利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:
利用PHP 和 Windows环境的叠加特性,在windows直接修改文件名称,肯定是不让你加冒号的,所以我们先以图片的格式上传,然后抓包,修改文件名称,加上冒号,上传一个名为 123.php:.jpg 的文件上传上去之后的效果,由于文件名称不允许出现冒号,所有windows就将冒号和后面的字符都去掉了,就剩下123.php了,但是有个点就是,文件为0kb
然后将文件名改为 123.< 或 123.<<< 或 123.>>> 或 123.>>< 后再次上传,重写 123.php 文件内容,Webshell代码就会写入原来的 123.php 空文件中。

第五关:大小写混合绕过
分析代码,发现以.htaccess为后缀的文件已经不允许上传,并且上传的文件被改名字了,所以我们上面
的方式都不行了,但是 $file_ext = strtolower($file_ext); //转换为小写这一句没有了,我们就可以使用
文件名后缀大小写混合绕过,把1.php改为1.phP...来上传
第六关和第七关 空格和点绕过
后缀加上. 或者 .来绕过
第八关:基于文件流特性::$DATA来绕过
windows下的ntfs文件流特性来玩的。
分析代码,少了 $file_ext = str_ireplace(‘::$DATA‘, ‘‘, $file_ext);//去除字符串::$DATA 这一句,我们可
以采用Windows文件流特性绕过,文件名改为1.php::$DATA , 上传成功后保存的文件名其实是1.php
第十关
通过双写后缀名来绕过其删除黑名单字符
第十一关 %00截断
这个属于白名单绕过,这是php语言自身的问题,php低版本存在的漏洞。
修复建设: php版本要小于5.3.4,5.3.4及以上已经修复该问题;并且magic_quotes_gpc需要为OFF状
态

第十二关 0x00
这个同样是需要符合nginx的版本同样,也可以用0X0a截断
第十三到15关 加GIF89a前缀即可
第十六关
加入其使用了重新创建图片的方式
imagecreatefrompng($target_path)
那么我们直接上传php文件是会主动过滤掉php文件的,所以,我们需要上传一句话木马程序的图片马,但是这种也需要不停的尝试,有时候这种时候也会被检测出来
第十七关
条件竞争之时间竞争
CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术
竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进
行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式,2013年全球举办了超过五十场
国际性CTF赛事。而DEFCON作为CTF赛制的发源地,DEFCON CTF也成为了目前全球最高技术水平和影响力的
CTF竞赛,类似于CTF赛场中的“世界杯” 。
这个漏洞其实打的就是一个时间差,首先上传大量的请求,让php文件短暂的保存在服务器当中,我们趁这个时间差来访问我们上传的文件
具体实现,我们可以通过bp的攻击器来大量的发送请求,同时,我们也是通过攻击器来大量的获取请求,两者同时进行
第十八关:
这一关我们演示不出来昂,因为我没有准备低版本的apache,apache2.x之后的都算是高版本的。这里
利用了低版本的apache解析漏洞。
刚开始没有找到绕过方法,最后下载作者Github提供的打包环境,利用上传重命名竞争+Apache解析漏
洞,成功绕过。
上传名字为18.php.7Z的文件(因为该题的源代码中支持这个类型文件的上传,有白名单),快速重复提交
该数据包,会提示文件已经被上传,但没有被重命名。apache解析文件名称的时候,是从右往左解析
的,当它看到不认识的扩展名时,他就找前面的扩展名作为文件扩展名,这样它就当成了18.php了。
也是通过攻击器来大量重复发送

浙公网安备 33010602011771号