目录

upload第一关(js前端验证)

upload第二关(content-type验证)

upload第三关

upload靶场第四关

upload第五关

upload第六关(大小写绕过)

upload靶场第七关(空格绕过)

upload第八关(点号绕过)

upload第九关(::$DATA绕过)

upload第十关

upload第十一关(双写绕过)

upload第十二关(get%00截断)

upload第十三关(post00截断)

upload第十四关(图片马绕过)

upload第十五关(getimagesize图片马)

upload第十六关(exif_imagetype图片马)

upload第十七关(二次渲染绕过)

upload第十八关(条件竞争一)

upload第十九关(条件竞争二)

upload第二十关

upload第二十一关


upload第一关(js前端验证)

这题的话打开f12点击这个,然后把鼠标放到上传去那么查看一下

发现一个checkFile()函数

在查看器那里搜一下chckfile函数是用来干嘛的,发现它用来校验上传的文件类型。我们可以把第一个checkfile()删了或者改成ture,然后就可以上传一句话木马了

upload第二关(content-type验证)

查看源码发现会对发送文件的content-type进行验证

我们可以先上传一个php文件,然后用bp抓包,修改content-type为image/jpeg,就可以上传一句话木马了。

upload第三关

看一下源码,发现不能上传php文件,但没有过滤完全,可以用php3,php5,phtml绕过

因为靶场是由phpstudy搭建的,要进去修改一下配置文件,将配置中httpd.conf中的

#AddType application/x-httpd-php .php .phtml
为AddType application/x-httpd-php .php .phtml.php3.php5
记得去掉#号。

修改完成以后重启phpstudy环境。然后上传一个一句话木马php3或php5文件,用蚁剑连接即可。

关于AddType命令的作用解释AddType 指令 作用:在给定的文件扩展名与特定的内容类型之间建立映射 语法:AddType MIME-type extension
[extension] …
AddType指令在给定的文件扩展名与特定的内容类型之间建立映射关系。MIME-type指明了包含extension扩展名的文件的媒体类型。
AddType 是与类型表相关的,描述的是扩展名与文件类型之间的关系。

upload靶场第四关

利用upload靶场第四关做apache 2.x解析漏洞复现(实际的做法是用.htaccess,参考我的另一篇博客)48条消息) upload-labs.master靶场漏洞复现.htaccess文件解析漏洞_寄给十一的信的博客-CSDN博客

环境配置:

首先在phpstudy打开配置文件httpd-conf

打开文件找到下面这个地方,添加箭头所指的那句代码,环境就配置好了

apache 2.x解析漏洞原理:

操作:

先在记事本写下

<?php phpinfo();?>

然后将文件重命名改成11.php.shtmlljjb(随便打,只要不认识就行)

在upload靶场中上传,复制图片链接,打开就看到执行成功了

upload第五关

这个第五关的源码不知道为什么和第十关的一样,既然一样,直接看第十关的解法吧

upload第六关(大小写绕过)

没有ban大小写,可以采用大小写绕过

在记事本写下payload,然后将后缀改为.PHp

<?php phpinfo();?>

在靶场中上传成功

复制图片链接打开

如果想看更多的apache解析漏洞,可以参考这篇博客apache httpd解析漏洞复现 - GiDunPar - 博客园

upload靶场第七关(空格绕过)

这题对比前面的可以发现,这里没有用trim过滤空格,可以用空格绕过。

上传一个1.php文件,用bp抓包修改成1.php  (注意这里有空格)

防包之后去复制图片地址,然后用蚁剑连接。、

upload第八关(点号绕过)

看到源码中没过滤文件末尾的点,绕过思路就有了,利用windows的特性,会自动去掉后缀名后面的点。

先写个php文件,我这里写了<?php phpinfo();?>用来测试

上传这个文件然后用bp抓包,修改后缀为"1.php..."

查看回响得到路径为/upload/1.php

在uplaod靶场url中打开,成功执行。

upload第九关(::$DATA绕过)

查看源码发现DATA没过滤 ,可以用::$DATA绕过

这道题利用的是Windows下NTFS文件系统的一个特性,即NTFS文件系统的存储数据流的一个属性 a.asp::DATA 时,就是请求 a.asp 本身的数据,如果a.asp 还包含了其他的数据流,比如 a.asp:lake2.asp,请求 a.asp:lake2.asp::$DATA,则是请求a.asp中的流数据lake2.asp的流数据内容。
简单讲就是在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。

