一次授权的渗透测试
字数 1065 2025-08-05 08:19:06
授权渗透测试实战教学文档
1. 目标侦察与信息收集
1.1 初始目标评估
- 主站未发现明显可利用点
- 使用FOFA进行C段查询,发现同C段存在ThinkPHP框架页面
1.2 后台发现与弱口令利用
- 发现目标后台站点
- 成功使用弱口令登录后台
- 后台功能有限,无法直接利用
2. 目录遍历漏洞利用
2.1 发现目录遍历漏洞
- 目标站点存在目录遍历漏洞
- 通过遍历目录寻找敏感配置文件
2.2 KindEditor CMS漏洞利用
- 发现站点使用KindEditor CMS
- 利用已知漏洞:
file_manager_json.php文件存在目录遍历漏洞 - 漏洞原理:
$php_path = dirname(__FILE__) . '/'; $root_path = $php_path . '../attached/'; if (empty($_GET['path'])) { $current_path = realpath($root_path) . '/'; $current_url = $root_url; $current_dir_path = ''; $moveup_dir_path = ''; }- 当
attached目录不存在时,realpath($root_path)返回空 $current_path变为系统根目录/- 绕过
../防护,可浏览系统根目录
- 当
2.3 构造Payload
- 通过目录遍历找到站点备份源码
- 下载源码进行代码审计
3. 代码审计与漏洞发现
3.1 日志记录功能审计
class BaseController extends Controller {
public function __construct(){
parent::__construct();
foreach ($_REQUEST as $key => $value) {
$canshu .= $key.'='.$value.'&';
}
$canshu = trim($canshu,'&');
addlog(array('url'=>'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$canshu),'api-'.ACTION_NAME,'接口地址:');
addlog($_REQUEST,'api-'.ACTION_NAME,'接收参数:');
addlog($_FILES,'api-'.ACTION_NAME,'接收文件');
}
function addlog($arr,$name,$description){
error_log ($description.':'.date('Y-m-d H:i:s').'----'.var_export($arr,true).'
',3,"./log/".date('Y-m-d')."-".$name.".php");
}
}
3.2 漏洞分析
addlog函数将请求信息记录到日志文件error_log函数将数据写入以.php结尾的文件- 用户输入未经过滤直接写入文件
- 日志文件可被解析为PHP代码
3.3 漏洞利用方法
- 构造恶意请求,将PHP代码写入日志文件
- 访问日志文件执行任意代码
4. 漏洞利用实战
4.1 构造Payload
/index.php/Api/Base/a?search=<?php phpinfo(); ?>
4.2 利用步骤
- 发送构造的恶意请求
- 系统生成日志文件,如:
./log/2021-06-18-api-a.php - 访问生成的日志文件
- PHP代码被执行,显示
phpinfo()信息
4.3 验证利用
- 本地测试确认漏洞存在
- 成功获取Webshell
5. 防御建议
5.1 针对目录遍历漏洞
- 禁用不必要的目录浏览功能
- 对文件路径进行严格校验
- 确保
realpath不会返回根目录
5.2 针对日志记录漏洞
-
输入过滤:
- 对所有用户输入进行严格过滤
- 禁止特殊字符如
<?php等
-
日志文件处理:
- 日志文件不应使用
.php扩展名 - 设置日志目录不可执行
- 限制日志目录的访问权限
- 日志文件不应使用
-
代码改进:
function addlog($arr, $name, $description) { $log_content = htmlspecialchars($description.':'.date('Y-m-d H:i:s').'----'.var_export($arr, true)); $log_file = "./log/".date('Y-m-d')."-".preg_replace('/[^a-zA-Z0-9_-]/', '', $name).".log"; error_log($log_content."\n", 3, $log_file); }
6. 参考资源
- KindEditor目录遍历漏洞分析
- ThinkPHP安全最佳实践
- Web应用日志记录安全规范
7. 总结
本案例展示了从信息收集到最终获取系统权限的完整渗透测试流程,重点利用了:
- C段信息收集
- 弱口令攻击
- 目录遍历漏洞
- 不安全的日志记录实现
渗透测试人员应全面了解系统架构,善于将多个小漏洞串联利用,同时开发人员应重视每个看似微小的安全问题。