首页
社区
课程
招聘
[分享]文件上传学习【二】
发表于: 2025-4-9 16:35 1626

[分享]文件上传学习【二】

2025-4-9 16:35
1626

7、php大小写绕过
原理:在服务器后台php后缀这个被过滤了,但其部分字母大写导致未被过滤,所以可以上传例如:Php、pHp来绕过上传,同时在后台会把这些部分字母大写的后缀当成php文件来解析
绕过:上传Php或pHp文件来进行绕过
实战:upload-labs第六关
查看提示可以看到

这里只禁止了.pHp这个大小写后缀没有限制其他的所以可以上传.Php后缀


可以看到上传成功了

这样就可以了,也可以用蚁剑去连接,这里我们选择看源码

这里可以看到过滤了很多,但没有过滤其他大小写的后缀,主要是这里没有函数将所有后缀变为小写字符
8. 空格绕过
原理:在验证过程中没有使用trim()去除空格,可以使用空格绕过黑名单,因为在php中php≠php“空格”所以导致绕过
绕过:将php的后缀改成php
实战:upload-labs第七关

上传成功
9、Nginx畸形解析
原理:产生条件是 php.ini 里的cgi.fix_pathinfo=1,在这种情况下,当 Nginx 遇到文件路径/test.png/x.php,若/test.png/x.php不存在,则会去掉最后的/x.php,然后判断/test.php是否存在,若存在,则把/test.png当做文件/test.png/x.php解析
绕过:上传一个test.jpg的文件,然后访问的是test.jpg/shell.php,这样就会把test.jpg当作shell.php来使用
实战:这里没办法实战了,我还没遇到过这样的题目,然后我自己要搭建靶机也不知道什么原因也没用了
10、windows文件名解析
原理:利用操作系统对文件命名规则进行绕过,在window操作系统中不允许文件名后缀有“.”、“ ”、“. .”、“:”、"::$DATA"这些后缀的,就会自动给他删除,从而变成正常的php后缀名
绕过:在上传的文件后面添加上这些后缀
实战:上传一个pass9.php::$DATA文件

然后就可以了绕过后端检查连接蚁剑了
11、图片马
原理:上传一个带有一句话木马的图片文件,本质上是有一个文件包含漏洞,然后将这个带有木马的图片文件包含在了php代码中,然后图片中有php代码从而导致执行木马。
实战:先创建两个文件,一个图片文件,一个一句话木马,在windows系统上就可以创造一个简单的图片马

注意这里不能用powershell,得用cmd
这样就制作好了图片马,然后将这个上传上去,在使用一个文件包含从而利用图片马
12、条件竞争
原理:就是在我们上传一个文件之后,这个文件会被保存在目录下,然后在对文件进行检查,如果文件检查通过就可以保存,如果不通过就会删除
绕过:这里就可以上传一个php文件,然后php会执行其中的代码,这个代码的用处是创建一个新的文件,这个文件就是一个一句话木马,在连接这个代码
实战:upload-18
根据代码审计可以看到,这里是先执行了

从而先将这个文件上传上去了,在进行检查后,发现php后缀不符合从而删除文件

因此可以写一个python脚本

就代表执行成功pass18.php的代码

这样就完成了shell.php代码的生成,这个代码不会被检查所以木马上传成功

if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
 
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
 
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回