渗透之路基础 -- 命令执行漏洞

漏洞原理

当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

​ 常见调用的一些系统命令的函数,如PHP中的system(),exec(),shell(),passthru(),popen(),proc_popen()等。

漏洞产生

  • 应用调用执行系统命令的函数

  • 存在系统命令的参数可以被用户输入并且拼接到参数中执行

  • 未对用户输入进行过滤或过滤不严格

漏洞分类

  1. 代码层过滤措施不完善

    Web应用中通过system函数来调用

  2. 系统的漏洞造成命令注入

    bash破壳漏洞(CVE-2014-6271)

  3. 调用的第三方中间件或组件中存在的漏洞

    如 WordPress 中用来处理图片的ImageMagick组件

    Java中的命令执行漏洞(struts2/ElasticsearchGroovy等)

    ThinkPHP命令执行

漏洞危害

  1. 利用Web服务器的权限去执行系统命令或读写文件
  2. 反弹Shell
  3. 控制整个网站甚至控制服务器
  4. 进一步内网渗透
  5. 等等

PHP中常见的漏洞代码

  1. system("$arg"); // 直接输入即可

  2. system("/bin/prog $arg"); // 直接输入;ls

  3. system("/bin/prog -p $arg"); // 和2一样

  4. system("/bin/prog --p=\"$arg\""); // 可以输入";ls;"

  5. system("/bin/prog --p='$arg'"); // 可以输入';ls;'

在Linux上,上面的 ; 也可以用 ||| 代替

; 前面的执行完执行后面的

| 是管道符,显示后面的执行结果

|| 当前面的执行出错时执行后面的

在Windows上,不能用 ; 可以用 &&&||| 代替

A&B 前面的语句为假则直接执行后面的

A&&B A执行成功,然后才会执行B

A|B A的输出,作为B的输入

A||B A执行失败,然后才会执行B

漏洞防御

  1. 尽量少用执行命令的函数或者直接禁用
  2. 参数值尽量使用引号包括
  3. 在使用动态函数之前,确保使用的函数是指定的函数之一
  4. 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义
posted @ 2019-09-16 19:49  r0ckysec  阅读(210)  评论(0编辑  收藏  举报