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

mikuku3周前叽里咕噜小代码31

前面我们已经了解了文件上传的一些相关的漏洞利用,这一期我们就来说说关于文件上传的存储的安全,这部分也是跟这个漏洞利用息息相关的,因为现在存储的方式越来越 高端了,首先基础的就是站库分离,然后还有现在用的越来越多的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应用-JS-dom_xss-断点调试

安全开发-web应用-JS-dom_xss-断点调试

上期我们简单的学习了关于js的文件上传和登录验证,相信大家对那部分的漏洞已经有所了解了,这期我们来看看关于js的外的一些知识DOM树操作以及安全隐患加密编码和数据安全测试这两个因为关系不大,就新开一期...

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

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

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

安全开发-web应用-JS-逻辑漏洞

安全开发-web应用-JS-逻辑漏洞

前面我们学习了PHP的开发,学到了一些关于PHP的一些小漏洞捏,同样的我们现在来学习一下js开发捏,他和PHP一样,我们也把他分为原生开发和框架开发首当其冲的就是使用js搭建文件上传啦,js他也是属于...

WEB攻防-XSS跨站注入(二)

WEB攻防-XSS跨站注入(二)

上期说到普通的XSS注入,这次来说点新的,(谁懂写一半让我重新登录然后笔记全没的救赎感)...

APP信息打点-如完

APP信息打点-如完

APP资产对于app的信息搜集,我们首先肯定是通过目标来判断的,看对方给你一个什么东西,比如一个网址,或者直接是apk文件这种,首先就是对于这个有个判断,他跟web不太一样的就是需要判断对应资产是否是...

红蓝队自动化项目部署和使用(好像完成了)

红蓝队自动化项目部署和使用(好像完成了)

耶!太好啦,是脚本小子,首先上连接All-Defense-Tool:红蓝队武器库ffffffff0x/f8x: 红/蓝队环境自动化部署工具首先介绍一下一个自动化网络空间工具Kento-Sec/Asam...

发表评论    

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