写个php文件测试

上传用bp抓包改后缀

上传成功查看路径

在url打开看看结果,执行成功。

upload第十关

看到源码删除.,大小写,::$DATA,去空都过滤了。

对此我们可以理一下源码执行的逻辑:

先删除文件末尾的点,然后从点开始截取字符,转换为小写,删去::$DATA,首尾去空。

我们可以尝试1.php. .绕过,过滤之后会变成1.php.

先上传1.php,然后在bp抓包改文件后缀,

得到上传路径,在url打开

upload第十一关(双写绕过)

查看源码,这次的过滤是检测上传文件的后缀是否能在$deny_ext中找到,如果有,则替换为空。

对于这种可以采用双写绕过的方法。上传一个1.pphphp文件,经过过滤后变成1.php。

上传成功后复制路径在url打开,成功执行。

upload第十二关(get%00截断)

查看源码,发现$img_path中路径由表单中的路径与文件名组合而成,而$_GET['save_path']存在问题,可由用户自定义上传路径。

所以这里可以采取%00截断的方式。

截断的条件:(1)网上说是php版本小于5.3.4才能成功,我试了几个比5.3.4高的版本,在bp上传的时候都显示上传失败,同时我也试了5.3.29带nts的也测试失败了(暂时不懂是什么原因),这题是在5.2.17不带nts版本下测试的。

(2)php的magic_quotes_gpc为OFF状态

%00截断的基本原理:在url里面%00表示ascll码中的0,而0作为特殊字符保留,表示字符串结束,所以当出现%00时就会认为读取已经结束,而忽略后面拼接的图片或者文件

更具体的原理可以看看这篇博客,弄懂这篇博客,这题和下一题根本不是问题

https://blog.csdn.net/zpy1998zpy/article/details/80545408

上传一张1.jpg,在bp中将路径改为save_path=../upload/1.php%00再发送,经系统拼接会变成save_path=../upload/1.php%001.jpg。而%00会将1.jpg截断,1.jpg里面的内容由1.php继承(例如1.jpg里面的内容是<?php phpinfo();?>,截断之后1.php里面会有这个内容)

将上传地址在url打开可以看到执行成功

upload第十三关(post00截断)

看源码发现和上一题的差别在于$_GET['save_path']和$_POST['save_path'],这题我们不能用%00截断了,因为post方法不会将%00解码,即无法造成截断,不过可以利用0X00截断。

原理:系统在对文件名的读取时,如果遇到0X00,就会认为读取已经结束,从而造成截断。

具体操作:(1)先上传一张1.jpg图片,用bp抓包。

(2)在/upload/后面加上1.php+(加+的原因是为了方便后续的操作,可以换成一个你熟悉它十六进制的字符)

(3)在Hex找到刚刚的标记字符+的十六进制2b

将2b改成00进行截断,1.php可以继承1.jpg里面的内容(%00截断的本质是0X00截断,不明白的可以看上面的那篇博客)

找到上传的路径在url打开,发现执行成功,我的1.jpg写的是<?php phpinfo();?>,1.php继承后执行就会显示这个了。

upload第十四关(图片马绕过)

看看源码的主要部分,这题会检查文件头的前两个字节,判断文件类型。可以利用图片马加文件上传

图片马的上传绕过:

一、在记事本写下一句话木马,后缀改成.gif,我这里记事本写下的是<?php phpinfo();?>

然后在hxd打开,将原来的东西先复制下来,再删除掉

加上gif的文件头

这里可以只写两个字节。

二、直接在记事本写下一句话木马,然后把后缀改成1.gif,用bp抓包修改,利用GIF89a文件头欺骗。

发送之后得到上传路径

然后利用第十四关中的文件上传漏洞验证是否成功

最后也是成功执行了。

upload第十五关(getimagesize图片马)

这题用上一题的方法也可以。

upload第十六关(exif_imagetype图片马)

查看源码发现要打开php_exif模块。

这里的话还是跟十四关的做法一样的,差别就在于其它两关的函数不同。

exif_imagetype():

读取一个图像的第一个字节并检查其后缀名。
返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块。

upload第十七关(二次渲染绕过)

首先还是先审源码,这题判断文件的后缀,content-type,以及利用imagecreatefromjpeg函数进行二次渲染(后端重写文件内容)

重点是imagecreatefromjpeg函数的二次渲染

imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像
imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像
imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像

