0


【文件上传漏洞】upload-labs靶场通关

Pass-01

这一关是上传一个php文件,在文件里写入一句话<?php phpinfo(); ?>,发现被前端拦截

我们将php文件的后缀改成jpg,上传,发现可以成功上传

那我们对上传文件抓包

修改文件后缀

放行,访问,成功上传

Pass-02(检测文件类型

服务端通过检查http中包含的Content-Type字段中的值来判断上传文件是否合法的。

利用Burp抓包,将报文中的Content-Type改成允许的类型

Content-Type: image/gif(gif图像)

Content-Type: image/jpg(jpg图像)

Content-Type: image/png(png图像)

当上传文件3.php,提示文件类型不正确,通过查看源码并没有找到限制文件的上传,由此可以猜测肯定是在后端做的限制,我们抓包一探究竟

通过抓包可以发现这里的文件类型为默认参数,而我们这种情况上传文件肯定是上传不上去的,

通过源码中第五段分析得出本关采用了content-type进行后端验证,那么通过使用BS抓包对其进行修改content-type,然后再进行上传。访问

欧克​​​​​​

Pass-03(黑名单)

特殊解析后缀绕过是由于黑名单过滤规则不严谨,在某些特定的情况下的后缀也能够被当作php文件进行解析,例如PHP2、php3、php4、phtml、pht等情况。

可以使用phtml、php3、php4、php5,当然前提是apache服务器,同时在配置文件夹中需要有将AddType application/x-httpd-php .php .phtml .phps .php1 .php5 .pht 这样的一段话前面的注释删除,重启phpstudy让其生效。

本关通过源码得知,禁止.asp、.aspx、.php、.jsp类型进行上传。

本关可以通过上传其他文件扩展名进行绕过,实现文件上传。

这里提示上传一张图片

那我们将文件后缀名改为php5上传,访问很明显上传成功

Pass-04(.htaccess****解析)

.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

通过源码得知第三关使用的都被限制了,并且设定了更多的特殊解析后缀,所以使用特殊解析后缀已经无法绕过了,这里就可以使用到 .htaccess进行绕过测试。

上传一个两个文件,分别写有以下内容

这是将本目录及所有子目录的所有jpg文件都解析为php文件

访问1.jpg,成功解析到php代码

Pass-05(大小写Nginx服务器)

上传一个php文件

抓包,修改文件后缀名

访问,成功上传

Pass-06(后缀为空)

上传一个php文件

抓包,修改文件后缀名

访问,成功上传

Pass-07(.)

上传一个php文件

抓包,修改文件后缀名

访问,成功上传

Pass-08(**::$$DATA绕过**)

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

上传一个php文件

抓包,修改文件后缀名

访问,成功上传

Pass-09(. .绕过)

通过源码发现本关之前所有的绕过思路都被过滤了,但是通过源码发现,所有的过滤都是一次的,并未对其进行循环过滤。也就是说源码中提到的删除空格,删除点都是只删除一次,那么可以在数据包中将php后缀添加. .,形成.php. .,由于只验证一次,所以删除一个点和一个空格后就不在删除了。

上传一个php文件

抓包,修改文件后缀名

访问,成功上传

Pass-10(双后缀名绕过

服务端可能存在将后缀替换为空的情况,但是这就存在一种可能就是在编辑过滤的时候只过滤了一次,所以就出现了可以通过双写就绕过的可能。

上传一个php文件

抓包,修改文件后缀名

访问,成功上传

Pass-11(白名单 %00截断)

这一关白名单,最终文件的存放位置是以拼接的方式,可以使用%00截断,但需要php版本<5.3.4,并且magic_quotes_gpc关闭。

上传一个1.jpg

我们可以看到是通过get传参传递的,那么我们不妨在这块将路径改掉,改为upload/1.php%00,那么后面不管是什么东西都会被截断掉,然后经过move_uploaded_file函数将临时文件重新复制给我们的截断之前的文件路径,使得我们可以进行下面程序的运行

成功访问

Pass-12()

本关接受值从get变成了post,它两的区别就是get会自行解码,而post不会解码,所以需要对%00进行解码。

在BS抓包中选中%00右键选择URL其次选择网址解码。

发现也是课可以上传成功的

Pass-13()

同Pass-18()

Pass-14()

同Pass-18()

Pass-15()

同Pass-18()

Pass-16(图片马二次渲染)

这一关,使用**imagecreatefromjpeg()**函数将我们的图片打散进行二次渲染,这就会导致我们的一句话木马消失

上传一个二次渲染的图片马

查看图片路径

图片马的漏洞需要结合其他漏洞使用,所以我们打开一个漏洞,需要输入一个参数

输入参数file=upload/4541.gif,然后传入一个参数zoe=phpinfo();成功访问

Pass-17(条件竞争)

条件竞争就是在源代码中是存在校验的,但是校验是在文件上传后,才开始校验,也就是文件先上传至服务器中,然后服务器会对该文件进行校验,当符合的时候则会对文件进行重命名,当文件不符合要求的时候就对将文件进行删除。

而我们则需要在服务器对文件删除前进行访问,由于文件在访问过程中,服务器是无法删除的,所以就可以利用这个节点实现条件竞争。

我们在上传的文件写入这行代码<?php @fputs(fopen('1.php',w),'<?php phpinfo();?>');?>

我们要多次上传,读取到文件才能执行我们的文件,在这期间他会不断删除我们的文件,所以我们要竞争

用burp抓包,之后使用Intruder多次上传,

这是我们一直访问上传的php文件,直到访问成功,说明我们的通过上传的文件成功写入木马

成功访问到写入的内容

Pass-18(图片马)

上传一个图片马

右击图片访问,得到图片的路径

配合其他漏洞执行

Pass-19(修改上传文件后缀)

访问


本文转载自: https://blog.csdn.net/m0_59151303/article/details/140739443
版权归原作者 网友小黑 所有, 如有侵权,请联系我们删除。

“【文件上传漏洞】upload-labs靶场通关”的评论:

还没有评论