首页
社区
课程
招聘
[原创]CVE-2023-33625分析
发表于: 2023-7-31 10:07 13116

[原创]CVE-2023-33625分析

2023-7-31 10:07
13116

D-Link DIR-600 硬件版本 B5、固件版本 2.18 被发现包含通过 lxmldbc_system() 函数中的 ST 参数的命令注入漏洞。

下载链接:

可以直接用binwalk提取文件系统:

描述中漏洞是在xmldbc_system()函数当中,先用grep命令找一下哪些文件中有xmldbc_system这个字符串:

结果:

第一个就是要找的二进制文件,一般路由器等等固件的web都是cgi文件,所以这个是最有可能的。用IDA打开,搜索xmldbc_system()这个函数:

直接复制过去后就交给system函数执行了。

查看一下是哪些函数调用了xmldbc_system()函数:

首先是pigwidgeoncgi_main函数:

传入的是硬编码的字符串,不是这里。

接下来是pigwidgeoncgi_main函数:

可以看到所有的都是没进行过滤的,都是直接拼接的字符串,因此存在命令注入。但是还需要a1等于2,找一下主程序,其伪代码如下:

可以知道a1指的是参数的个数,也就是通过命令行的方式传一个参数"ssdcgi"就可以了。

使用qemu模拟并用gdb调试,使用qemu模拟如下:

设置GDB

连上以后在0x40E408处下断点,然后:

设置a0寄存器的值的原因是因为在ssdpcgi_main函数中会检查参数个数,必须要等于2,所以设置a0为2过检查。

然后在0x40E5BC处下断点,这里是查看一下是否会进入到service这个分支,因为漏洞是在这个分支的:

执行后执行到了0x40E5BC处,说明参数设置生效了,确实到了这个地方。然后在0x413F2C处下断点,这里是调用system函数的指令,主要是为了查看传给system函数的参数是否是拼接过后的命令,设置完断点后直接执行:

s0寄存器的中的值是拼接上ls命令后的字符串。

直接使用fat或者fap模拟。

这个漏洞与CVE-2019-20215挺像的,感觉是一模一样的,因此CVE-2019-20215的poc修改一下就能用,poc:

d24K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6F1j5h3W2Z5M7$3W2F1i4K6u0r3d9h3!0f1i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2K9h3&6Q4x3V1k6p5i4K6u0V1e0r3W2F1K9#2)9J5c8V1c8u0f1W2)9J5k6o6j5H3x3q4)9J5c8X3y4E0k6q4)9J5y4e0t1H3K9h3&6B7k6h3y4@1K9h3!0F1i4K6u0r3f1V1g2m8c8p5#2q4i4K6u0W2L8h3b7`.
0f1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0k6h3c8A6N6h3#2Q4x3X3g2U0L8$3#2Q4x3V1k6Q4y4o6m8K6x3h3E0J5x3e0m8K6i4K6u0r3k6q4)9J5k6r3I4A6L8X3E0Q4x3X3c8V1K9i4u0Q4x3X3b7^5y4e0W2Q4x3X3c8#2L8X3q4#2N6r3S2W2L8Y4c8A6j5$3q4@1k6h3c8Q4x3X3c8J5j5$3g2Q4x3X3c8A6L8W2)9J5k6s2y4K6k6s2m8U0k6$3W2Q4x3X3c8Z5N6s2c8H3i4K6u0V1M7%4c8Q4x3X3c8U0N6X3g2Q4x3X3b7J5x3o6p5&6i4K6u0V1x3U0l9J5x3e0g2Q4x3X3c8W2L8W2)9J5k6o6u0W2y4K6V1&6j5h3y4T1z5r3p5%4x3H3`.`.

https://f33K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3c8D9K9h3&6C8N6s2N6Q4x3X3g2U0L8$3#2Q4x3X3g2@1N6H3`.`./techsupport/download.ashx?file=3394
https://f33K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3c8D9K9h3&6C8N6s2N6Q4x3X3g2U0L8$3#2Q4x3X3g2@1N6H3`.`./techsupport/download.ashx?file=3394
binwalk -Me DIR-600_Bx_FW218WWb01.bin
binwalk -Me DIR-600_Bx_FW218WWb01.bin
grep -rn "./" -e xmldbc_system
grep -rn "./" -e xmldbc_system
int __cdecl main(int argc, const char **argv, const char **envp)
{
  const char *v3; // $s0
  char *v6; // $v0
  int (*v8)(); // $t9
  int v9; // $a0
 
  v3 = *argv;
  v6 = strrchr(*argv, 47);
  if ( v6 )
    v3 = v6 + 1;
  ......
  if ( !strcmp(v3, "ssdpcgi") )
  {
    v8 = (int (*)())ssdpcgi_main;
    v9 = argc;
    return ((int (__fastcall *)(_DWORD, _DWORD, _DWORD))v8)(v9, argv, envp);
  }
  ......
  printf("CGI.BIN, unknown command %s\n", v3);
  return 1;
}
int __cdecl main(int argc, const char **argv, const char **envp)
{
  const char *v3; // $s0
  char *v6; // $v0
  int (*v8)(); // $t9
  int v9; // $a0
 
  v3 = *argv;
  v6 = strrchr(*argv, 47);
  if ( v6 )
    v3 = v6 + 1;
  ......
  if ( !strcmp(v3, "ssdpcgi") )
  {
    v8 = (int (*)())ssdpcgi_main;
    v9 = argc;
    return ((int (__fastcall *)(_DWORD, _DWORD, _DWORD))v8)(v9, argv, envp);
  }
  ......
  printf("CGI.BIN, unknown command %s\n", v3);

[招生]系统0day安全-IOT设备漏洞挖掘(第6期)!

最后于 2023-7-31 10:41 被mangovo编辑 ,原因: 未选择话题
收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 14813
活跃值: (17984)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-7-31 10:41
0
游客
登录 | 注册 方可回帖
返回