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 
  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/ht22ht22/p/11660627.html
Copyright © 2011-2022 走看看