WEB攻防-PHP-文件上传(存储安全)

mikuku6个月前叽里咕噜小代码305

前面我们已经了解了文件上传的一些相关的漏洞利用,这一期我们就来说说关于文件上传的存储的安全,这部分也是跟这个漏洞利用息息相关的,因为现在存储的方式越来越 高端了,首先基础的就是站库分离,然后还有现在用的越来越多的OSS,这种云存储就算你上传了木马也没什么用,因为他就只作存储,不会执行任何程序和文件,所以我们现在要对这些存储方法进行一个学习,对我们安全测试的时候以防浪费时间,知难而退咯。


首先我们来看看最基本的,我们前面开发的时候写过一个php的文件上传,那时候我们最后用的是MIME类型判断文件类型是否可以上传,但是我们也知道,这个非常容易绕过,所以当我们绕过上传一个php文件时,由于此时没有对这个文件进行任何限制,会让他执行这个php文件

image.png

但是如果此时我们对目录的执行权限进行限制

image.pngimage.png

会发现直接导致我们无法执行其中的限制的文件

image.png

而没有限制的文件还是可以正常访问的,所以说,首先就是对目录的执行权限进行了限制,让我们无法直接执行php脚本


然后另一种就是,有些网站存储图片的时候会使用加密字节流来传输,叽里咕噜不用说很多,只用知道存储的时候他会被加密就明白了,我们随便找个网站看看就知道了

image.png

就像这种,可以看到下面的就是普通的指定的路径的图片,而我点的这个是被加密过的字节流,所以这个对我们有什么影响呢


首先我们简单的手搓一个加密的上传网站

<?php
    //处理文件上传

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES['fileToUpload'])) {
        $file = $_FILES['fileToUpload'];

        if ($file['error'] === UPLOAD_ERR_OK) {
            $tmp_name = $file['tmp_name'];
            $base64data = base64_encode(file_get_contents($tmp_name));
            echo '<img src="data:image/jpeg;base64,' . $base64data . '" alt="上传的图片">';
        } else {
            echo '文件上传失败,错误码:' . $file['error'];
        }
    } else {
        echo '没有收到文件。';
    }
}

?>

然后上传一个图片看看啥效果

image.png

可以看到文件完全是变成了base64加密格式,而当你复制文件路径的时候,他就会老长一条,其实就是你上传的其实不是一个真的图片,而是含有这个图片信息的字节流,传统的就是专门来搞一个文件夹来存储这些图片,而用这个编码之后,就可以用数据库存储这个信息,要用直接输出一下即可,而这个显示图片,他有一个固定协议,也就是前面的这个

data:image/jpeg;base64

通过这个来告诉类型和数据,所以会导致什么问题呢,比如现在我们上传一个后门文件

image.png

你会发现上传的php文件变成了这个样子,虽然他接受到了数值,但是他根本就不能正常解析,谈何连接后门呢

image.png

解码也可以还原,但是浏览器他解析不了呀,他只会把他当做图片来解析,与后缀无关,所以常规手段基本上都失效了


现在我们再看另一个,分站存储

在以前云安全还没有普及的时候,这个分站存储就使用的非常多

这个按字面意思也很好理解,也就是上传和存储的是两个项目,可能是同一台服务器,但是大部分肯定是不同服务器的,所以说当你上传了后门之后,就算你真的拿下了权限,但是也不是你当前的测试目标啊,小心人家给你抓起来了,而且一般也会对目录权限进行锁死,只进行存储,不让执行

image.png

拿b站的举个例子,可以明显的看到他下面指向的地址肯定不是b站的,这个地方就是他存储我们头像的地方

image.png

当你修改你的头像的时候,他首先就会转成字节流临时保存,当你提交之后,就会变成前面那个地址,各种技术组合使用

这是一种存储方案


然后就是现在热门的云存储了-OSS对象

简单来说也就是一个专门存储东西的一个云空间,也是只对对象进行保存,不进行任何解析,当你访问存储过后的地址时,他就直接是下载了,什么都不会干

image.png

我这里每米开哈,实验就不做了,简单理解一下即可


既然知道了有这几种存储方案,那我们该怎么判断呢


这都讲这么明白了还不会判断吗:

首先对于权限就是直接访问看是否有403这种错误

然后对图片地址访问的时候看他是否是在同一域名下

对于oss也是跟上面差不多,同样的判断方法

没啥好说的



重要的是我们该怎么测测呢

除了第一种目录权限内如果能换目录解析可以绕过,其他的全都无解~~~耶~失业咯~~~

基本上碰到了全都无解~~~咱们安全也是越来越难了哎嘿



相关文章

安全开发-web应用-PHP-文件访问和操作

安全开发-web应用-PHP-文件访问和操作

前面我们学习了php普通的留言板功能和登录的操作,还学习了三种身份验证的小知识相信经过自己的敲敲,已经对这部分的相应漏洞已经有所了解了,哪些地方有漏洞,哪些地方可以注入,学习开发就是了解这些最基本的原...

安全开发-web应用-PHP-模版-RCE安全

安全开发-web应用-PHP-模版-RCE安全

叽里咕噜不多说,直接开干,这个新闻列表呢其实和前面留言板功能差不多,首先我们肯定是要用数据库来存储新闻数据,然后通过调用来让他显示在浏览器中,或者是给他添加id,让用户自己选择看哪个新闻,但是由此而来...

WEB攻防-PHP-文件上传(扩展篇-遗漏)

WEB攻防-PHP-文件上传(扩展篇-遗漏)

上期说完了原生态的文件上传漏洞,这期继续讲关于第三方中间件,编辑器,CMS的漏洞,虽然说基本没啥用哈,没准打CTF的时候用的上吧(自我安慰),这期并没有什么新知识点,更多的是对这个思路的扩展,因为关于...

安全开发-web应用-JS-打包器&第三方库

安全开发-web应用-JS-打包器&第三方库

上期我们学习了关于nodejs的框架开发,也知道了他有什么漏洞,现在我们继续来扩展关于js的一些相关安全芝士,这期差不多就是一个扩展,简单的提一下首先我们就来看看这个webpack到底有啥用将项目中各...

安全开发-web应用-PHP-框架开发

安全开发-web应用-PHP-框架开发

一开始我们学习信息打点的时候我们介绍过了框架这个东西,框架就是第三方开发的一个源码,里面核心内容也就是网站的各个功能都是开发好的,只需要把相应的配置配好,就可以直接开始使用了,对于简单的网站搭建还是很...

WEB攻防-ASP-数据库漏洞

WEB攻防-ASP-数据库漏洞

前面叽里咕噜开发整了还挺久,然后挖了很多坑,现在终于是要填坑了,从这一期开始就开始注重漏洞方面的知识了,学习各种漏洞利用,天天日别人网站哈不过其实还有个java没学,那个还是挺重要的,但是吧最近确实没...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。