CTFHUB之文件上传

无验证

先搞一个一句话木马
因为这里是无验证,所以直接上传php
在这里插入图片描述
连接蚁剑
在这里插入图片描述
在这里插入图片描述

前端验证

在这里插入图片描述
只能上传图片
所以上传图片抓包
在这里插入图片描述
把jpg改为php
在这里插入图片描述
再连接就好

文件头检查

法一:
上传一句话木马jpg格式
在这里插入图片描述
然后我上传一张图片png
在这里插入图片描述
在这里插入图片描述
把除了文件头其他的图片内容全删了,然后添加一句话木马,然后改.png为.php在这里插入图片描述
在这里插入图片描述
注意那个红色的PNG不能删了
不然文件头检查就过不了
连接就好了

法二:
开始,上传一个.php后缀的文件,提交,alert()弹出一个窗口,只允许jpg,png,gif后缀提交,然后burpsuite抓包,把Content

MIME验证

方法一:
上传php
在这里插入图片描述
改成jpg
在这里插入图片描述
抓包修改
在这里插入图片描述
连接

方法二:
也可以上传.PHP文件然后修改content-cype
在这里插入图片描述
改成image/jpeg,然后发送,在使用蚁剑连接

00截断

上传jpg
在这里插入图片描述
没有出现上传文件的路径地址。
url地址栏出现了?road=/var/www/htm/ 没有返回文件的路径地址,多半是有临时文件名的存在,这就需要00截断,00截断的主要目的就是为了得到上传文件的路径地址,从而可以用蚁剑连接。

if (!empty($_POST['submit'])) {
    
    
    $name = basename($_FILES['file']['name']);
    $info = pathinfo($name);
    $ext = $info['extension'];                //首先取到上传文件的扩展名$ext
    $whitelist = array("jpg", "png", "gif");   //将扩展名与白名单进行匹配,为jpg、png或gif才能通过第一次过滤
    if (in_array($ext, $whitelist)) {
    
    
        $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;   //扩展名匹配之后,为上传的文件构造了一个新的存储路径$des
        if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
    
    
            echo "<script>alert('上传成功')</script>";
        } else {
    
    
            echo "<script>alert('上传失败')</script>";
        }
    } else {
    
    
        echo "文件类型不匹配";
    }
}

move_uploaded_file
这个函数就是把上传文件放到d e s 的 路 径 上 并 且 改 了 文 件 名 , 而 des的路径上并且改了文件名,而des中的随机数,当前时间等无法确定,那么,在$_GET[‘road’]后面进行00截断payload:POST /?road=/var/www/html/upload/999.php%00 HTTP/1.1重新上传,这样,上传文件就被保存到了upload/999.php下。
999.jpg不要改 不然会显示文件类型不对
在这里插入图片描述
直接去连接就可以了

双写后缀

我上传一个1.php%00.jpg
在这里插入图片描述
发现把php给搞没了
上传1.php.php%00.jpg
在这里插入图片描述
php 双写后缀后 pphph
于是我们用1.pphphp来绕过
在这里插入图片描述
然后去连接就行了
下面我们看一下源码
在这里插入图片描述
str_ireplace() 函数替换字符串中的一些字符(不区分大小写)
这道题会对上传文件的后缀进行检测,如果是array数组中的后缀,则会替换为空。

htaccess

htaccess文件是什么
htaccess文件是Apache服务器中的一个配置文件,他负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向,自定义404错误页面,改变文件扩展名,允许或组织特定的用户或者,目录的访问,禁止目录列表,配置默认文档等功能。

法一
根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
在这里插入图片描述
意思是将文件名中带有 3 的文件当作php文件解析。
在这里插入图片描述
然后上传一句话,文件名为 3.jpg ,之后会上传成功。
http://challenge-ca10a6f74c692568.sandbox.ctfhub.com:10080/upload/3.jpg
我的蚁剑搞这个的时候出现了问题,就到这里吧

法二:
据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
AddType application/x-httpd-php .jpg
在这里插入图片描述
上传 htacces文件 (将.jpg后缀的文件当作php文件解析)
在这里插入图片描述
去连接就行了

猜你喜欢

转载自blog.csdn.net/qq_51558360/article/details/113585792