标题:腾达Tend 路由器后门剖析刘峥浩.docx 7页主页 > 聚微商 >

腾达Tend 路由器后门剖析刘峥浩.docx 7页

admin2020-04-08 03:07:2650人围观

  腾达Tenda 路由器后门剖析

  不时有人认为D-Link是唯一的将在其产品中放置后门供应商,其实这里还有一个供应商也异样在产品中放置了后门,而且可以应用单个UDP数据包就弄定。她——就是腾达。

  腾达W302R无线路由器的最新固件解压后,我末尾寻觅基于GoAheadWeb效劳器指向的/bin/httpd,腾达做了很多特别的修改:

  进入HTTP接收回路前,调用发生MfgThread的功用作为一个独自的线程的线程主函数InitMfgTask。

  Hmmm…InitMfgTask 和 MfgThread? 也容许能是manufacturing tasks(mfg有能够是MANUFACTURING的缩写,便利他们在研发过程当中爆发各类不能访问路由器办理功用时留下的维修接口,估计正式产品上市 的时分遗忘去掉落了)

  起首MfgThread(Mfg过程)创立UDP socket且绑定在7329端口上

  然后线程进入一个recvfrom轮回,从插座上浏览最多128字节。估计每个回收到的UDP数据包,至少有14个字节的长度:

  现在最成心思的局部,回收到的UDP数据包,然后解析这个代码块:

  转C代码表现

  memset(rx_magic_string, 0, 0x80); memset(command_byte, 0, 0x80); memset(command_arg, 0, 0x80); memcpy(rx_magic_string, rx_buf, 9); command_byte[0]=rx_buf[11]; memcpy(command_arg, rx_buf+12, rx_size-12); // If magic string doesn't match, stop processing this packet and wait for another packet if(strcmp(rx_magic_string, "w302r_mfg") !=0) goto outer_receive_loop;

  我们可以看到,该线程被认为一个以下的数据结构包:

  struct command_packet_t { char magic[10]; // 9 byte magic string ("w302r_mfg"), plus a NULL terminating byte char command_byte; char command_arg[117]; };

  只需回收到的数据包末尾字符串“w302r_mfg”,代码然后比拟三个ASCII字符指定的敕令字节对(’1′,’X',’E'):

  为了便利,我曾经转换残剩反汇编(至少主要位)后的C代码:

  switch(command_byte) { case 'e': strcpy(tx_buf, "w302r_mfg"); tx_size=9; break; case '1': if(strstr(command_arg, "iwpriv") !=NULL) tx_size=call_shell(command_arg, tx_buf, 0x800); else strcpy(tx_buf, "000000"); tx_size=strlen(tx_buf); break; case 'x': tx_size=call_shell(command_arg, tx_buf, 0x800); break; default: goto outer_receive_loop; } sendto(client_socket, tx_buf, tx_size, client_sock_addr, 16); goto outer_receive_loop;

  以下操尴尬刁难应的三个接受的敕令字节:

  'E'-照顾与预先定义的字符串,平日是ping测试

  '1' - 蓄意让用户运转iwpriv敕令

  'X'-许可你用root权限运转任何敕令

  假设被指定为’X'的敕令字节敕令字节后的数据包(称为在上述代码command_arg),其他的被传递到call_shell经过POPEN,履行敕令:

上一篇:第1902章 梅花老道

下一篇:没有了