CVE-2017-17215 漏洞分析

查找漏洞点

使用Ghidra打开upnp文件后,搜索system函数
在这里插入图片描述发现除了最后一个system是带参数的,别的都是已经定义好的命令,对此system进行分析

漏洞点分析

int FUN_0040749c(int param_1)

{
  int iVar1;
  int local_418;
  int local_414;
  char acStack_410 [1028];
  
  iVar1 = ATP_XML_GetChildNodeByName(*(undefined4 *)(param_1 + 0x2c),"NewDownloadURL",0,&local_418 );
  if (((iVar1 == 0) && (local_418 != 0)) &&
     (iVar1 = ATP_XML_GetChildNodeByName
                        (*(undefined4 *)(param_1 + 0x2c),"NewStatusURL",0,&local_414), iVar1 == 0) )
  {
    if (local_414 != 0) {
      snprintf(acStack_410,0x400,"upg -g -U %s -t \'1 Firmware Upgrade Image\' -c upnp -r %s -d -b" ,
               local_418,local_414);
      system(acStack_410);
    }
  }
  return iVar1;

system的参数是acStack_410acStack_410是通过snprintf函数将local_418local_414拼接在一起得到,最大长度是0x400,在这里如果我们能使得local_418local_414中的一个参数可控,可以通过;来执行多命令,如system(ls;ifconfig),所以我们需要分析local_418local_414

local_418通过ATP_XML_GetChildNodeByName函数从param_1中获取NewDownloadURL的值,local_414通过ATP_XML_GetChildNodeByName函数从param_1中获取NewStatusURL的值

进一步分析param_1的来源,待分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值