免责申明
本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。
0x00 前言
前段时间有一个老哥给了我一套PHP源码,客户要求需要前台RCE漏洞,于是有了此篇文章(大佬可以绕过,TP框架直接上传)。
0x01 漏洞分析
拿到源码之后开始分析。
其实这种源码一眼就可以看出来为ThinkPHP框架的源码,本地搭建起来访问一下看看TP哪个版本是否可以使用工具一把梭。
ThinkPHP访问路由为
http:
//ip/入口文件/控制器/模块/方法名
我们前提开启app_debug为true让报错信息显示出来,然后随便访问一些没有的方法,就可以去确定好相关的TP版本。
可以看到版本为ThinkPHP 5.0.24的版本,在网上查询了一圈之后没有找到对应版本可以直接RCE的漏洞均为反序列化漏洞,如果大佬们有可以分享一下,嘿嘿,那么我们可以继续向下分析了。
我们知道在ThinkPHP框架下,
运行根目录在->
/public/
定义应用目录在->
/application/
(这里名称更改为app)
什么意思呢看下面图片:
例如我要访问其中的1.html以及app下的uploads.php文件。
那么对应路由如下:
1
.html
=>
http
://
ip
/1
.html
uploads.php => http:
//ip/index.php/api/uploads/方法名
可以看到public下可以直接访问,uploads当中的一些方法,需要按照框架访问格式来,默认情况下入口文件均为index.php
也就是说
http:
//ip/入口文件为index.php/目录名字/php文件名字/前面那个php文件中的方法
(只有Controller目录名称没有写,当然你的php文件名称也要是controller下的php别的目录下不可以)。
具体情况具体分析,上述解释方便大家理解,具体情况可以加作者来一起分析。
那么我们回到正题,没错Uploads类,这不就是文件上传吗,我们查看文件。
可以看到其中的upload方法直接进行了文件上传,上传至目录/imgs
(TP框架当中把文件上传move_uploaded_file方法封装在了move方法)
但是在move方法当中并没有进行相关的漏洞后缀名验证等方式,所有调用了move方法之后是需要进行后缀名等检测的,此套源码当中没有导致了任意文件上传漏洞。
至此我们拿到了前台文件上传漏洞,下面进行漏洞验证
0x02 漏洞验证
我们编写HTML文件
<
html
lang
=
"en"
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>
文件上传
</
title
>
</
head
>
<
body
>
<
form
action
=
"http://ip/index.php/api/uploads/upload"
method
=
"post"
enctype
=
"multipart/form-data"
>
<
label
for
=
"sjh"
>
输入 sjh:
</
label
>
<
input
type
=
"text"
name
=
"sjh"
id
=
"sjh"
required
>
<
label
for
=
"data"
>
选择文件:
</
label
>
<
input
type
=
"file"
name
=
"data"
id
=
"data"
required
>
<
input
type
=
"submit"
value
=
"上传"
>
</
form
>
</
body
>
</
html
>
尝试上传,可以看到上传成功。
尝试进行访问
搞定!
0x03 完结
原文始发于微信公众号(进击安全):一次针对裸聊诈骗的审计流程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论