请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 116|回复: 0

创建进程类的函数的安全规范

[复制链接]

70

主题

70

帖子

232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
232
发表于 2021-9-10 14:33:10 | 显示全部楼层 |阅读模式
system、WinExec、CreateProcess、ShellExecute等启动进程类的函数,需要严格检查其参数。

启动进程需要加上双引号,错误例子:

  1. // Bad
  2. WinExec("D:\\program files\\my folder\\foobar.exe", SW_SHOW);
复制代码

当存在   D:\program files\my.exe  的时候,my.exe会被启动。而foobar.exe不会启动。

  1. // Good
  2. WinExec(""D:\\program files\\my folder\\foobar.exe"", SW_SHOW);
复制代码

另外,如果启动时从用户输入、环境变量读取组合命令行时,还需要注意是否可能存在命令注入。

  1. // Bad
  2. std::string cmdline = "calc ";
  3. cmdline += user_input;
  4. system(cmdline.c_str());
复制代码

比如,当用户输入   1+1 && ls  时,执行的实际上是calc 1+1和ls 两个命令,导致命令注入。

需要检查用户输入是否含有非法数据。

  1. // Good
  2. std::string cmdline = "ls ";
  3. cmdline += user_input;

  4. if(cmdline.find_first_not_of("1234567890.+-*/e ") == std::string::npos)
  5.   system(cmdline.c_str());
  6. else
  7.   warning(...);
复制代码


关联漏洞:
  1.    高风险-代码执行

  2.    高风险-权限提升
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2022-1-17 09:02 , Processed in 0.066954 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表