源海拾贝 | Pocsuite3 新功能更新

 

作者:fenix@知道创宇404实验室

Pocsuite3 是由知道创宇 404 实验室打造的一款基于 GPL v2 许可证开源的远程漏洞测试框架,自2015年开源以来(可以看看团队成员在2015年时写的关于Pocsuite开源的文章:https://paper.seebug.org/1570/),知道创宇安全研究团队持续维护至今,不断更新迭代。

Pocsuite3 是团队发展的基石,也保障了我们的 Web 安全研究能力的领先。官网:https://pocsuite.org

Kali Linux 是基于Debian的Linux发行版,设计用于数字取证和渗透测试,Kali Linux 拥有超过600个预装的渗透测试程序,包括 Armitage(一个图形化网络攻击管理工具), Nmap(一个端口和服务扫描工具), Wireshark, John the Ripper password cracker, Aircrack-ng, Burp Suite 等知名安全工具。

2021年11月,Pocsuite3通过了Debian官方的代码及合规检查,正式入选debian、ubuntu、kali linux等发行版的软件仓库,可以通过apt命令一键获取。

可从以下链接获取支持的具体发行版信息:

Debian:https://tracker.debian.org/pkg/pocsuite3

Ubuntu:https://launchpad.net/ubuntu/+source/pocsuite3

Kali:http://pkg.kali.org/pkg/pocsuite3

另一个好消息是,Pocsuite3也已经推送到Homebrew的homebrew-core(https://formulae.brew.sh/formula/pocsuite3)仓库中,在MacOS上可以通过 brew 命令一键安装。

与此同时,Pocsuite3 中又新增了很多新的功能,如下:

 

一些新特征

正向Shell

1.8.5 版本开始,Pocsuite3 支持 bind shell。shell 模式和原来的操作方式一致,也需要指定监听 ip 和端口,监听 ip 可以是本地任意 ip,也可以是远程服务器 ip。

bind shell 的实现位于 ./pocsuite3/modules/listener/bind_tcp.py,原理是实现了一个中间层,一端连接远程目标的 bind shell(如 telnet 服务、nc 启动的 shell、php 一句话等),另一端连接用户指定的监听 ip 和端口,如此一来,shell 模式可以不受网络环境限制,支持在内网使用。

目前支持三种 bind shell,使用场景如下:

bind_shell:通用方法,在 shell 模式中直接调用 return bind_shell(self, rce_func) 即可,非常便捷。针对有回显的漏洞,在 PoC 中实现一个 rce(函数名可自定义)方法,函数参数为命令输入,输出为命令输出。如果漏洞无回显,也可以通过写一句话转为有回显的。值得一提的是,用户也可以在 rce 方法中实现流量的加解密。

bind_tcp_shell:对 tcp 绑定型 shell 的原生支持,在 shell 模式中 return bind_tcp_shell(bind_shell_ip, bind_shell_port)

bind_telnet_shell:对 telnet 服务的原生支持,在 shell 模式中 return bind_telnet_shell(telnet_ip, telnet_port, username, password)

简单举几个例子,telnet 弱口令 shell 模式实现,实际只需要一行代码:

def _shell(self):
  return bind_telnet_shell(ip, port, 'iot', 'attify')

php shell 模式,在目标写入一句话,然后在 _rce 方法中实现了流量的 AES 加解密:

值得一提的是,针对有回显的漏洞,只要在 PoC 中实现一个 _rce 方法,就可轻松实现 Pocsuite3 的 _verify_attack_shell 三种模式,如下:

# 重写这个方法
def_rce(self,cmd='id'):
result=''
try:
res=requests.get(
self.url,
timeout=10
      )
logger.debug(res.text)
result=res.text
exceptExceptionase:
logger.debug(str(e))
returnresult

# 验证漏洞存在
def_verify(self):
result= {}
ifnotself._check():
returnself.parse_output(result)
flag=random_str(10)
cmd=f'echo {flag}'
res=self._rce(cmd)
ifflaginres:
result['VerifyInfo'] = {}
result['VerifyInfo']['URL'] =self.url
result['VerifyInfo'][cmd] =res
returnself.parse_output(result)

def_options(self):
o=OrderedDict()
o['cmd'] =OptString('id',description='The command to execute')
returno

# 从命令行参数获取用户命令,并输出命令执行结果
def_attack(self):
result= {}
ifnotself._check():
returnself.parse_output(result)
cmd=self.get_option('cmd')
res=self._rce(cmd)
result['VerifyInfo'] = {}
result['VerifyInfo']['URL'] =self.url
result['VerifyInfo'][cmd] =res
returnself.parse_output(result)

# 交互 shell 模式
def_shell(self):
returnbind_shell(self,'_rce')

加密的反向Shell

1.8.6 版本开始,Pocsuite3 支持传输层加密的 shell。PoC 中使用 openssl 的反弹命令(也可以用代码反弹),并且在运行时指定 --tls 选项。

可以看到,通信流量加密了:

通过关键词选取 PoC

1.8.8 版本开始,-r 选项支持指定一个或多个目录,Pocsuite3 将遍历目录然后加载所有符合条件的 PoC,用户可以用 -k 选项指定关键词对 PoC 进行筛选,如组件名称、CVE编号等。

如果我们确认了目标组件,就可以用 -k 选项找到所以对应的 PoC 对目标进行批量测试。

pcap 录包

在运行 PoC 时使用 --pcap 参数,可以将通信流量保存为 pcap 文件。

通过

wireshark 打开该文件进行流量分析。

interactsh 集成

interactsh 是知名开源软件组织 projectdiscovery 开发的一款 dnslog 工具,和 ceye 类似。Pocsuite3 从 1.8.8 版本开始集成了 interactsh,给用户更多选择。

from pocsuite3.api import Interactsh

# 支持指定自定义服务器
ish = Interactsh(token='', server='interact.sh')

# 获取子域名
url, flag = ish.build_request()
print(url, flag)
https://dES2othwBG.n27g256h94174h3wt328916sd6769i9ub.interact.sh dES2othwBG

# 模拟 dnslog 请求
requests.get(url, verify=False)

# 结果验证
ish.verify(flag)

有趣的是,该功能刚更新就被 log4j-scan(https://github.com/fullhunt/log4j-scan/blob/master/log4j-scan.py#L215)工具所使用 。

最后

如果在使用过程中遇到任何问题,或者有啥新想法,欢迎提交 issue (https://github.com/knownsec/pocsuite3/issues/new) 或者 PR (https://github.com/knownsec/pocsuite3/compare)

感谢404实验室过去,现在,未来的所有团队成员。

(完)