做这题的思路:先上传一个正常的gif图片,下载回显后的图片,在hxd中打开,对比两张图片没有改变的位置,在该位置插入一句话木马,利用该题自带的文件包含漏洞执行。

上传前的图片

下载打开回显的图片,对比看到箭头所指的部分没有改变。

制作我们的图片马

在靶场中上传,复制图片路径

用该题自带的文件包含漏洞测试

最后送给你们一句话,写完博客一定要保存!!!!

upload第十八关(条件竞争一)

这里我们先看一下源码,显然可以看到该源码的逻辑是先上传文件并保存,然后再判断文件类型,如果是被允许的文件类型则保存,否则删除。

这里的大致思路就出来了,我们知道代码执行是需要时间的,如果我们一直上传一个会生成后门22.php文件,并在系统删除该文件前访问成功,是不是就可以让22.php生成一个1.php文件作为我们的后门。

所以22.php文件里面的代码可以这么写,访问成功该文件后会生成一个含有一句话木马的1.php文件,再通过蚁剑连接就好了。

<?php fputs(fopen('1.php','w'),'<?php @eval($_POST["111"])?>');?>

具体操作步骤如下:

上传22.php文件,用bp拦截,发送到intruder并清除$

然后在有效载荷(payloads)这里选择没有负载(Null payloads),同时在有效载荷选择无限期重复

在选项这里把线程调大一些,改成20也可以。

一直上传文件的操作布置好了,为了让22.php在删除前执行,我们还需要写一个脚本去访问它。

import requests
url = "http://127.0.0.1/uploads/upload/22.php"
while True:html = requests.get(url)if html.status_code == 200:print("OK")break

当输出ok以后说明22.php访问成功,已经生成含有一句话木马的1.php文件。

最后一步就是用蚁剑连接了

upload第十九关(条件竞争二)

这关要改一下配置,好像是作者的一个小失误,这关上传图片的路径不是在upload文件夹下的,所以我们需要着找到19关的代码修改一下。

查看源码发现这关检查文件后缀,检查文件大小以及文件是否存在,最后重命名。

用条件竞争的方法:上传图片马,在系统没有将图片马重命名之前,用文件包含漏洞将其解析,从而生成一个含有一句话木马的1.php文件。步骤和18关的差不多,只是脚本需要改一改。

import requests
url = "http://127.0.0.1/uploads/include.php?file=upload/22.png"
while True:html = requests.get(url)if ( 'Warning'  not in  str(html.text)):print('ok')break

upload第二十关

查看源码,发现文件名可由用户控制,然后检查后缀名是否合法

因为文件名可控,这题利用move_uploaded_file的一个特性,会自动忽略后面的/.

所以我们可以上传一张图片马(我这里写的是<?php phpinfo()?>),把文件保存改为1.php/.

可以看到上传成功,复制图片链接,在url打开

upload第二十一关

查看源码

大致的逻辑是

检查上传路径是否存在,检查content_type是否合法判断post方法传递的$file是否为空判断$file不是数组,则用explode将%$file在.处分割成数组判断最后的一个数组是否在白名单中将数组中的第一个数组和最后一个数组连接起来上传文件

补充的知识:

explode(separator,string[,limit]) 函数,把字符串打散成数组。


end(array)函数,输出数组中的当前元素和最后一个元素的值。
reset(array)函数,把数组的内部指针指向第一个元素,并返回这个元素的值
count(array)函数,计算数组中的单元数目,或对象中的属性个数

首先准备一张图片马或者php一句话木马,上传后用bp拦截

我们可以尝试这样绕过:1、先修改content_type构造为白名单中的值2、修改post的参数为数组类型,save_name[0]为"upload-20.php", save_name[2]为"png|jpg|gif"因为上面的代码会先判断最后一个数组元素是否在白名单中,我们索引[2]为"png|jpg|gif"正好可以绕过,而后面会将数组第一位和$file[count($file) - 1]进行拼接因为我们的save_name[1]为空,即$file[1]为空,所以拼接后文件名就会变成upload-20.php

上传好后放包,复制图片链接,测试成功

