Aggregator
优化更新 php backdoor for windows
6 years 7 months ago
所有Microdoor系列仅供学习,通过了解相关原理,来做自身安全与防护。切勿非法使用。
Microdoor for php 作为backdoor,更为隐蔽,所有调用以及代码任意执行,都调用内核函数,php禁用执行函数依然可以执行任意php代码。无缝连接菜刀,以及第三方渗透框架。并且在phpinfo,以及php -m 隐藏自身。旨意通过了解相关原理,做好相关安全防护。
更新支持php 5.4.x for windows 更新php-5.6.36 for windows 的部分bug。
php-5.6.36 backdoor for windows
micropoor_php5.6.x_x86.dll SIZE: 188416 字节 MD5: 1EEF918B0D873316D39117F62C6A4819 SHA1: 944EFD5DB064FF412D1D7874FEC719F14382E2F1 CRC32: F9D03401 备注:micropoor_php5.6.x_x86.dll仅适用x32位php-5.6.36 for Windows 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/19aJIIBKyTItUWkizGdupWJnHy7eUvrUC/view
php-5.4.x backdoor for windows
micropoor_php5.4.x_x86.dll SIZE: 68608 字节 MD5: 457A72A45CBD06D8F4ECAB2C6A8B7426 SHA1: D922C4A9C79FB250F2BD0F426BD5124C38C9716E CRC32: 560188D7 备注:micropoor_php5.4.x_x86.dll仅适用x32位micropoor_php5.4.x_x86.dll for Windows 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1bIT9LSyeXxJa4qxKBYjPro784DEr3swG/view
更新支持php 5.4.x for windows 更新php-5.6.36 for windows 的部分bug。
php-5.6.36 backdoor for windows
micropoor_php5.6.x_x86.dll SIZE: 188416 字节 MD5: 1EEF918B0D873316D39117F62C6A4819 SHA1: 944EFD5DB064FF412D1D7874FEC719F14382E2F1 CRC32: F9D03401 备注:micropoor_php5.6.x_x86.dll仅适用x32位php-5.6.36 for Windows 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/19aJIIBKyTItUWkizGdupWJnHy7eUvrUC/view
php-5.4.x backdoor for windows
micropoor_php5.4.x_x86.dll SIZE: 68608 字节 MD5: 457A72A45CBD06D8F4ECAB2C6A8B7426 SHA1: D922C4A9C79FB250F2BD0F426BD5124C38C9716E CRC32: 560188D7 备注:micropoor_php5.4.x_x86.dll仅适用x32位micropoor_php5.4.x_x86.dll for Windows 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1bIT9LSyeXxJa4qxKBYjPro784DEr3swG/view
Micropoor
垦丁迷途台北烟雨
6 years 7 months ago
台湾游记,超多图预警
迷失在数据中的情报
6 years 7 months ago
> . <
多项目管理中 PMO 的作用 | 岂安低调分享
6 years 7 months ago
协调资源,提高效率的秘密就在这里了
沧海遗珠,攻击面 - RSAC2018之四
6 years 7 months ago
安全的进步,并非只靠性感唬人的新名词。即便是最基础的概念,应用到极致,自然也是创新。RSAC纵然热点繁多,但对安全基础能力的探索却从未中断。从热议创新的喧嚣嘈杂中脱身,静下心来细细品味议题内容,寻找茫茫大海中被遗落的珍宝,必定收获良多。
JAVA常见安全问题复现 - 羊小弟
6 years 7 months ago
地址来源于乌云知识库,作者z_zz_zzz 0x01 任意文件下载 web.xml的配置: 其中的servlet类要换下。类的代码如下: JDK1.5-1.7存在0x00导致的文件名截断问题,与操作系统无关。冒号在Windows环境会导致文件名截断问题,与JAVA无关。 如果要修复这种漏洞的话,可以
羊小弟
Sensitive Data on 3 Million Facebook Users Potentially Exposed by Suspended App
6 years 7 months ago
From Facebook to Twitter and now back to Facebook – the past few months have seen some of the most...
The post Sensitive Data on 3 Million Facebook Users Potentially Exposed by Suspended App appeared first on McAfee Blog.
McAfee
Managing Compliance Issues within the Value Chain
6 years 7 months ago
Align your compliance requirements with your other business requirements so you can distinguish what you must do from what’s nice to do.
XSS绕过与动态扫描
6 years 7 months ago
啊~~~五环~~~
河马在线第二十七期:让世界充满爱(2018.05.14)
6 years 7 months ago
滴滴事件梳理;“德州扑克”涉赌逾3亿;阿里巴巴举行集体婚礼,马云现场证婚;汇丰利用区块链完成了全球首个贸易融资交易;中兴恢复业务指日可待;Steam公布奖励计划,发现平台漏洞可换取奖金;汶川地震十周年
Spring Integration Zip不安全解压(CVE-2018-1261)漏洞复现 - 羊小弟
6 years 7 months ago
不敢说分析,还是太菜了,多学习。 文章来源: 猎户安全实验室 存在漏洞的源码下载地址:https://github.com/spring-projects/spring-integration-extensions/releases/tag/zip.v1.0.0.RELEASE 代码下载两眼相望了好
羊小弟
OSSEC 从入门到吃瓜
6 years 7 months ago
陈年佳(tun)酿(huo),客官来尝尝
PHP all kernel versions for backdoor
6 years 7 months ago
所有Microdoor系列仅供学习,通过了解相关原理,来做自身安全与防护。切勿非法使用。
Microdoor for php 作为backdoor,更为隐蔽,所有调用以及代码任意执行,都调用内核函数,php禁用执行函数依然可以执行任意php代码。无缝连接菜刀,以及第三方渗透框架。并且在phpinfo,以及php -m 隐藏自身。旨意通过了解相关原理,做好相关安全防护。
How to install?
php5.x x64 backdoor for linux public_x64.so Size: 26800 bytes MD5: 1C21BD02D26E9A3914A9A7248B799715 SHA1: 934D577EDBCBC6FEB93AA52DE2C195BE59269B77 CRC32: 8145921D 备注:public_x64.so仅适用x64位php5.x for Linux 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1qDYcGuODAUOWF8rKGw4okQ34TyBK9vBh/view?usp=sharing php5.x x32 backdoor for linux public_x32.so Size: 26127 bytes MD5: 9BF67665FDCB30C355358624DBEB79BB SHA1: 3E996D33F18C1E34600203E8C348988449865888 CRC32: 54264834 备注:public_x32.so仅适用x32位 php5.x for Linux的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1hF0ZRlz7qZCrWShPNSIumIhlR-pjAx34/view?usp=sharing php5.x x32 backdoor for windows public_x86.dll Size: 68608 bytes MD5: F5FAF58A15ADC9946A3C34220653DB21 SHA1: 70CA2B9F7ACDADDE0A8A20702EAA897B8EEB43E2 CRC32: 306CDD73 备注:public_x86.dll仅适用x32位php5.x for Windows 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1b_TYaV2gfM6_iJLNx-61qQRUskwwh4dR/view?usp=sharing PHP7.X x32 for linux public_x32_7.x.so Size: 40188 字节 MD5: 472BBC6A3673D7C0C234A5494FDF0A92 SHA1: BCB760BDEB34972E540121591E95866AED78066E CRC32: 9F17393A 备注:public_x32_7.x.so仅适用x32位 php7.x for Linux的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1UJYyKTZ-LZpSUvmRq_Gg3oI_Sn0Q8YZN/view PHP7.X x64 for linux public_x64_7.x.so Size: 42000 字节 MD5: B5370B1C04C5D6E7A3586BFF262BAF19 SHA1: A1F58D3A7DA18C1184CA3C1CD225D5D353231FC0 CRC32: A4BA02C1 备注:public_x64_7.x.so仅适用x64位 php7.x for Linux的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1WkQInZQ53PHe104MKHqFOG_-ydCZh4lN/view
注:部分windows dll版,如果有需求的话,未来编译发布。
How to install?
php5.x x64 backdoor for linux public_x64.so Size: 26800 bytes MD5: 1C21BD02D26E9A3914A9A7248B799715 SHA1: 934D577EDBCBC6FEB93AA52DE2C195BE59269B77 CRC32: 8145921D 备注:public_x64.so仅适用x64位php5.x for Linux 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1qDYcGuODAUOWF8rKGw4okQ34TyBK9vBh/view?usp=sharing php5.x x32 backdoor for linux public_x32.so Size: 26127 bytes MD5: 9BF67665FDCB30C355358624DBEB79BB SHA1: 3E996D33F18C1E34600203E8C348988449865888 CRC32: 54264834 备注:public_x32.so仅适用x32位 php5.x for Linux的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1hF0ZRlz7qZCrWShPNSIumIhlR-pjAx34/view?usp=sharing php5.x x32 backdoor for windows public_x86.dll Size: 68608 bytes MD5: F5FAF58A15ADC9946A3C34220653DB21 SHA1: 70CA2B9F7ACDADDE0A8A20702EAA897B8EEB43E2 CRC32: 306CDD73 备注:public_x86.dll仅适用x32位php5.x for Windows 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1b_TYaV2gfM6_iJLNx-61qQRUskwwh4dR/view?usp=sharing PHP7.X x32 for linux public_x32_7.x.so Size: 40188 字节 MD5: 472BBC6A3673D7C0C234A5494FDF0A92 SHA1: BCB760BDEB34972E540121591E95866AED78066E CRC32: 9F17393A 备注:public_x32_7.x.so仅适用x32位 php7.x for Linux的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1UJYyKTZ-LZpSUvmRq_Gg3oI_Sn0Q8YZN/view PHP7.X x64 for linux public_x64_7.x.so Size: 42000 字节 MD5: B5370B1C04C5D6E7A3586BFF262BAF19 SHA1: A1F58D3A7DA18C1184CA3C1CD225D5D353231FC0 CRC32: A4BA02C1 备注:public_x64_7.x.so仅适用x64位 php7.x for Linux的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 https://drive.google.com/file/d/1WkQInZQ53PHe104MKHqFOG_-ydCZh4lN/view
注:部分windows dll版,如果有需求的话,未来编译发布。
Micropoor
关于php对抗安全软件(总结)
6 years 7 months ago
目前日期为2018-05-10,php版本目前总共分为3大类,php5.x,php7.x,以及之php5.x之前版本。而目前市场多用于php5.x以及php7.x。本文仅讨论php5.x与php7.x。早期php4.x中 ZendEngine 1.0 API并不在讨论范围。
文章将围绕几个话题来对抗安全软件:
1.php本身的变形,加密等是否可以完全胜任一个优秀的bockdoor,并且对抗安全软件。
2.如何将访问.php,的协议转换来对抗waf,比如http,转化tcp,tcp->tcp方式触发后门
3.考虑backdoor本身的特性,增加标签,如标签1临时性,标签2持续性(比如标签1用户菜刀的连接,查看目标数据库或者backdoor服务器本身的其他文件等。标签2来触发持续性渗透,比如无缝连接msf,Cobalt Strike等)
4.考虑如何在目标服务器无文件残留来留有可持续性后门
5.实用性与实战性,比如目标机不出网。那么该后门是否可以解决目标机在不出网的前提下,带入第三方渗透框架(如msf,Cobalt Strike等)
6.针对性自定义敏感目标的敏感数据。(如目标使用wordpress,如何在不修改目标机php登录源码来可持续性劫持明文密码)
7.backdoor的市场性质与私用性质
8.总结
无论是哪个版本的php,它的引擎都大量的使用了HashTable,如果说php是最好的语言之一,那么一定是在说HashTable。
期间补充大量php内核相关知识,可直接跳到操作总结。
(1)php语言本身的变形或者加密等,目前并不能完全对抗安全软件,并且作为以backdoor的形式。比如易暴露,易查杀等。而本身也不具备多标签属性。如临时使用,与持续渗透使用。
(2)waf是通过执行一系列针对HTTP/HTTPS的安全策略防护,而作为backdoor,应尽可能避免http协议来持续连接后门。如hook,phpinfo(),当访问phpinfo(),目标机开始触发tcp监听,并且sharing port 80。连接后门是tcp(攻击机)->tcp(目标机),来躲避waf的防御的本质。
(3)目前的安全软件针对backdoor越来越强大。而backdoor的多属性标签行为分开来对抗软件。(如:backdoor有2种标签属性,一种标签是执行任意php代码[临时使用,如菜刀连接],另一种标签是hook func或是开启其他功能,但是触发backdoor的点却完全不同,这与传统php_backdoor有着本质的区别,如想要触发php代码任意执行,访问页面1触发,而触发hook 是被动触发,触发listen,访问页面2来触发。而页面1与2无任何关联)
(4)针对php的扩展开发,同时要考虑到backdoor本身是私用还是项目或者公用。如私用的backdoor,更多考虑的是稳定性,长期性,而非易用性,通用性。如项目或者公用的backdoor优先考虑到易用性与通用性,如全版本的phpbackdoor,同时支持php5.x,php7.x等,它是一个很好的公用性质的backdoor,但是绝对不是一个优秀的私用backdoor。因在实现中,需要考虑到PHP_MAJOR_VERSION问题。
(5)往往在实战过程中,目标机存在不出网的环境,也就是你可以访问它,但是目标机不可以对外访问。增加了对目标内网以及PC机的渗透时间成本。这里需要考虑到1,针对不出网的前提下,backdoor本身的sharing port,以及可以无缝对接渗透框架(如msf,Cobalt Strike等)。
(6)渗透大型目(如mail服务商)或者大型公司域内员工OA,或者mail(php结构),需要时时得到user,password明文,如果目标重要或者数据敏感,更或者是对方源码加密,对于更改目标登录源码来获取并不是一个明智的方法,那么需要优先考虑如何hook func(post user,pass)--> 写入本地,或者发送远程mail,来时时获取。
PHP的全局变量始终存在,而在内核hash中保存在EG(symbol_table),而全局变量的访问无论是语言本身还是在内核中,语法基本一致。
global $micropoor;表达为&EG(symbol_table), micropoor,除全局变量以外,在php语言中还存在超全局变量,$_SERVER、$_REQUEST、$_POST、$_GET等,但是在内核中,超全局变量实际是php内核中定义的一些全局变量。
php-src-master\main\php_variables.c:908-917
void php_startup_auto_globals(void) { zend_register_auto_global(zend_string_init_interned("_GET", sizeof("_GET")-1, 1), 0, php_auto_globals_create_get); zend_register_auto_global(zend_string_init_interned("_POST", sizeof("_POST")-1, 1), 0, php_auto_globals_create_post); zend_register_auto_global(zend_string_init_interned("_COOKIE", sizeof("_COOKIE")-1, 1), 0, php_auto_globals_create_cookie); zend_register_auto_global(zend_string_init_interned("_SERVER", sizeof("_SERVER")-1, 1), PG(auto_globals_jit), php_auto_globals_create_server); zend_register_auto_global(zend_string_init_interned("_ENV", sizeof("_ENV")-1, 1), PG(auto_globals_jit), php_auto_globals_create_env); zend_register_auto_global(zend_string_init_interned("_REQUEST", sizeof("_REQUEST")-1, 1), PG(auto_globals_jit), php_auto_globals_create_request); zend_register_auto_global(zend_string_init_interned("_FILES", sizeof("_FILES")-1, 1), 0, php_auto_globals_create_files); }
跟zend_register_auto_global
php-src-master\Zend\zend_compile.c:1649-1661
int zend_register_auto_global(zend_string *name, zend_bool jit, zend_auto_global_callback auto_global_callback) /* {{{ */ { zend_auto_global auto_global; int retval; auto_global.name = name; auto_global.auto_global_callback = auto_global_callback; auto_global.jit = jit; retval = zend_hash_add_mem(CG(auto_globals), auto_global.name, &auto_global, sizeof(zend_auto_global)) != NULL ? SUCCESS : FAILURE; return retval;
}
把对象保存CG(auto_globals)这个全局变量,正如上文,在内核中,超全局变量实际为php内核定义的全局变量。保存在CG。
而backdoor常用除EG,CG辅助宏外,其他辅助宏为:
EG();//全局变量 executor_globals 如$_GLOBALS[EG(symbol_table),地址:EG(active_symbol_table) PG();//核心变量 php_core_globals 如:$_GET $_POST .. PG(http_globals)[TRACK_VARS_*],INI信息 SG();//SAPI变量 请求数据 sapi_globals_struct 如:HTTP原始请求变量 sapi_request_info CG();//编译变量 compiler_globals 可以得到函数表,类表 EX();//当前执行数据 zend_execute_data 可以获取到当前执行的函数,类,OPCODE等 OG();//输出变量 output_globals
了解了超全局变量,全局变量,常量等,如果需要hook 自定义或本身函数,还需声明导出函数,Zend本身提供了一组宏,类型为void
// function declaration PHP_MINIT_FUNCTION(my_extension); // ... some code ... zend_module_entry my_extension_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "my_extension", my_extension_functions, PHP_MINIT(my_extension), NULL, NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 "1.0", #endif STANDARD_MODULE_PROPERTIES }; // ... some code ... // function implementation PHP_MINIT_FUNCTION(hosting_tools) { REGISTER_INI_ENTRIES(); return SUCCESS; }
在php请求过程中,需要调用HashTable来查找全局变量或者hook func,几个原型如下:
uint32_t zend_hash_num_elements(HashTable *ht); // 获取数组大小 zval* zend_hash_find(HashTable *ht, zend_string *key); // 根据 zend_string * 作为 key 查找数组 zval* zend_hash_str_find(HashTable *ht, char *str, size_t len); // 根据 char * 作为 key 查找数组 zval* zend_hash_index_find(HashTable *ht, zend_ulong h); // 查找索引 h 的数组元素 void* zend_hash_find_ptr(HashTable *ht, zend_string *key); // 同上,只是返回元素指针指向的值 void* zend_hash_str_find_ptr(HashTable *ht, char *str, size_t len); // 跟上同类 void* zend_hash_index_find_ptr(HashTable *ht, zend_ulong h); // 跟上同类 zend_bool zend_hash_exists(HashTable *ht, zend_string *key); // zend_string * key 是否存在 zend_bool zend_hash_str_exists(HashTable *ht, char *str, size_t len); // char * key 是否存在 zend_bool zend_hash_index_exists(HashTable *ht, zend_ulong h); // 索引 h 是否存在 zend_array *HASH_OF(zval *val); // 其实 HASH_OF 是一个宏,参数 value 可以是数组 `IS_ARRAY` 或者对象 `IS_OBJECT`,否则返回 NULL
而在php7.x中,HashTable API大部分被修改,列出1处对比原型如下:(具体见tks官方wiki)
- if (zend_hash_find(ht, Z_STRVAL_P(key), Z_STRLEN_P(key)+1, (void**)&zv_ptr) == SUCCESS) { //php5.x + if ((zv = zend_hash_find(ht, Z_STR_P(key))) != NULL) { //php7.x
操作总结:
接下来考虑的事情是如何把以上枯燥无趣变成一件有趣的事情。并且做出2个demo,2个更具有实战性的backdoor
1.php7.x 劫持_POST,或者_GET等,执行任意php code(临时使用标签)
2.php7.x hook phpinfo,来隐藏一句话(临时使用标签)
3.如何构造php全版本的backdoor(公共或项目backdoor思想)
4.关于第三方框架的嵌入。(持续性标签)
作为demo1,设计出php7.x backdoor,并且目标禁止相关函数,也可以执行任意php code。
以info.php 为demo,内容如下:
访问任意php页面,带有post参数micropoor_php,则执行任意代码。
菜刀配置:
填写<O>自定义code </O>
下载地址: linux php 7.x_x64_backdoor
https://drive.google.com/file/d/1WkQInZQ53PHe104MKHqFOG_-ydCZh4lN/view?usp=sharing
更多有趣的实验:
作为demo2,劫持phpinfo();,使得一句话后门为 <?php phpinfo();?>
demo3,无缝支持第三方框架。嵌入C payload,并sharing port 80.
tks:
http://php.webtutor.pl/
https://wiki.php.net/phpng-upgrading
https://www.jianshu.com/p/32fdad9be6c8
https://github.com/pangudashu/php7-internal/
附录:
php5.x x64 backdoor for linux public_x64.so Size: 26800 bytes MD5: 1C21BD02D26E9A3914A9A7248B799715 SHA1: 934D577EDBCBC6FEB93AA52DE2C195BE59269B77 CRC32: 8145921D 备注:public_x64.so仅适用x64位 php5.x for Linux 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 所有Microdoor系列仅供学习。 https://drive.google.com/file/d/1qDYcGuODAUOWF8rKGw4okQ34TyBK9vBh/view?usp=sharing php5.x x32 backdoor for linux public_x32.so Size: 26127 bytes MD5: 9BF67665FDCB30C355358624DBEB79BB SHA1: 3E996D33F18C1E34600203E8C348988449865888 CRC32: 54264834 备注:public_x32.so仅适用x32位 php5.x for Linux 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 所有Microdoor系列仅供学习。 https://drive.google.com/file/d/1hF0ZRlz7qZCrWShPNSIumIhlR-pjAx34/view?usp=sharing
文章将围绕几个话题来对抗安全软件:
1.php本身的变形,加密等是否可以完全胜任一个优秀的bockdoor,并且对抗安全软件。
2.如何将访问.php,的协议转换来对抗waf,比如http,转化tcp,tcp->tcp方式触发后门
3.考虑backdoor本身的特性,增加标签,如标签1临时性,标签2持续性(比如标签1用户菜刀的连接,查看目标数据库或者backdoor服务器本身的其他文件等。标签2来触发持续性渗透,比如无缝连接msf,Cobalt Strike等)
4.考虑如何在目标服务器无文件残留来留有可持续性后门
5.实用性与实战性,比如目标机不出网。那么该后门是否可以解决目标机在不出网的前提下,带入第三方渗透框架(如msf,Cobalt Strike等)
6.针对性自定义敏感目标的敏感数据。(如目标使用wordpress,如何在不修改目标机php登录源码来可持续性劫持明文密码)
7.backdoor的市场性质与私用性质
8.总结
无论是哪个版本的php,它的引擎都大量的使用了HashTable,如果说php是最好的语言之一,那么一定是在说HashTable。
期间补充大量php内核相关知识,可直接跳到操作总结。
(1)php语言本身的变形或者加密等,目前并不能完全对抗安全软件,并且作为以backdoor的形式。比如易暴露,易查杀等。而本身也不具备多标签属性。如临时使用,与持续渗透使用。
(2)waf是通过执行一系列针对HTTP/HTTPS的安全策略防护,而作为backdoor,应尽可能避免http协议来持续连接后门。如hook,phpinfo(),当访问phpinfo(),目标机开始触发tcp监听,并且sharing port 80。连接后门是tcp(攻击机)->tcp(目标机),来躲避waf的防御的本质。
(3)目前的安全软件针对backdoor越来越强大。而backdoor的多属性标签行为分开来对抗软件。(如:backdoor有2种标签属性,一种标签是执行任意php代码[临时使用,如菜刀连接],另一种标签是hook func或是开启其他功能,但是触发backdoor的点却完全不同,这与传统php_backdoor有着本质的区别,如想要触发php代码任意执行,访问页面1触发,而触发hook 是被动触发,触发listen,访问页面2来触发。而页面1与2无任何关联)
(4)针对php的扩展开发,同时要考虑到backdoor本身是私用还是项目或者公用。如私用的backdoor,更多考虑的是稳定性,长期性,而非易用性,通用性。如项目或者公用的backdoor优先考虑到易用性与通用性,如全版本的phpbackdoor,同时支持php5.x,php7.x等,它是一个很好的公用性质的backdoor,但是绝对不是一个优秀的私用backdoor。因在实现中,需要考虑到PHP_MAJOR_VERSION问题。
(5)往往在实战过程中,目标机存在不出网的环境,也就是你可以访问它,但是目标机不可以对外访问。增加了对目标内网以及PC机的渗透时间成本。这里需要考虑到1,针对不出网的前提下,backdoor本身的sharing port,以及可以无缝对接渗透框架(如msf,Cobalt Strike等)。
(6)渗透大型目(如mail服务商)或者大型公司域内员工OA,或者mail(php结构),需要时时得到user,password明文,如果目标重要或者数据敏感,更或者是对方源码加密,对于更改目标登录源码来获取并不是一个明智的方法,那么需要优先考虑如何hook func(post user,pass)--> 写入本地,或者发送远程mail,来时时获取。
PHP的全局变量始终存在,而在内核hash中保存在EG(symbol_table),而全局变量的访问无论是语言本身还是在内核中,语法基本一致。
global $micropoor;表达为&EG(symbol_table), micropoor,除全局变量以外,在php语言中还存在超全局变量,$_SERVER、$_REQUEST、$_POST、$_GET等,但是在内核中,超全局变量实际是php内核中定义的一些全局变量。
php-src-master\main\php_variables.c:908-917
void php_startup_auto_globals(void) { zend_register_auto_global(zend_string_init_interned("_GET", sizeof("_GET")-1, 1), 0, php_auto_globals_create_get); zend_register_auto_global(zend_string_init_interned("_POST", sizeof("_POST")-1, 1), 0, php_auto_globals_create_post); zend_register_auto_global(zend_string_init_interned("_COOKIE", sizeof("_COOKIE")-1, 1), 0, php_auto_globals_create_cookie); zend_register_auto_global(zend_string_init_interned("_SERVER", sizeof("_SERVER")-1, 1), PG(auto_globals_jit), php_auto_globals_create_server); zend_register_auto_global(zend_string_init_interned("_ENV", sizeof("_ENV")-1, 1), PG(auto_globals_jit), php_auto_globals_create_env); zend_register_auto_global(zend_string_init_interned("_REQUEST", sizeof("_REQUEST")-1, 1), PG(auto_globals_jit), php_auto_globals_create_request); zend_register_auto_global(zend_string_init_interned("_FILES", sizeof("_FILES")-1, 1), 0, php_auto_globals_create_files); }
跟zend_register_auto_global
php-src-master\Zend\zend_compile.c:1649-1661
int zend_register_auto_global(zend_string *name, zend_bool jit, zend_auto_global_callback auto_global_callback) /* {{{ */ { zend_auto_global auto_global; int retval; auto_global.name = name; auto_global.auto_global_callback = auto_global_callback; auto_global.jit = jit; retval = zend_hash_add_mem(CG(auto_globals), auto_global.name, &auto_global, sizeof(zend_auto_global)) != NULL ? SUCCESS : FAILURE; return retval;
}
把对象保存CG(auto_globals)这个全局变量,正如上文,在内核中,超全局变量实际为php内核定义的全局变量。保存在CG。
而backdoor常用除EG,CG辅助宏外,其他辅助宏为:
EG();//全局变量 executor_globals 如$_GLOBALS[EG(symbol_table),地址:EG(active_symbol_table) PG();//核心变量 php_core_globals 如:$_GET $_POST .. PG(http_globals)[TRACK_VARS_*],INI信息 SG();//SAPI变量 请求数据 sapi_globals_struct 如:HTTP原始请求变量 sapi_request_info CG();//编译变量 compiler_globals 可以得到函数表,类表 EX();//当前执行数据 zend_execute_data 可以获取到当前执行的函数,类,OPCODE等 OG();//输出变量 output_globals
了解了超全局变量,全局变量,常量等,如果需要hook 自定义或本身函数,还需声明导出函数,Zend本身提供了一组宏,类型为void
// function declaration PHP_MINIT_FUNCTION(my_extension); // ... some code ... zend_module_entry my_extension_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "my_extension", my_extension_functions, PHP_MINIT(my_extension), NULL, NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 "1.0", #endif STANDARD_MODULE_PROPERTIES }; // ... some code ... // function implementation PHP_MINIT_FUNCTION(hosting_tools) { REGISTER_INI_ENTRIES(); return SUCCESS; }
在php请求过程中,需要调用HashTable来查找全局变量或者hook func,几个原型如下:
uint32_t zend_hash_num_elements(HashTable *ht); // 获取数组大小 zval* zend_hash_find(HashTable *ht, zend_string *key); // 根据 zend_string * 作为 key 查找数组 zval* zend_hash_str_find(HashTable *ht, char *str, size_t len); // 根据 char * 作为 key 查找数组 zval* zend_hash_index_find(HashTable *ht, zend_ulong h); // 查找索引 h 的数组元素 void* zend_hash_find_ptr(HashTable *ht, zend_string *key); // 同上,只是返回元素指针指向的值 void* zend_hash_str_find_ptr(HashTable *ht, char *str, size_t len); // 跟上同类 void* zend_hash_index_find_ptr(HashTable *ht, zend_ulong h); // 跟上同类 zend_bool zend_hash_exists(HashTable *ht, zend_string *key); // zend_string * key 是否存在 zend_bool zend_hash_str_exists(HashTable *ht, char *str, size_t len); // char * key 是否存在 zend_bool zend_hash_index_exists(HashTable *ht, zend_ulong h); // 索引 h 是否存在 zend_array *HASH_OF(zval *val); // 其实 HASH_OF 是一个宏,参数 value 可以是数组 `IS_ARRAY` 或者对象 `IS_OBJECT`,否则返回 NULL
而在php7.x中,HashTable API大部分被修改,列出1处对比原型如下:(具体见tks官方wiki)
- if (zend_hash_find(ht, Z_STRVAL_P(key), Z_STRLEN_P(key)+1, (void**)&zv_ptr) == SUCCESS) { //php5.x + if ((zv = zend_hash_find(ht, Z_STR_P(key))) != NULL) { //php7.x
操作总结:
接下来考虑的事情是如何把以上枯燥无趣变成一件有趣的事情。并且做出2个demo,2个更具有实战性的backdoor
1.php7.x 劫持_POST,或者_GET等,执行任意php code(临时使用标签)
2.php7.x hook phpinfo,来隐藏一句话(临时使用标签)
3.如何构造php全版本的backdoor(公共或项目backdoor思想)
4.关于第三方框架的嵌入。(持续性标签)
作为demo1,设计出php7.x backdoor,并且目标禁止相关函数,也可以执行任意php code。
以info.php 为demo,内容如下:
访问任意php页面,带有post参数micropoor_php,则执行任意代码。
菜刀配置:
填写<O>自定义code </O>
下载地址: linux php 7.x_x64_backdoor
https://drive.google.com/file/d/1WkQInZQ53PHe104MKHqFOG_-ydCZh4lN/view?usp=sharing
更多有趣的实验:
作为demo2,劫持phpinfo();,使得一句话后门为 <?php phpinfo();?>
demo3,无缝支持第三方框架。嵌入C payload,并sharing port 80.
tks:
http://php.webtutor.pl/
https://wiki.php.net/phpng-upgrading
https://www.jianshu.com/p/32fdad9be6c8
https://github.com/pangudashu/php7-internal/
附录:
php5.x x64 backdoor for linux public_x64.so Size: 26800 bytes MD5: 1C21BD02D26E9A3914A9A7248B799715 SHA1: 934D577EDBCBC6FEB93AA52DE2C195BE59269B77 CRC32: 8145921D 备注:public_x64.so仅适用x64位 php5.x for Linux 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 所有Microdoor系列仅供学习。 https://drive.google.com/file/d/1qDYcGuODAUOWF8rKGw4okQ34TyBK9vBh/view?usp=sharing php5.x x32 backdoor for linux public_x32.so Size: 26127 bytes MD5: 9BF67665FDCB30C355358624DBEB79BB SHA1: 3E996D33F18C1E34600203E8C348988449865888 CRC32: 54264834 备注:public_x32.so仅适用x32位 php5.x for Linux 的Microdoor。不适用其他版本。 为防止原文件被篡改,使用前,请对比文件MD5值。 所有Microdoor系列仅供学习。 https://drive.google.com/file/d/1hF0ZRlz7qZCrWShPNSIumIhlR-pjAx34/view?usp=sharing
Micropoor
使用Nginx、Nginx Plus抵御DDOS攻击
6 years 7 months ago
了解并抵御DDOS攻击
Win32k NULL-Pointer-Dereference Analysis by Matching the May Update
6 years 7 months ago
Microsoft shipped and fixed four win32k kernel Escalation of Privilege vulnerabilities in the May...
Leeqwind
Drupalgeddon 2 Highlights the Need for AppSecOps
6 years 7 months ago
If you aren’t aware of Drupalgeddon 2, then you’ve either been living off the grid or don’t use the popular content management system (CMS).
Facebook Messenger Malware FacexWorm Steals Passwords and Mines for Cryptocurrency
6 years 7 months ago
Facebook Messenger, a feature included within the popular social media network, has grown to become a widely-used platform for friends...
The post Facebook Messenger Malware FacexWorm Steals Passwords and Mines for Cryptocurrency appeared first on McAfee Blog.
McAfee
用Python实现数据驱动的接口自动化测试 | 岂安低调分享
6 years 8 months ago
对 CSV+Requests 的写入与读取