一、环境搭建

      源码下载:​​http://ahdx.down.chinaz.com/201308/duenling_v1.0.rar​

(1)接下来搭建环境,我用的phpstudy,访问首页:(先创建写数据库,我这里是duenling)

php代码审计【16】盾灵CMS代码后台阅读审计_php

php代码审计【16】盾灵CMS代码后台阅读审计_mysql_02

 可悲,我这里按装导入用户名密码失败,然后我手动在数据库添加admin/admin(21232f297a57a5a743894a0e4a801fc3)。

结果失败,还是不行(最后明白是编码问题,不能默认utf-8),一定要是下面的编码。

php代码审计【16】盾灵CMS代码后台阅读审计_php_03

(2)访问​​http://192.168.189.129/duenling/duenling/admin/axphp.php​​ 后台登录

php代码审计【16】盾灵CMS代码后台阅读审计_mysql_04

 

 输入刚才的后太密码(admin/admin),成功登录。ok,环境好了,接下来慢慢看下代码。

php代码审计【16】盾灵CMS代码后台阅读审计_mysql_05

 (3)安全退出,然后重新到登陆界面---》发现提交时候,提交地址为login.php.。

php代码审计【16】盾灵CMS代码后台阅读审计_php_06

(4)分析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");
}
?>

这段代码很简单,接收到$adminname ,$adminpass,基本没有过滤,直接传入sql语句查询,虽然对$adminpass密码进行了加密,但是并不影响我们进行直接登录。

这里对$adminsql 进行echo,

​http://192.168.189.129/duenling/duenling/admin/axphp.php​​方便查看(admin/111111),随便输入密码:

php代码审计【16】盾灵CMS代码后台阅读审计_sql_07

当我想进行admin ' 时候,这个 ’ 输入不上去,看下源码,被js过滤了,哎,上Burpsuite。 

php代码审计【16】盾灵CMS代码后台阅读审计_php_08

使用 Burpsuite抓包后改下数据包:

php代码审计【16】盾灵CMS代码后台阅读审计_mysql_09

然后看到的返回页面,竟然之际就可以登录了。

php代码审计【16】盾灵CMS代码后台阅读审计_mysql_10

 完成的来试下:

php代码审计【16】盾灵CMS代码后台阅读审计_mysql_09

直接进入后台了。 

php代码审计【16】盾灵CMS代码后台阅读审计_sql_12

这就是传说中的万能密码,哈哈哈。 

如果构造语句,写成 admin' or 1=1 # ,后台直接进。毫无阻挡。。。。。(传说中的万能登录)