• 命令执行及代码执行漏洞


    命令执行漏洞

    由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因。

    漏洞成因

    应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞。

    php相关函数

    • system(args) 有回显
    • passthru(args)(有回显)
    • exec(args) (回显最后一行-必须echo输出)
    • shell_exec(args) (无回显-必须输出)
    • 反引号:``
    • popen(handle,mode)(无回显)
    • proc_open(‘cmd’,‘flag’,‘flag’)(无回显)
    • $process = proc_open(‘dir’,$des,$pipes);
    • echo stream_get_contents($pipes[1]); 

    漏洞危害

    • 继承Web服务程序的权限去执行系统命令或读写文件
    • 进一步内网渗透
    • 反弹shell
    • 控制整个网站

    命令拼接符

    windows

    1
    2
    3
    4
    1. “|”:直接执行后面的语句。
    2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
    3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
    4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

     linux

    1
    2
    3
    4
    5
    1. “;”:执行完前面的语句再执行后面的语句。
    2. “|”:显示后面语句的执行结果。
    3. “||”:当前面的语句执行出错时,执行后面的语句。
    4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
    5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

      

    代码执行漏洞

    PHP代码执行漏洞可以将代码注入到应用中,最终到webserver去执行。该漏洞主要存在于eval()、assert()、preg_replace()、call_user_func()、array_map()以及动态函数中。

    漏洞成因

    在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用eval函数(PHP函数)去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。

    相关函数

    eval()

    将输入的字符串当做PHP代码执行

    assert()

    会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动

    call_user_func()

    把第一参数作为回调函数

    call_user_func_array()

    调用回到函数,并把第一个数组参数作为回到函数的参数

    array_map()

    为数组的每个元素应用回调函数

    还有一些危险函数

    preg_replace()、str_replace()、call_user_func()这些函数跟eval、exec等函数地特性相同,都属于危险函数

    preg_replace(mixed pattern,mixed replacement,mixed subject [,int limit]):此函数可以用来执行一个正则表达式的搜索和替换

    $pattern:正则表达式匹配的内容

    $replacement:用于替换的字符串或字符串数组

    $subject:要搜索替换的目标字符串或字符串数组

    当$pattern存在/e模式修正符,允许代码执行

    漏洞危害

    • 执行任意代码
    • 向网站写WebShell
    • 控制整个网站甚至服务器
  • 相关阅读:
    websocket协议解决消息发送问题 Could not decode a text frame as UTF-8.
    成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'minimatch'
    FastDFS客户端与自定义文件存储系统
    fastdfs 中client.conf 文件
    centos 中 redis 的安装
    redis安装成功后get: command not found
    Shell基础知识(二)
    Shell基础知识(一)
    binary search模板总结
    配置远程jupyter notebook
  • 原文地址:https://www.cnblogs.com/tac2664/p/14299926.html
Copyright © 2020-2023  润新知