来一题 cisp-pte 中的文件上传题目,需要爆破猜解上传文件的路径
打开题目,如下界面
给出了文件上传部分的代码
$filename = $files["name"];
$randnum = rand(1, 99999);
$fullpath = '/' . md5($filename.$randnum).".".substr($filename,strripos($filename,'.') + 1);
通过代码可知,上传的文件名会经过 md5 加密,加密方式为当前上传的文件名加 1-99999 的随机数,后接一个。文件后缀。
尝试上传文件试试,上传的文件会过滤 eval 等关键词,可以用大写绕过,content-type 需要换成图片格式。
上传成功后,但是看不到文件上传后的路径。
根据上传的代码我们可以先上传图片,上传的图片进行 md5 加密,md5 (1.php1).php,图片上传后,由于不知道上传文件的路径,所以需要猜解上传后的文件名,猜解同样是采用 md5 (1.php1).php 的方式。
下面看看具体操作:
1、先将包放到 intruder,填写一个 x-forwarded-for 参数,设置内容为 127.0.0.1,对 1 参数进行遍历。
2、接下来设置 payload 选项
Payload type
From:1
To:200
Step:1
1-99999 中选 1-200 进行遍历
还需要设置两个值,payload processing,在遍历每个值时,添加 1.php 前缀,也就是上传的文件名,然后对其内容(1.php [1-200])进行 md5 加密。
3、上传成功后,大小长度都一样,此时还不知道上传后的文件名是什么,因为 1.php [1-200] 的 md5 值是一样的,所以我们再爆破一次,这次直接请求文件名,/md5 (1.php [1-200]),能成功访问的就是正确的文件名。
4、猜解上传后的文件名,直接访问 md5 加密后的内容。
Payload 设置和上传文件一致。
通过 200 的状态码区分,可以知道上传的文件名如下图中所示。
上传成功后,通过蚁剑连接。
补充:2023-07-21
上述方法在文件上传处有点啰嗦,此处不需要如此繁琐的设置 payload,下面给出更简单的解法。
1、抓包
设置 payload,直接发包即可,此处无需设置别的 payload,null payload 表示重复发送请求。
2、接下来开始爆破路径
随意请求一个路径,保留.php
payload 设置如下:
2000 个 payload 可以上传成功多个文件