upload-labs靶场1-5关

admin 2022年4月18日08:47:49评论447 views2字数 2948阅读9分49秒阅读模式
upload-labs靶场1-5关
0x00 前言
hello大家好,本周小黑尝试通关并分析了upload-labs靶场的1-5关。

前情提要:上传靶场upload-labs搭建及使用》。

文章省略了文件上传漏洞原理、webshell的原理和利用方法,感兴趣的小伙伴可以自行寻找资料学习。

简单的说,该靶场需要你想办法上传一个能解析的php文件上去就算通关。

0x01 Pass-01 
前端验证抓包绕过
upload-labs靶场1-5关
看到关键字var、document、alert等等,可知这是js的源码,程序使用的是前端验证后缀名白名单。所以上传temp.jpg然后抓包改后缀即可绕过。

upload-labs靶场1-5关
upload-labs靶场1-5关

0x02 Pass-02 
修改Content-Type绕过
upload-labs靶场1-5关
本关使用白名单检查$_FILES['upload_file']['type'],这个值对应的是请求包中的Content-Type(内容类型),是http协议中用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件的字段。

Content-Type的值是上传文件时浏览器根据文件后缀自动加到请求包中的。而请求包里的内容我们是可以随便改的。
upload-labs靶场1-5关

当然像上一关一样,上传temp.jpg然后抓包改后缀也可绕过。

0x03 Pass-03 
非主流后缀名绕过
upload-labs靶场1-5关
trim:此函数返回字符串去除首尾空白字符后的结果。
strrchr:此函数返回字符串中指定字符最后一次出现的位置到字符串结尾的部分的所有字符。

本关取文件名中从最后一个点到结尾的部分作为后缀名,然后进行黑名单判断。同时用日期+随机数来代替文件名中其余的部分

在ctf比赛中,上传黑名单有个很常见的绕过手法是这是利用其他可解析的后缀,例如php、php3、php4、php5、phtml、pht等,有时候需要挨个进行尝试。本关使用phtml即可进行绕过。
upload-labs靶场1-5关

这些后缀能解析的原因是写在apache的配置文件里的,非默认配置。虽然ctf中的案例多来自实战,但实话说,我确实没在实战中见过这些后缀能解析的情况。
upload-labs靶场1-5关

当然可能是我见识少吧,因为搜了一下发现确实有一些教程教人如何配置apache使能解析php3、phtml这些后缀的。不知道意义何在,希望能有开发大佬在评论区留言指导一下,谢谢!
upload-labs靶场1-5关

0x04 Pass-04 .htaccess绕过
upload-labs靶场1-5关
代码和上一关基本相同,唯一的区别是黑名单变长了。。。

仔细观察黑名单,发现其中的php1前面少了一个点,那这个应该是可以绕过的点。

但成功上传test.php1之后发现并不解析。
upload-labs靶场1-5关
不过同时也发现文件并没有被重命名,第15行代码没有生效,可代码是不会骗人的,这是怎么回事呢?

直接用sublime打开源代码查看,发现实际的代码是这样的,$img_path中直接使用了$file_name,并没有进行重命名:
upload-labs靶场1-5关

既然没有了重命名,那就可以触发apache的多后缀解析漏洞,上传test.php.abc即可解析。
upload-labs靶场1-5关
upload-labs靶场1-5关

apache多后缀解析漏洞的原理是:apache会从右向左读取文件的后缀来判断文件类型,但是当apache遇到不认识的后缀名时不会停止,而是会自动跳过继续向左读取直到遇见认识的后缀为止。

本着学知识的意图,我又看了看网上其他的解法:

(1)点 空格 点 绕过
源码中使用自定义函数deldot删除文件名末尾的点,该函数从后向前判断并舍弃遇到的点,直到遇到一个非点的字符为止。
upload-labs靶场1-5关

所以在两个点之间插一个空格,该函数就只能删除最后面的点。

我们上传test.php点空格点,处理后变成了test.php点空格,这时程序用当前的最后一个点取后缀,取到的是点空格,该后缀不在黑名单里,成功绕过黑名单。

