网安文件上传靶场通关笔记

476 阅读8分钟

此文章只提供学习,无不良引导,全力抵制抄袭者!!!

p.s.前面的图片有点模糊是因为本人在打靶场的时候写过一个通关的文档,图片也是那个时候截屏的,因为文档排版问题,对图片进行了缩放,后期在编写博客的时候直接复制的,图片有点失真。

文件上传简介

文件上传漏洞是指用户上传了一个可执行的脚本文件(木马、病毒、恶意脚本、webshell等),并通过此脚本文件获得了执行服务器端命令的能力。上传点一般出现在头像、导入数据、上传压缩包等地方,由于程序对用户上传的文件控制不足或处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。

文件上传原理及危害

网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。 恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件。

成因及利用条件

成因 :
1,开源编辑器的上传漏洞
2,服务器配置不当 3,本地文件上传限制被绕过
4,过滤不严或被绕过
5,文件解析漏洞导致文件执行
6,文件路径截断

利用条件 :
1,恶意文件可以成功上传
2,恶意文件上传后的路径
3,恶意文件可被访问或执行

常用的webshell及下载地址

冰蝎: github.com/rebeyond/Be…
中国蚁剑: github.com/features/pa…

phpinfo()函数与一句话木马

phpinfo()函数

phpinfo() 是一个用于显示当前 PHP 配置和环境信息的 PHP 函数。当调用 phpinfo() 时,它将生成一个包含详细 PHP 配置信息的页面,包括但不限于以下内容:

  1. PHP 版本信息: 显示当前 PHP 解释器的版本。
  2. 编译器信息: 显示 PHP 编译器的配置选项。
  3. 模块信息: 显示已加载的扩展模块和其配置。
  4. 环境信息: 包括服务器信息、系统信息、流程控制器(SAPI)信息等
  5. PHP 配置参数: 显示各种 PHP 配置参数的当前值

phpinfo() 的主要用途是在开发和调试阶段提供有关 PHP 环境的详细信息。通常,程序员或系统管理员在需要调整服务器配置或排查问题时会使用 phpinfo() 来查看 PHP 的运行时配置

使用 phpinfo() 很简单,只需在 PHP 脚本中调用它,然后将该脚本在浏览器中运行即可:

<?
   phpinfo();
?>

注:phpinfo() 的输出对于生产环境是不安全的,因为它会泄露有关服务器和 PHP 配置的敏感信息。因此,在生产环境中,请避免使用 phpinfo() 或将其仅用于调试目的并在使用后及时移除

一句话木马

<?php @eval($_POST[asd]); ?>

这段代码就是php的一句话木马也就是所谓的这一种webshell,利用@符号抑制错误报告从而降低攻击者暴露的风险。eval()函数用于执行$_POST[asd]。而$_POST[asd]可以理解为这个木马的payload。asd则是与工具连接的口令

注:若上传含有phpinfo()函数的文件至此靶场,并且文件中的phpinfo()函数能够执行,那就意味着上传的webshell同样能运行

通关笔记

靶场下载地址:github.com/c0ny1/uploa…

Pass-01

上传jpg文件,抓包改后缀,上传之后用蚁剑拿到控制权

image.png

image.png

测试连接,连接成功

image.png

Pass-02

修改MIME类型,改为image/jpeg

image.png

image.png

image.png

Pass-03

上传.php文件并抓到包,证明这个是后端验证,猜想:黑名单验证,尝试上传.php3 .php5 .phtml等(需要将apache服务器改成5.2.17版本)

AddType application/x-httpd-php .php .php3 .php5 .phtml

注意:apache服务器得是老版本,即在win7上运行apache服务器才能解析上传的php3 php5 phtml

image.png

image.png

Pass-04

上传.htaccess文件 注意:第一个名字‘.htaccess‘,下面的1.jpg即为一句话木马所应的命名

