// // check_dir($temp_dir);
// exit(‘fail to zip’);
// }
file[‘tmp_name’]);
if ($archive->extract(PCLZIP_OPT_PATH, temp_dir);
exit(‘上传成功!’);
} else {
move_uploaded_file($file[‘tmp_name’], $temp_dir . ‘/’ . temp_dir);
exit(‘上传成功!’);
}
} else {
exit(‘仅允许上传zip、jpg、gif、png文件!’);
}
访问前端页面发现我们是可以上传一个文件的,因此这样就可以创建一个phpinfo.php文件和一个1.jpg文件,然后放在php文件夹中,然后将该文件夹压缩上传:
然后尝试进行上传该压缩包:
上传完成后可以看到上传成功了
然后我们可以在那个对应的目录中进行查看上传后的文件内容:
可以看到上传后的文件只剩下了一个1.jpg文件,和它一起在压缩包中的phpinfo.php文件被删除了
这里那就无法上传php文件了,那么我们就真的就没有办法了吗?大佬告诉了我们解决方案:
通过代码审计,可以看到,它删除的时候没有递归删除,也没有删除文件夹。
这样,只要我们的webshell放在压缩包的文件夹中,就可避免被删除了。
因此这样就可以创建一个phpinfo文件夹里面再放入一个phpinfo.php文件一个单独的1.jpg文件,然后放在php2文件夹中,然后将该文件夹压缩上传:
上传完成后可以再去uploads文件夹中查看就会发现已经成功的上传了php文件了
可以看到,现在就成功的上传了phpinfo文件并且里面的phpinfo.php文件保留了下来,并且1.jpg也上传了,这样就成功的绕过了限制
后面网页管理员对网页进行了一些安全加固,将后端的检查文件代码修改为下列的形式:
function check_dir($dir)
{
dir);
while ((handle)) !== false) {
if (!in_array(dir . dir . $f . ‘/’);
} else {
f, ‘.’), 1));
if (!in_array(dir . $f);
}
}
}
}
}
第一次绕过的方法的根本原因是因为没有考虑文件在文件夹中的情况,只删除了压缩包根目录下的非法文件,而没有删除其文件夹中的非法文件。
所以补丁就采用了递归删除的方式,将压缩包中所有非法文件删除。
但是采用了递归的方式就真的可以防御好了吗?并不是的
因为通过分析代码后发现,删除的方式是先上传后删除,那么就可以尝试利用上传成功和删除的时间差来尝试访问该文件
因此这里使用Burpsuite来进行不断的上传,然后手动的访问一下上传后的文件看看会不会成功呢
首先使用Burpsuite对上传页面进行抓包,然后发送到intruder页面,添加payload:
然后设置发送1000个包,然后开始
可以看到通过上传后与删除的时间差是可以访问到php文件的,因此这种防御方法也是可以绕过的
上面的绕过方法出现后,后端人员也是快速的修改了,增加了一下代码:
$temp = FCPATH.‘cache/attach/’.md5(uniqid().rand(0, 9999)).‘/’;
就是将压缩包放在一个随机命名的文件夹中再解压缩,这样你猜不到访问地址也就没法去暴力getshell了。
通过对后端代码的审计后,发现当解压发生失败时,就退出解压缩过程。
这也是一个很平常的思路,失败了肯定要报错并退出,因为后面的代码没法运行了。
但是,程序员不会想到,有些压缩包能在解压到一半的时候出错。
什么意思,也就说我可以构造一个“出错”的压缩包,它可以解压出部分文件,但绝对会在解压未完成时出错。这是造成了一个状况:我上传的压缩包被解压了一半,webshell被解压出来了,但因为解压失败这里退出了程序执行,后面一切的删除操作都没有了作用。
如何构造一个出错的压缩包
因为这里我们首先构造一个解压会出错的压缩包,这里龙哥给我们交了几种好用的方法:
我这里就以两个解压的程序作为例子:
- Windows下的7zip
- PHP自带的ZipArchive库
7zip的容忍度很低,只要压缩包中某一个文件的CRC校验码出错,就会报错退出。
如何修改压缩包里文件的CRC校验码呢?可以使用010editor。
我们先准备两个文件,一个PHP文件1.php,一个文本文件2.txt,其中1.php是webshell。
然后将这两个文件压缩成shell.zip。
然后我们用010editor打开shell.zip,可以看到右下角有这个文件的格式信息,它被分成5部分
我们打开第4部分,其中有个deCrc,我们随便把值改成其他的值,然后保存。
此时用7zip解压就会出错,解压出的1.php是完好的,2.txt是一个空文件。
我们再用PHP自带的ZipArchive库,测试这个zip,发现解压并没有出错,这也说明ZipArchive的容忍度比较高。
那么我们又如何让ZipArchive出错呢?最简单的方法,我们可以在文件名上下功夫。
比如,Windows下不允许文件名中包含冒号(:)
我们就可以在010editor中将2.txt的deFileName属性的值改成“2.tx:”。
此时解压就会出错,但1.php被保留了下来。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
](https://i-blog.csdnimg.cn/blog_migrate/ccabab7630ca83b55c95a7648e4adc6f.jpeg)
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!