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

mikuku8个月前叽里咕噜小代码418

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

没啥好说的



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

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

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



相关文章

泄露资产补充-信息打点

泄露资产补充-信息打点

这个只是对前面的一些补充开发泄露-GIthub监控文件泄露-网盘全局搜索架构泄露-目录扫描-爬虫其他泄露-公众号服务资产收集进阶-证书&图标&邮箱首先根据实战整理思路,这个来自小迪哈,...

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

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

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

基本渗透命令

基本渗透命令

文件上传下载-解决无图形化-解决数据传输Windows文件下载命令pwershell:powershell.exe -Command "Invoke-WebRequest...

安全开发-web应用-PHP-留言板与登录防护

安全开发-web应用-PHP-留言板与登录防护

当你获得了目标的源码,这时候代码审计看不懂了怎么办,这时候就要学习到奇妙的web开发了,然后学会之后就可以转行去做开发了,当什么网安工程师(狗头)对于我们而言,我们要学习的语言就是通常web开发中经常...

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

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

XSS跨站漏洞,这个漏洞的原理就是通过可控制的某些函数,植入payload然后用户通过访问到这个被攻击的地方触发了漏洞,然后就执行了一次攻击,听起来好像就没啥,这个漏洞确实也没啥,因为他大部分都是在前...

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

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

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

发表评论    

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