这个移动硬盘盒买的是一个比较便宜的产品,因此功能比较简单,与电脑的USB接口连接的时候就是正常的移动硬盘,当USB口连到充电器电源时,插上网线就能实现远程访问的功能。这里的远程访问分为两部分,局域网访问
和互联网访问
。
远程访问是通过客户端完成,在硬盘联网并自动获取IP地址后,打开客户端输入SN即可自动连接。当客户端与硬盘处于同一局域网时,将切换到局域网模式,其通信的端口和方式等都会发生变化。通过客户端,除了可以访问文件,还可以进行一些功能性的设置,如打开SAMBA、打开BT下载功能等。
端口扫描
在尝试做一些有趣的事情之前,先惯例扫描一下目标开放的端口。
通过nmap识别出来的服务可以大致知道各个端口的用途。那么一些服务为unknown
的端口就很可能是其信令的通信端口,后面的尝试中可以多多留意一下。
抓包&分析
为了分析其信令,必然需要进行抓包。使用Wireshark进行抓包,对数据包进行统计,可以看到目标IP 192.168.1.8 的通信中几乎全部都是在13111
这个端口上。对该端口的TCP连接进行分析,以打开根目录这个动作为例,其TCP流如下:
这里其实很明显看得出来,信令就是JSON格式的,其中header
部分中的cmd
就是信令的类型,101
显然就代表了“列出目录”,那其他动作可以逐一抓包分析获得。
值得注意的是,图中信令的开头有四个点,查看数据包可以看到是4个Hex Bytes,为 0xa3 0x00 0x00 0x00
,而换一个目录打开的时候就会变化,比如打开根目录的文件夹 1
的时候,它就变成了0xa6 0x00 0x00 0x00
:
这里推测可能是校验,但是试了一些操作后发现,只有第一位会变化,后面三位都是0x00 0x00 0x00
的状态,再仔细观察,以0xa6
开头的信令为例,其Data
部分长度为170 bytes,除去头部 4 bytes,剩余的 166 bytes 转换成Hex即为0xa6
。
此处其他信令的分析不再赘述,如复制文件、删除文件等。
让我们开始吧!
既然已经知道了信令构成,那让我们试着操控信令,做一些客户端做不到(不让做)的事情。
列出任意目录
首先,列出目录功能中,path
参数中的值是一个相对路径的形式,那如果加上 ../
会出现什么呢?拿出Python,写一个发送TCP数据的代码,发送内容中的path
就填写NewDisk-A\/..\/
,返回上一级目录,看看它返回了什么:
返回了一个列表,只有一个文件夹叫..
。虽然没啥信息,但证明了信令是有效的。那再试试../../
:
WOW!成功了!返回了一个很大的 JSON 串,包含了很多文件和文件夹名称。这样理论上来说我们就可以浏览系统中任意的文件夹里的文件了。
除了列出目录,还可以通过在路径上加../
来复制文件、删除文件,操纵整个系统里的文件(只要有权限)
看看80端口
虽然能替换系统文件如rc.local
来更改自启的程序从而让它运行某些指定进程,但是这样第一很麻烦,第二是万一改失败了可能系统都起不来更加麻烦。所以想能不能通过Web来搞一搞命令注入或者远程执行。
通过浏览器访问它的80端口,得到这样一个“固件升级”的界面:
点进去是上传文件:
尝试了半天都没找到什么突破点,但是突然看到这个页面的文件名:a_fu2.shtml
。
SHTML
格式的文件是可以被服务器解析的,支持include
、echo
、exec
等指令,在返回客户端前会由服务端先处理其中的一些指令后再显示出来。
正好可以利用这一点,制作一个含有exec
命令执行的shtml页面,来开启一些功能,如反弹shell,更方便的去进行研究。
编写一个HTML文档,body中插入exec
:
<body>
<h1>Hello World</h1>
<!--#exec cmd="telnetd -l /bin/ash"-->
</body>
执行该SHTML后,系统会开启一个无鉴权的telnet
服务。
将这个文件通过客户端上传到硬盘根目录,再构造信令移动到www
目录下(和a_fu2.shtml同级)。
当试图访问的时候,发现竟然报了404 Not Found
???
想了一想,可能是系统中有设置路由(最终证实的确如此),那我删除掉一个文件,再上传一个同名文件总行了吧!
于是看了下这个文件夹里的内容,有个stm.shtml
,是升级boot分区的,反正用不到,先删了再说!
将自己编写的那个文件重命名,删除原有的stm.shtml
文件,用信令跨目录复制过去(具体细节和列出文件部分类似,不过多赘述)。
浏览器访问,终于成功了:
这时候用telnet客户端连接,成功进入!
getShell之后,进去随便看了看,似乎是基于OpenWRT构建的系统,应该是可以安装OpenWRT的软件,后面应该还有其他的可玩性吧。
补充
telnet进去后查看配置文件,发现了关于为什么 自定义的文件名404 的情况,在httpd.conf文件中对用到的资源文件进行了路由设置:
总结
由于时间限制,就没有继续对系统进行探究了,也算是一次简单的渗透,虽然需要登录后的session才能进行接下来的操作,但是通过监控客户端行为,发现Windows客户端会将Session存储在C:\programdata
文件夹里,获取起来还是相对容易的。
shtml
比较冷门,似乎现在都没人用这个技术了,但是它能在服务端执行命令这个功能还是挺强大的。其他支持的命令可以参考这里:SHTML 教程 – Areas – 博客园
来源:freebuf.com 2020-03-09 09:05:13 by: MactavishMeng
请登录后发表评论
注册