PHP代码审计 15 实战盾灵投稿系统 cookie 后台绕过漏洞
本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 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
创建数据库
即可安装盾灵投稿系统
如果需要使用 mysql 空密码登录,只需要修改 /var/www/phpMyAdmin/libraries/config.default.php 文件即可
$cfg['Servers'][$i]['AllowNoPasswordRoot'] = true;
2. 后台登录绕过
-
使用注释绕过
-
查看源码
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"); } ?>
-
绕过
浏览器执行 http://10.10.10.130/dunling/admin/
打开 firefox 的 HTTP Header live 插件
输入账号(admin)和密码(任意内容)
会弹出 HTTP Header live 页面
修改数据并且提交
账号位置输入 admin ‘#
此处的 admin 确实是此 cmd 的账号名,’ 为数据库闭合, # 为注释点击下面的 发送,浏览器页面会刷新进入到 cmd 里面,绕过成功。
-
-
使用 ’ or 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 是否存在来作为用户是否登录的凭证
- 绕过
启动 burpsuite ,开启截断功能
浏览器访问 http://10.10.10.130/dunling/admin/admin_pass.php
由于 admin/admin_pass.php 页面为登录之后才可以访问的页面,随意类似于这个的页面都可以作测试页面
将此页面发送到 Burpsuite 的 Repeater 中
提交之后的页面为已绕过登录的页面
上一篇: 灵云语音合成