python代码审计-osroom

本文详细介绍了osroom内容管理系统中发现的多种安全问题,包括远程代码执行(RCE)、文件覆盖、上传文件覆盖、路径跳转和任意文件读取等。作者通过分析代码示例,揭示了这些问题的成因和潜在风险,特别是涉及eval的使用、文件保存过程中的路径控制不严以及前端重定向中的参数安全。这些问题在特定环境下可能导致严重的安全后果。
摘要由CSDN通过智能技术生成

原文来自SecIN社区—作者:misakikata

osroom

这个cms很有意思,从漏洞和程序的写法上,很适合用来入门学习,漏洞的一些形式相比来说,也比较多一点。

RCE

apps\utils\format\obj_format.py

如下,文件中采用了eval来转换字符串对象,当json.loads转换失败的时候,则直接使用eval来转换。

def json_to_pyseq(tjson):
    """
    json to python sequencer
    :param json:
    :return:
    """
    if tjson in [None, "None"]:
        return None
    elif not isinstance(tjson, (list, dict, tuple)) and tjson != "":
        if isinstance(tjson, (str, bytes)) and tjson[0] not in ["{", "[", "("]:
            return tjson
        elif isinstance(tjson, (int, float)):
            return tjson
        try:
            tjson = json.loads(tjson)
        except BaseException:
            tjson = eval(tjson)
        else:
            if isinstance(tjson, str):
                tjson = eval(tjson)
    return tjson

转到一个使用此方法的功能,例如apps\modules\audit\process\rules.py

删除规则处,传入一个ids参数,原参数值是一个hash值,但是可以修改为python代码。

def audit_rule_delete():
    ids = json_to_pyseq(request.argget.all('ids', []))
    if not isinstance(ids, list):
        ids = json.loads(ids)
    for i, tid in enumerate(ids):
        ids[i] = ObjectId(tid)
    r = mdbs["sys"].db.audit_rules.delete_many({"_id": {"$in": ids}})
    if r.deleted_count > 0:
        data = {"msg": gettext("Delete the success,{}").format(
            r.deleted_count), "msg_type": "s", "custom_status": 204}
    else:
        data = {
            "msg": gettext("Delete failed"),
            "msg_type": "w",
            "custom_statu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值