zoukankan      html  css  js  c++  java
  • 安全性测试入门(二):Command Injection命令行注入攻击和防御

    安全性测试入门(二):Command Injection命令行注入攻击和防御

    本篇继续对于安全性测试话题,结合DVWA进行研习。

    Command Injection:命令注入攻击。

     

    1. Command Injection命令注入

    命令注入是通过在应用中执行宿主操作系统的命令,来达到破坏目的的一种攻击方式。如果我们的应用程序将不安全的用户输入传递给了系统命令解析器(shell),那么命令攻击就有可能发生。

    通常来说,由应用程序传递操作系统命令会赋有和应用一样的权限,所以如果没有合理防御机制会给系统带来很大危害。命令注入攻击漏洞是PHP应用程序中常见的漏洞之一。

    命令注入和代码注入不同,代码注入的目的在于将外部代码注入应用程序本身,并随程序执行;命令攻击的对象是服务器的宿主机。

    DVWA的相应模块中,有如下功能:应用提供了一个用来ping对象主机的功能。正常情况下,输入IP地址,返回命令结果。

    在DVWA最低防御级别下,尝试进行攻击。

    由于在windows cmd和linux shell条件下,都可以通过&&来串行执行命令,我们附上dir命令执行后:

    可以看到dir命令被执行,并且打印出了其结果。

    如果我们用更复杂的命令附在以上命令之后,基本都可以执行,包括创建删除文件等等,可以对宿主系统造成非常大的危害。

    2. 防御机制

     分别对比DVWA4个安全级别的后台核心代码:

    Low:

    代码使用shell_exec将用户输入执行ping命令,基本没有任何防御。

    Medium:

    使用黑名单机制,替换掉如“&&”和“;”这样的命令符号。但是这样简单的黑名单是很容易绕过的,比如“|”管道符就没有屏蔽。

    High:

    完善了黑名单机制,筛除了更多字符,但仍有可能绕开。

    Impossible:

    使用白名单机制替换掉黑名单,将用户输入的字符串重组为数组,依次遍历数组内元素,删除其中所有的非数字和“.”。这样就达到了防御命令注入的目的。

     

    ============================================ PS ============================================
    • 软件测试技术交流:【939885326 
  • 相关阅读:
    react-router JS 控制路由跳转(转载)
    vue 将值存储到vuex 报错问题
    封装GetQueryString()方法来获取URL的value值(转载)
    vue 里面的watch 选项详解
    谷歌地图api 开发 (转载)
    es6 ...展开运算符
    关于localStorage 应用总结
    js 刷新当前页面会弹出提示框怎样将这个提示框去掉
    深入浅析JavaScript的API设计原则(转载)
    jQuery mouseover与mouseenter,mouseout与mouseleave的区别
  • 原文地址:https://www.cnblogs.com/ht22ht22/p/11660627.html
Copyright © 2011-2022 走看看