upload靶场第一-二十一关相关推荐

  1. 在sqli-liabs学习SQL注入之旅(第二十一关~第三十关)

    二十一关 打开这一关,开屏暴击.报错的大致意思是时区没有设置好,我们进入报错的文件,在php代码中加入中国时区的代码即可: date_default_timezone_set("PRC&qu ...

  2. 【upload靶场17-21】二次渲染、条件竞争、黑白名单绕过

    目录 一.推荐 Pass17(二次渲染绕过) 特点: 分析: 利用: Pass18(条件竞争) 特点: 分析: 利用: Pass19(条件竞争) 特点: 分析: 利用: Pass20(黑名单检测) 特 ...

  3. 二十一世纪“新元宇宙”奇科幻小说原创作品系列连载【第一部】第二回 登峰时刻

    二十一世纪"新元宇宙"奇科幻小说原创作品系列连载[第一部] <地球人奇游"天球"记> 第二回    登峰时刻 1.静沐"新哲学" ...

  4. uploadlabs--文件上传靶场-第一关

    最近几天刚学完文件上传漏洞,拿upload靶场来练练手.这个靶场有21关,基本常见的上传验证漏洞都有涉及,下面让我们开始吧!!!! Pass-01 1.先抓包 发现他没有产生数据就直接把文件上传了,这 ...

  5. 翻译: 将操作系统架构带入二十一世纪—过去 50 年中 IT 的变化—第一部分

    上次我检查时,外面是 2019 年,但我们仍在使用操作系统,其架构基本上可以追溯到 60 年代后期的 Multics 或 70 年代中期的 VAX VMS(以及 TBH,从 50'000 英尺开始,M ...

  6. 【甄选靶场】Vulnhub百个项目渗透——项目二十一HACKLAB_VULNIX(NFS挂载,ssh毒化)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目二十一:HACKLAB_VULNIX(NFS挂载,ssh毒化) 靶场地址

  7. 文件上传漏洞 (上传知识点、题型总结大全-upload靶场全解)

    文件上传漏洞 什么是文件上传漏洞 什么是webshell 一句话木马大全 产生文件上传漏洞的原因 文件上传漏洞的攻击与防御方式 1.前端限制 2.检查扩展名 1.黑名单策略, 2.白名单策略 3.检查 ...

  8. 在sqli-liabs学习SQL注入之旅(第十一关~第二十关)

    十一关 可以看到十一关和之前的十关是截然不同,偶尔也得换换口味才有新鲜感嘛!话不多说,开搞! 前言:这里有两个提交框,我们应该从哪里注入呢?这并不是困扰我们的问题.我们在实战中应该多方面测试,两个框都 ...

  9. ac2100 反弹shell无法粘贴_手把手带你玩转NAS 篇二十一:小米Redmi AC2100路由器刷机padavan保姆级教程...

    手把手带你玩转NAS 篇二十一:小米Redmi AC2100路由器刷机padavan保姆级教程 2020-05-14 18:49:24 224点赞 1790收藏 241评论 你是AMD Yes党?还是 ...

最新文章

  1. php赋值给jq,jquery怎么给div赋值
  2. Android 打开网页搜索关键词
  3. 微信公众号之微信买单
  4. python 表格查询_python单表查询
  5. 他是Facebook广告投入费用过亿的独立站卖家
  6. 12.04 ubuntu 安装微软雅黑的字体
  7. JJavaBean中使用JDBC方式进行事务处理
  8. 一个VSCode便可以免费画ER图
  9. js判断移动端还是pc端
  10. 抖音电影视频剪辑——电影版权问题
  11. built a JNCIS LAB系列:Chapter 3 IS-IS v1.0
  12. 【Python笔记】Pandas时区处理
  13. 角度转换之度分秒的转换成度
  14. 混频对两路同频同源射频信号相位差的影响
  15. 设置浏览器的下载模式
  16. Windows系统下安装ROS系统
  17. PHP七彩自助发卡系统源码娱乐影视卡密自助发放系统+教程
  18. MySQL 通过Tcmalloc管理内存
  19. DNC数控机床联网及数据采集系统@杭州乐芯科技
  20. java phash算法 图片_图片相似度——hash算法简介

热门文章

  1. 专访唐九洲:与开发者“在一起,梦飞扬”
  2. float和real的区别
  3. CSDN博客的第一天
  4. mysql从入门到精通作者_mysql从入门到精通(连载)
  5. 奶牛乘法c语言数组,C++程序题,奶牛问题
  6. C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较
  7. web开发学习之路是否有尽头
  8. 什么是SSL数字证书,有哪些知名的CA颁发机构?
  9. 笔记本win7系统文件夹乱码打不开的解决方法
  10. Linux删除乱码文件夹