web安全学习笔记(六) 命令执行漏洞&&文件上传漏洞

0.前言

上文讲到了如何对OWASPBWA靶机的低、中安全级别下的文件上传漏洞的利用。本文讲讲述如何绕过高安全级别下的文件上传限制,以及如何利用命令执行漏洞。

1. 命令执行漏洞

部分web应用程序会调用底层的操作系统命令,例如,一些网站网站会提供一些ping命令的接口,用来测试网站在各地的ping的响应速度:
在这里插入图片描述
在我们搭建的靶机中,也存在类似的功能:
在这里插入图片描述
点击查看源码可以得知,当用户在命令框中输入了某个地址的IP的时候,会调用系统的ping命令来测试相应速度:

<?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 );
        echo '<pre>'.$cmd.'</pre>';     
    } else { 
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';
    }
}
?>

当输入baidu.com的时候,那么baidu.com的参数会传给$target, 此时,判断操作系统,执行“ping -c 3 baidu.com”。这里就非常像SQL注入了,在SQL注入中,虽然我们不能修改已经写死的SELECT XXX FROM XXX, 但是可以通过修改后面的参数,实现一些其他目的。
在命令执行漏洞中,也是同样的。操作系统的指令,往往可以用&& 连结两条指令。若我们在命令框里输入,baidu.com && ls:
在这里插入图片描述
那么操作系统中执行的就为:

ping -c 3 baidu.com && ls

这样的漏洞是十分危险的,比如我们还可以查看/etc/passwd下的文件:
在这里插入图片描述
当然,除了&&可以连接两条命令之外,&, |, || 符号都是可以连接两条命令的,不同的是,符号不同,被连接的命令执行过程不同:

command A && command B #先执行A命令再执行B命令
command A & command B  #先执行B命令再执行A命令
command A || command B #若A命令执行失败,执行B命令
command A | command B  #只执行B命令

2.图片木马

在靶机高安全级别下,查看文件上传页面的源代码:

File Upload Source
<?php
if (isset($_POST['Upload'])) {

            $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
            $target_path = $target_path . basename($_FILES['uploaded']['name']);
            $uploaded_name = $_FILES['uploaded']['name'];
            $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
            $uploaded_size = $_FILES['uploaded']['size'];

            if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){


                if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
                    
                    echo '<pre>';
                    echo 'Your image was not uploaded.';
                    echo '</pre>';
                
                  } else {
                
                    echo '<pre>';
                    echo $target_path . ' succesfully uploaded!';
                    echo '</pre>';
                    
                    }
            }
            
            else{
                echo '<pre>';
                echo 'Your image was not uploaded.';
                echo '</pre>';
            }
        }
?>

可以发现,在高安全级别下,代码不仅仅对文件名做了限制(最后一个.的后面应该为jpg或jpeg), 并且用函数move_uploaded_file()对上传文件的合法性做了判断。
因此,为了绕过这一设定,我们可以构建一个图片木马。
首先,讲文件的命名改为shell.jpg,再使用二进制编辑文件进行编辑,插入jpg文件头特征码:ff d8 ff
在这里插入图片描述
此时上传文件,发现文件上传成功。
在这里插入图片描述
虽然成功将恶意代码上传,但是是否可以达到目的,还需要从以下的角度考虑:

3.web容器解析漏洞

3.1 IIS解析漏洞

在IIS 6.0版本中,存在两种解析漏洞
1.当建立*.asa或 .asp 文件夹下,目录下的任意文件文件都会被当作asp文件进行解析。也就是说,如果我们可以讲shell.jpg上传到asp文件夹下,就可以被解析执行,那么我们也就可以通过蚁剑进行连接了。
2.当文件名为*.asp;xxx.jpg时,IIS6.0 同样会以asp脚本来执行,也就是说,如果我们发现服务器的web容器为IIS6.0时,重命名脚本为xxx.asp;xxx.jpg时,上传成功后,恶意脚本就会被解析,拿到控制权了。

3.2 Apache解析漏洞

在Apache 1.X 何 Apache 2.x 中同样存在解析漏洞。但是与IIS 6.0的解析漏洞不同,Apache在解析文件时,会按照从后往前进行识别。比如我们在windows环境下,看到一个文件的后缀为xxx.txt,那么就认为他是一个文本文件,但是在Apache中,Apache如果发现最后的后缀不认识,那么就会从后往前解析。例如文件shell.php.xxx Apache不认识后缀xxx,那么就会当作php文件进行解析。具体的Apache认识哪些后缀,linux环境下可以在/etc/mime.types查看
在这里插入图片描述

4.文件上传漏洞的其他思路

我们前面提到,部分服务器存在命令执行漏洞。如果我们可以通过文件上传漏洞,对文件进行上传,又存在命令执行漏洞,那么只要我们知道了文件上传的路径,就可以先绕过判断进行上传,并且利用命令执行漏洞,修改文件后缀为.php,那么就可以解析并且连接了。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值