网络安全 文件上传漏洞-11 第十一关 Pass-11

点击第十一关,并点击选择显示源码:

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

对代码进行分析,在服务器获取到文件名时,首先使用substr函数和strrpos函数获取文件的后缀名。

  • strrpos(str,"findstr",num):用于查找一个字符串在另一个字符串中最后一次出现的位置。(num指明从哪里开始查找,默认值为0)
  • substr(string,int a ,int b) :用于从字符串中截取子字符串。(a:开始截取的位置,b:截取长度,当不指定b参数时,默认截取到最后一位字符串)

如果我们获得的后缀名在ext_arr中,那么开始文件上传,我们发现上传图片的保存路径img_path中的save_path是从get请求中得到的($_GET['save_path']):

那么我们可以考虑根据这一点进行文件上传,打开burpsuite监听,然后上传info.php木马文件

在请求头中,发现了savepath的值默认为../upload。

这时,我们使用00截断的方式进行文件上传,00 截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。

对文件路径save_path 和文件名filename进行修改,然后点击forward发送包:

发现文件成功上传,此时右键单击复制文件地址链接,并在浏览器访问:

直接回车会报错,这是因为我们需要删除链接php后的字符串:

然后再次回车,成功获取服务器php信息:

上一关(网络安全 文件上传漏洞-10 第十关 Pass-10

下一关(网络安全 文件上传漏洞-12 第十二关 Pass-12

  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值