欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

程序员文章站 2022-03-08 12:16:15
...

本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程

PHP 代码审计博客目录

1. 简介

盾灵投稿系统 脚本之家下载链接

互联网上下载源码,自己搭建一下就好了

我搭建的本地系统位置为 http://10.10.10.130/dunling,是在 Metasploitable-linux2 上面改的,本系统需要修改 mysql 密码不为空,需要在 phpmyadmin 上面创建一个数据库。

mysql 默认为空,需要修改数据库密码

use mysql;
update user set password=password('asd123456') where user='root' and host='localhost'; 

# 命令行模式下重载权限表
mysqladmin -u root -p -h 10.10.10.130 reload

创建数据库

PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

即可安装盾灵投稿系统

如果需要使用 mysql 空密码登录,只需要修改 /var/www/phpMyAdmin/libraries/config.default.php 文件即可

$cfg['Servers'][$i]['AllowNoPasswordRoot'] = true;

2. 后台登录绕过

  1. 使用注释绕过

    1. 查看源码

      dunling/admin/login.php

      <?php
      require '../config.php';
      $adminname = $_POST['adminname'];
      $adminpass = $_POST['adminpass'];
      $adminpass .= "Axphp.com";
      $adminpass = md5($adminpass);
      $adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
      $adminery = mysql_query($adminsql, $config);
      $adminnum = mysql_num_rows($adminery);
      if ($adminnum == "1") {
      setcookie("admin", "Y", time() + 3600, '/');
      setcookie("admin_name", $adminname, time() + 3600, '/');
      header("location:axadmin.php");
      } else {
      header("location:axphp.php");
      }
      ?>
      
    2. 绕过

      浏览器执行 http://10.10.10.130/dunling/admin/

      PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

      打开 firefox 的 HTTP Header live 插件

      输入账号(admin)和密码(任意内容)

      会弹出 HTTP Header live 页面

      PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

      修改数据并且提交

      账号位置输入 admin ‘#
      此处的 admin 确实是此 cmd 的账号名,’ 为数据库闭合, # 为注释

      PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

      点击下面的 发送,浏览器页面会刷新进入到 cmd 里面,绕过成功。

  2. 使用 ’ or 1=1 绕过

    1. 查看源码

    上述源码中引用了 axadmin.php 和 axphp.php 文件

    查看 axadmin.php 源码,发现调用了 check.php 文件

    查看 check.php 文件源码可以发现此文件为登录权限的判断机制

    <?php
    error_reporting(0);
    isset($_COOKIE['admin'])?$check=$_COOKIE['admin']:$check=null;
    isset($_COOKIE['admin_name'])?$admin_user=$_COOKIE['admin_name']:$user=null;
    if($check==null){header("Location:../index.php");exit;}
    ?>
    

    上述源码中仅仅是判断 cookie 是否存在来作为用户是否登录的凭证

    1. 绕过

    启动 burpsuite ,开启截断功能

    浏览器访问 http://10.10.10.130/dunling/admin/admin_pass.php

    由于 admin/admin_pass.php 页面为登录之后才可以访问的页面,随意类似于这个的页面都可以作测试页面

    PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

    将此页面发送到 Burpsuite 的 Repeater 中

    PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞

    提交之后的页面为已绕过登录的页面