文件上传漏洞 upload-labs

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等,文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。

一、upload-labs

upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传突破的靶场。逐步帮助大家对上传入侵有一个全面的了解。目前一共20关,每个关都包含着不同上传方式。 GitHub地址:https://github.com/c0ny1/upload-labs

 靶机包含防御类型分类

二、开始通关

Pass-01  JS检查

1.先新建一个PHP文件写入一句话木马,命名为test.php,直接上传

2.提示无法上传该文件类型,查看一下前端源码,可以看到是JS限制


我们可以通过修改前端源码、禁用浏览器JS、使用burpsuite改包这三种方式来绕过拦截,这里以burpsuite抓包为例

3.先将test.php改成test.php.jpg,通过burpsuite抓包之后放到重放模块,然后改包test.php.jpg改成test.php,然后放行,通过右边看到页面显示正常

4.文件上传成功,使用菜刀连接一句话木马,连接成功

Pass-02   只验证Content-typ

1.尝试使用第一关方法,直接上传test.php.jpg进行抓包改包,嘿...一样可以

2.题目说是文件类型拦截,直接上传php文件可以得到提示,那么我们删除test02.php重新操作一下

3.通过burpsuite抓包,修改Content-Type为image/jpeg(简单来说就是修改为它可放行的文件类型),然后放行数据包,同样上传成功

Pass-03   黑名单绕过

1.直接上传test03.php,黑名单不允许上传.asp,.aspx,.php,.jsp后缀的文件
但可以上传.phtml .phps .php5 .pht

前提是apache的httpd.conf中有如下配置代码

AddType application/x-httpd-php .php .phtml .phps .php5 .pht

2.通过burpsuite抓包,将test03.php改为test03.php5,放行数据包,返回包中可以看到文件上传解析的路径

菜刀连接成功

Pass-04   .htaccess绕过

1.直接上传test04.php5,发现有黑名单限制,并且根据提示黑名单列表庞大

拒绝了几乎所有有问题的后缀名,除了.htaccess,所以我们可以编写.htaccess文件,作用:将待会上传的04.jpg解析为04.php(这次写一个phpinfo文件命名为04.jpg)

上传成功

2.访问http://127.0.0.1/upload-labs/upload/test04.jpg,解析成功

Pass-05   后缀大小写绕过

1.这一关主要是没有对后缀名的大小写进行过滤,所以我们尝试抓包命名为test05.phP进行绕过

2.访问http://127.0.0.1/upload-labs/upload/202104011727386865.phP

访问正常

Pass-06   空格绕过

尝试上传,发现大小写绕过失败,说明程序对后缀进行了大小写处理,改包将test06.php改成test06.php空格

上传成功

Pass-07   点绕过

原理与Pass-06相同,在文件名后面加一个点

上传成功

Pass-08   ::$DATA文件流特性绕

1.这关将所有可解析的后缀名进行了过滤

2.Windows文件流特性绕过,文件名改成test08.php::$DATA,上传成功后保存的文件名其实是test08.php

上传成功

Pass-09   点+空格+点绕过

原理同Pass-06,上传文件名后加上点+空格+点,改为test09.php. .

上传成功

Pass-10  双写绕过

黑名单过滤,将黑名单里的后缀名替换为空且只替换一次,因此可以用双写绕过

Pass-11  文件路径%00截断

1.$img_path是直接拼接,因此可以利用%00截断绕过,截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态

2.先上传test11.jpg,然后修改路径进行截断,注意一定要符合上面条件

 php的magic_quotes_gpc为OFF状态

上传成功

Pass-12  00截断

1.本关卡与Pass-11原理相同,但不同的是ave_path参数通过POST方式传递,还是利用00截断,因为POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改

在test12.php后面改成00进行截断

上传成功

Pass-13   上传图片马

1.我们需要一张图片13.jpg和一句话木马(这里我的是info文件)写好的php文件test13.php,在电脑本地将13.jpg和test13.php放到同一目录下

然后在该目录下用cmd执行命令:copy 13.jpg/b + test13.php/a test13.jpg

新生成的test13.jpg就是我们制作好的图片马

直接上传图片马

2.直接访问图片并不能把图片当做PHP解析,因此还需要利用文件包含漏洞,根据页面提示include.php脚本在127.0.0.1/upload-labs/目录下,构造链接

127.0.0.1/upload-labs/include.php?file=upload/5020210402141517.jpg

访问成功

3.png格式图片上传方法与jpg相同

4.GIF格式可以通过添加GIF图片的文件头GIF89a,绕过GIF图片检查

Pass-14   上传图片马  getimagesize()检查

本关操作与上一关Pass-13完全相同

Pass-15   上传图片马  exif_imagetype()检查

本关操作与上一关Pass-13完全相同

Pass-16   二次渲染绕过

原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。

制作方法参考链接:

https://blog.csdn.net/weixin_45519736/article/details/105775721

Pass-17   条件竞争

通过源码可以看到文件先经过保存,然后判断后缀名是否在白名单中,如果不在则删除,此时可以利用条件竞争在保存文件后删除文件前来执行php文件,可以利用burpsuite的intruder模块不断上传,然后我们不断的访问刷新该地址即可

1.先准备后门文件test17.php,用Python写一个脚本来请求文件test17.php,打开burpsuite用来重放文件test17.php

2.运行py脚本,同时开始burpsuite上传

上传成功

可以访问

Pass-18   条件竞争

本关也存在条件竞争的问题,不过这题对文件后缀名做了白名单判断,利用上传重命名竞争+Apache解析漏洞进行绕过,test18.php.7z的文件内容与上一关相同(生成一个新的文件shell2.php)

2.运行py脚本同时开始上传test18.php.7z

可能是作者大佬忘了给上传的路径加"/",所以导致上传的文件改名后都是uploadxxxxx.7z,只需在myupload.php文件中对应地方添加斜杠就行

3.等到python出现OK,停止上传,并访问shell2.php文件

访问成功

Pass-19   文件名0x00截断

move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过,方法同pass-12

Pass-20  数组 + /.绕过

通过查看源码可以发现: $file_name经过reset($file) . '.' . $file[count($file) - 1];处理 如果上传的是数组的话,会跳过$file = explode('.', strtolower($file)); 并且后缀有白名单过滤:
$ext = end($file);$allow_suffix = array('jpg','png','gif');
而最终的文件名后缀取的是$file[count($file) - 1],因此我们可以让$file为数组 $file[0]为smi1e.php/,也就是reset($file),然后再令$file[2]为白名单中的jpg 此时end($file)等于jpg,$file[count($file) - 1]为空 而 $file_name = reset($file) . '.' . $file[count($file) - 1];,也就是smi1e.php/.,最终move_uploaded_file会忽略掉/.,最终上传smi1e.php

【END】

到此为止,文件上传漏洞通关就算完成了,试想一下:如果没有源码?又能通几关?

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

推荐阅读更多精彩内容