相关推荐recommended
【Python-flask库开启debug调试导致PIN码破解泄露getshell】
作者:mmseoamin日期:2024-02-20

Python-flask库开启debug调试导致PIN码破解泄露getshell

    • 一、如何判断是否开启debug模式,当出现了类似如下的页面时,就是开启了debug调试模式
      • 注:不过这个时候是需要输入PIN码才可以得到交互式shell
      • 二、一些坑点
      • 注:本地的python环境,如果装了flask模块,在本地python文件路径“Lib\site-packages\werkzeug\debug”下,有一个__init__.py,这个py文件中有写PIN码的算法,只需要复制下来,改6个参数即可
      • 注意点:
      • 注:从中可以看到python3.5用的是md5算法,python3.11用的是sha1算法
      • 详情可见:[Werkzeug更新带来的Flask debug pin码生成方式改变 - 腾讯云开发者社区-腾讯云 (tencent.com)](https://cloud.tencent.com/developer/article/1657739)
      • 注:这个直接导致了”机器id“的变化,由于新版和旧版算法不同。
      • 三、环境配置
      • 注:这是网上随便找的配图,报错原因是因为python3.5不支持,
      • 注:运行结果如上所示
      • 注:这个时候就可以重新安装flask库了
      • 四、破解PIN码脚本编写
      • 注:这一段就是PIN码的算法
      • 注:上面说到了”werkzeug更新导致flask debug pin码生成方式的改变“,这里就是对两种不同版本的机器id的获取
      • 注:旧版采用的是依次读取的方式,如果在第一个文件中得到了值,那么就会直接进行计算,如果没有就换下一个,以此类推
      • 注:在旧版里,他们都有可能是机器id,其中如果是docker环境的话,直接读取/proc/self/cgroup
      • 注:这一串就是docker环境的机器id
      • 注:新版采用的是先对/etc/machine-id、/proc/sys/kernel/random/boot_id依次读取,读取后如果里面有值,就和/proc/self/cgroup进行拼接,作为机器id

        注:flask在遇到报错时,如果开启了debug模式,就可以在web上建立一个交互式shell进行python调试,但是需要PIN码,PIN码是可以破解的

        一、如何判断是否开启debug模式,当出现了类似如下的页面时,就是开启了debug调试模式

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第1张

        注:不过这个时候是需要输入PIN码才可以得到交互式shell

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第2张

        二、一些坑点

        注:本地的python环境,如果装了flask模块,在本地python文件路径“Lib\site-packages\werkzeug\debug”下,有一个__init__.py,这个py文件中有写PIN码的算法,只需要复制下来,改6个参数即可

        注意点:

        1、python的版本

        注:不同的python版本,init.py中PIN的算法可能不同

        下面列举两种不同版本:

        python3.5

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第3张

        python3.11

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第4张

        注:从中可以看到python3.5用的是md5算法,python3.11用的是sha1算法

        2、werkzeug更新导致flask debug pin码生成方式的改变

        详情可见:Werkzeug更新带来的Flask debug pin码生成方式改变 - 腾讯云开发者社区-腾讯云 (tencent.com)

        注:这个直接导致了”机器id“的变化,由于新版和旧版算法不同。

        三、环境配置

        1、截图中是3.5版本的,于是在虚拟机中配置了一套python3.5的python环境

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第5张

        2、这里又有一个坑点,配置好了python之后呢,既然是破解PIN码,肯定是需要安装flask,然后看看对应版本中PIN的算法,这里直接使用pip安装会报错,pip会说版本太低了,要先升级,升级完成之后就会报错如下

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第6张

        注:这是网上随便找的配图,报错原因是因为python3.5不支持,

        解决方案:

        https://bootstrap.pypa.io/pip/3.5/get-pip.py

        将网址中的python文件下载到本地,然后运行

        python get-pip.py

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第7张

        注:运行结果如上所示

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第8张

        注:这个时候就可以重新安装flask库了

        四、破解PIN码脚本编写

        1、先打开__init__.py文件

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第9张

        注:这一段就是PIN码的算法

        2、放到编辑器中调试(注意需要导入相关库)

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第10张

        3、这里需要找到6个参数

        (1)、username

        查看/etc/passwd或者/proc/self/environ

        (2)、modename

        一般固定值:flask.app

        (3)、appname

        一般固定值:Flask

        (4)、app.py绝对路径

        在报错页面可以看到

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第11张

        (5)、uuid(mac地址)

        查看/sys/class/net/eth0/address或者改为别的网卡

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第12张

        这里是16进制,需要转为十进制

        (6)、机器id

        注:上面说到了”werkzeug更新导致flask debug pin码生成方式的改变“,这里就是对两种不同版本的机器id的获取

        旧版(依次读取):

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第13张

        /proc/self/cgroup、/etc/machine-id、/proc/sys/kernel/random/boot_id

        注:旧版采用的是依次读取的方式,如果在第一个文件中得到了值,那么就会直接进行计算,如果没有就换下一个,以此类推

        注:在旧版里,他们都有可能是机器id,其中如果是docker环境的话,直接读取/proc/self/cgroup

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第14张

        注:这一串就是docker环境的机器id

        新版(依次读取后拼接):

        /etc/machine-id、/proc/sys/kernel/random/boot_id

        /etc/machine-id+/proc/self/cgroup

        /proc/sys/kernel/random/boot_id+/proc/self/cgroup

        注:新版采用的是先对/etc/machine-id、/proc/sys/kernel/random/boot_id依次读取,读取后如果里面有值,就和/proc/self/cgroup进行拼接,作为机器id

        4、得到全部参数后,运行脚本,将得到的PIN码输入到,即可开启debug调试模式

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第15张

        【Python-flask库开启debug调试导致PIN码破解泄露getshell】,在这里插入图片描述,第16张