同时因为和第三关不同,真正上传时使用的是$file_name而非$file_ext,所以最后传上去的是test.php点空格

这时由于windows的特性:文件名自动删除最后的点和空格,所以实际传上去的就是test.php。
upload-labs靶场1-5关

(2).htaccess绕过
文件没有被重命名,那我们可以直接上传.htaccess文件。

该文件是apache服务器的分布式配置,和总配置文件的区别是,它只作用于它所在的目录及子目录,但优先级比总配置高,类似于地头蛇的意思。

于是我们上传一个.htaccess文件,内容是
AddType application/x-httpd-php .jpg
upload-labs靶场1-5关

此段配置的作用是让apache将.jpg后缀的文件当作php文件来解析。

之后再上传一个webshell内容的test.jpg即可。
upload-labs靶场1-5关
结合第五关的变化来考虑,我认为.htaccess是作者预期这关的解法。

0x05 小插曲
第四关遇到了网页上的提示源码和实际源码不相同的问题,于是我去github看了看,发现已经有人提过了:
upload-labs靶场1-5关

作者回复说因为release并没有更新到最新的源码,看了一下我们下载的release是2019.1.29日放出的。
upload-labs靶场1-5关

在此之后作者还更新了很多内容,包括一个新的关卡。
upload-labs靶场1-5关

那我们从github重新下载一下最新的源码吧
upload-labs靶场1-5关

下载后解压,将所有文件直接覆盖到原来的集成环境的WWW目录里就好了。

覆盖后可以看到,第四关的一些bug已经修复了,同时左侧多了一关。
upload-labs靶场1-5关

0x06 Pass-05 .user.ini绕过
做这关之前记得先点一下右上角的
upload-labs靶场1-5关
不然第四关上传的.htaccess可能会有干扰。
upload-labs靶场1-5关

看源码和第四关基本没有区别,仔细看了一下发现后缀黑名单里多了.htaccess
upload-labs靶场1-5关

但是第四关我们使用了三种方法,除去.htaccess,另外两种方法还是可以用的(多后缀解析漏洞、点空格点绕过)。

不过第六感告诉我,那不是作者的本意。看一下提示吧,这关应该和这个readme.php有关系。
upload-labs靶场1-5关

已知目录下有一个php文件,那自然想到的利用方法是.user.ini。该文件是php.ini的分布式配置,在apache、nginx下都能生效,但前提是使用了fastcgi的运行模式。其中有两项配置比较危险:

auto_prepend_file = <filename> //包含在文件头
auto_append_file = <filename> //包含在文件尾

这两项配置的作用是,和.user.ini在同一目录的所有php文件在运行时都会自动寻找并包含配置中所指定的文件。

那我们首先传一个.user.ini上去,内容是auto_prepend_file=shell.jpg,让目录里的所有php文件在运行前先在文件头包含目录下的shell.jpg。
upload-labs靶场1-5关

然后传一个带有恶意内容的shell.jpg上去。
upload-labs靶场1-5关

最后访问目录下已有的php文件即可,不过我这里是利用失败了。
upload-labs靶场1-5关

还是去github看了下原因,应该是默认的环境有问题,可能是php版本过低或者没有使用fastcgi模式。无所谓了,只要理解了知识点就行。
upload-labs靶场1-5关


0x07 后记
upload-labs靶场1-5关
VX公众号:《小黑的安全笔记》
最近有读者反馈文章字体偏小的问题,我把文章字体调小主要是出于信息密度的考虑——同样大小的屏幕中更小的字体能展现更多的内容。

但既然有读者反馈了,那我这里还是把字体稍稍调大一点,大家可以观察一下哪个字体比较好一点,如果还有什么需求也可以在留言区反馈给我~

之后小黑会继续通关并分析upload-labs的其他关卡,欢迎大家关注。
END.

喵,点个赞再走吧~

原文始发于微信公众号(小黑的安全笔记):upload-labs靶场1-5关

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月18日08:47:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   upload-labs靶场1-5关http://cn-sec.com/archives/920894.html

发表评论

匿名网友 填写信息