<FilesMatch "1.jpg"> 
SetHandler application/x-httpd-php
</FilesMatch>`

完成这一步,即可上传名字为1.jpg的一句话木马(ps:需要开启配置【AllOvwerride All】)

image.png

image.png

image.png

image.png

Pass-05

方法一:检验是否非循环校验‘. .’(点空格点)

image.png

image.png

方法二:.user.ini文件上传

user.ini 文件内容:  
`auto_prepend_file=1.jpg`(后面你将要上传的文件名)

因为一般上传文件夹里会自带readme.php文件。这个时候你如果访问php文件,会自动加上你上传的这个文件的内容。

Pass-06

检测是否允许大小写

image.png

image.png

Pass-07

空格绕过,php后用添加空格,window在解析的时候会默认忽略空格

image.png

image.png

Pass-08

“点”绕过

image.png

image.png

Pass-09

::$DATA绕过

image.png

image.png注意最后拼接网站

Pass-10

检验是否非循环校验’. .‘ (点空格点) 同第五题(非循环绕过)。

image.png

image.png

Pass-11

这一关会自动删除后缀名中的php直到删干净。因为是从前往后判断,遇到php便删除。即可通过“.pphphp”绕过。

image.png

image.png

Pass-12

上传抓包的时候发现,服务器是windows系统,路径是通过Get传递的,所以我们尝试使用%00截断绕过。⚠️%00 0x00是16进制表示方法,有些函数处理名,会把这个当作结束符。系统在读取文件名时,遇到0x00,就会认为读取已结束。操作方法如下。

image.png

image.png

image.png

image.png

Pass-13

通过回显包发现这个是Post的保存路径。Post的包会把我们的数字转化成16进制再转化成二进制来进行一个传递。文件名后面的9 通过hex手动改成16进制00,变成空格即可上传成功。

image.png

image.png

image.png

image.png

Pass-14

第一步:制作图片码

image.png

image.png

image.png 第二步:利用文件包含漏洞 直接上传文件马,复制地址“./upload/9120240729184324.jpg”

因为存在文件上传漏洞,即上传的文件夹里包含:”include.php”

证明该网站在访问include.php文件的时候自动访问在文件后面加上file 文件中的内容

即我们可以在访问的访问:http://192.168.1.12/upload/include.php?file=./upload/9120240729184324.jpg

如下图的访问结果

image.png

image.png

image.png 同时使用蚁剑也可以连接到该网站,成功。

Pass-15

这一关在14关的基础上判定了图片的表头,使用第十四的图片码,即可过关若提示报错,则删除。

image.png

image.png

image.png

Pass-16

关二次渲染

image.png

image.png

image.png
使用Notepad--打开(因为本人使用的是macbook所以用的编码器不一样。notepad是中国国内的免费编辑器软件,支持mac,linux,windows。

https://foruda.gitee.com/attach_file/1703313741651870772/notepad--v2.12.0-mac_x64_12.3.dmg?token=4ab4f65efc3d702110d8c058c8ba02c1&ts=1722742500&attname=Notepad--v2.12.0-mac_x64_12.3.dmg

image.png 点击上方比较

image.png

image.png 白色为相同,未被渲染的

image.png 更改后保存为1.gif并上传

image.png

image.png

image.png

Pass-17

我们先试着上传上一关的jpg图片码,发现不能成功上传,于是我们上传gif文件 image.png 先直接上传图片码(gif) image.png 上传后发现这个gif图片是静止的(原图是动态的)证明该图片被二次渲染过 image.png 我们把渲染过的图片下载下来,并放到noteped--中进行对比 image.png 我们发现图片渲染之后被删了和原图相比少了很多

image.png 我们发现最上面基本上不变 挑个自己喜欢的并且两个文件相同的位置修改成一句话木马 image.png 保存并重新上传修改的文件

image.png 上传成功。尝试访问下

image.png phpinfo 成功访问,再试试蚁剑可不可以直接连接

image.png 连接成功!

Pass-18

竞争漏洞
改服务器上传时,会先讲文件上传进入服务器并且移动到指定文件夹,然后解析,然后再比较判断该文件是否为白名单中的后缀文件,如果不为所需要的文件,再删除改文件。因为文件上传需要时间解析判断和比较,于是我们便可以使用中间的一点点时间去撞击,进行爆破。上传的该文件是在该文件夹内新建一个文件,这个文件中写入一句话木马,然后保存。只要这段时间能撞击成功,则改目标服务器会存在你新建的一个文件。上传的文件如下图所示。

image.png

image.png

<?php
fputs(fopen('985.php','w'),'<?php eval($_POST[cmd])?>');
?>

image.png

image.png

image.png 该方法跟网速有关,为了更好的得到结果,我们修改下upload中的内容

image.png

image.png 访问发现211.php上传成功然后5秒后删除并在该目录下生成一个985.php文件。测试链接,连接成功。

image.png

此靶场待续未完

魔改upload 666靶场

image.png

拿到这个网站,先上传一个文件,看能不能抓到包

image.png 上传一下发现抓得到包,证明这个是后端验证 上传正常不含马的jpg格式文件

image.png 发现上传不成功,我们爆破下后缀名看看

image.png

image.png

image.png 发现全部失败,于是我们便尝试下爆破mine-type

image.png

image.png

image.png 爆破发现pdf格式可以上传,于是我们用将mine-type格式改成pdf格式进行上传一句话木马

image.png

image.png 发现上传成功。我们试着访问下

image.png 访问成功,再试试蚁剑可不可以连接成功

image.png 连接成功!

模拟靶场:bees

靶场下载地址:www.123pan.com/s/Ftbojv-R2…

靶场安装图片

image.png 首先信息收集,寻找文件上传点 进入后台找到文件上传的地方,如图所示

image.png 首先先上传正常文件,通过bp抓包,找到文件的路径

image.png 在上传随便的后缀名,发现无法上传,证明是白名单验证 紧接着上传空的gif文件,发现无法上传,提示文件类型错误,证明该网站会对文件内容进行解析,于是我们采用采用图片码,将文件名改成.php文件,发现能够成功上传

image.png 用打开文件路径可以看到phpinfo的界面

image.png 最后使用蚂剑尝试连接,成功。

image.png

模拟靶场:cpms

靶场下载地址:www.123pan.com/s/Ftbojv-xO… 注意要用新版小p,并且php版本需要高版本否则无法打开。

信息收集,找到文件上传点 image.png

通过bp抓包我们发现,该网站是白名单,无文件包含漏洞,并且上传图片会讲文件名修改 我们发现该文章列表最后保存的时候有个包,类似总结的效果,之前上传的文章封面和下面的文章详情都会放在同一个包中上传到服务器,于是我想到可能这个地方文件上传可能存在漏洞,即不会再次对保存的内容进行过滤。

image.png

image.png 打开后发现php文件成功被执行了 image.png 最后尝试用蚁剑连接

image.png 连接成功! 这个靶场就成功拿下啦!