Web题目已经提示是文件包含 打开网页 是php代码 里边post接受两个参数 分别是cf和field 既然是文件包含那就要有文件能去被包含
使用dirsearch对网页进行扫描 发现.listing网页 于是进行访问 里边有提示index.php和you_can_seeeeeeee_me.php 在进行访问后者 发现是phpinfo 只是文件名改了一下
在进行文件包含 首先尝试cf的post传值 cf=../../../../../var/www/html/you_can_seeeeeeee_me.php 发现能包含phpinfo网页 然后就没有思路了......
去看了一下phpinfo 试试能不能找到一些有用的信息 ctrl+g搜索session 发现了存储临时session的路径
并且
session.upload_progress.enabled = on
session.upload_progress.cleanup = on
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"
<session.use_strict_mode=off>
于是决定尝试session.upload_progress文件包含 我们可以利用session.upload_progress将恶意语句写入session文件 从而包含session文件 前提是要知道session文件的存放位置 但是我们目前已经找到了路径
因为session.use_strict_mode默认值为0 此时用户是可以自己定义Session ID的 我们可以在bp里抓包 在请求头中加入 Cookie: PHPSESSID=flag 这样我们生成的临时session文件的名字就叫做sess_flag 此时session文件里就是我们的恶意代码 我们在利用文件包含漏洞去包含该文件(被包含的文件都会被当作php文件来执行)
但是因为session文件是临时的 会被清除 那么我们就要用到竞争来不断的去上传带有恶意代码的session文件 再用bp不停的去包含这个session文件 一旦服务器来不及删除 恶意代码就会被执行 我们就能得到想要的结果
下一步就是构造恶意代码了 再phpinfo里ctrl+g搜索disable_function 发现许多函数都被禁用掉了如system 这样我们就没法探测 仔细一看 发现scandir这个函数没有被禁 可以探测目录和文件 构造php代码
<?php var_dump(scandir("/etc")); ?>
再不断地去包含 最后探测到flag文件 再更改php代码为 <?php var_dump(file_get_contents("flag文件")); ?> 来读取flag