高级用法
不管是在命令行还是在交互式Shell中使用 ExpDepos , 都可以使用一些便捷选项或者是命令来提供模块运行所需的配置。比如每个模块在设计之初便设定了两种执行模式,我们可以在命令行中提供 --verify 选项以验证模式执行模块, --exploit 选项则以利用模式来执行模块。在交互式Shell中则是使用 verify 或是 exploit 命令。
以验证模式( verify )运行:
$ python3 cli.py -M modules/exploits/webapp/example.py -H http://www.target.com --verify
以利用模式( exploit )运行:
$ python3 cli.py -M modules/exploits/webapp/example.py -H http://www.target.com --exploit
小技巧
如果不指定任何一种模式,模块则默认以 verify 模式执行。
模块选择
选择要运行指定的模块可以使用 -M 或者是 --module 选项,选项值可以是相对当前路径下的模块文件或者是模块别名(Alias)。如下命令所示:
使用模块相对路径运行:
$ python3 cli.py -M modules/exploits/webapp/example.py -H http://www.target.com
使用模块别名运行:
$ python3 cli.py -M example -H http://www.target.com
目标设定
每一个 Exploit 模块都可以为其设定一个 HOST 参数,该参数设置为漏洞验证目标。在命令行下使用 -H 或是 --host 选项来提供,在交互式Shell则使用全局参数设置命令 setg 或是模块参数设置命令 set 进行设置。
使用 --host 选项设置目标:
$ python3 cli.py -M modules/exploits/webapp/example.py --host http://www.target.com
模块列表
在命令行中使用 -L 或 list 选项来显示给定类型模块列表,在交互式Shell下则使用 show 命令,其可选类型列表如下所示:
modules显示所有模块列表
exploits显示所有exploit模块
payloads显示所有payload模块
encoders显示所有encoder模块
alias显示所有模块别名列表
fps显示所有指纹库列表
显示所有模块列表:
$ python3 cli.py --list modules
模块详情
在命令行中使用 --info 选项搭配 -M 或者 --module 模块选项来查看模块详细信息,在交互式Shell则使用 show info 命令。
显示模块 modules/exploits/webapp/example.py 详细信息:
$ python3 -M modules/exploits/webapp/example.py --info
小技巧
使用 -M 搭配 -h 参数可用于获取该模块的命令行参数帮助信息,如下所示:
python3 cli.py -M example -h
__________ ___ .______ _______ _______ .______ ______ _______.
| ____\ \ / / | _ \ | \ | ____|| _ \ / __ \ / |
| |__ \ V / | |_) | | .--. || |__ | |_) | | | | | | (----`
| __| > < | ___/ | | | || __| | ___/ | | | | \ \
| |____ / . \ | | | '--' || |____ | | | `--' | .----) |
|_______/__/ \__\ | _| |_______/ |_______|| _| \______/ |_______/
=[ ExploitDepository 1.0.211103_beta ]
=[ By Castiel at 2021-11-03 ]
[09:40:35] [!] WARNING 当前Python版本过低,建议使用Python3.7+版本运行.
[*] DEBUG 设置verbose为: 4
[*] INFO 初始化环境...
[*] DEBUG 解析到命令行参数: Namespace(agent=None, auth=None, check_update=False, console=False, cookie=None, delay=0, exploit=False, header=None, host=None, list=None, module='example', module_help=True, options=None,
proxy=None, rdelay=3, referer=None, retries=3, scfclear=False, scfinit=False, scfreset=False, show_info=False, show_version=False, thread=200, timeout=30, useScf=False, verbose=4, verify=False)
[*] DEBUG 将命令行参数信息设置到env中
[*] DEBUG 将系统配置信息设置到env中
[*] PROGRESS 正在初始化指纹库... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
[09:40:37] [*] INFO 指纹库初始化完成, 共加载: 5162 个指纹信息.
[*] PROGRESS 正在初始化模块库... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
[*] INFO 模块初始化完成, 共加载: 3 个模块.
[*] INFO example 模块参数帮助.
[*] DEBUG 获取模块 example 用户自定义选项信息 dict_keys(['name', 'Age', 'require'])
usage: ExpDepos -H host -M modules/exploits/webapp/example [-p,--options] [Module Options]
Module Options:
--name NAME 字符类型示例
--age AGE 整型参数示例
--require REQUIRE 非必选项参数示例
模块参数
Exploit 模块在运行的时候可能额外需要用户提供一些参数值,这些参数在开发的时候由设计者设置。需要查看模块具体需要用户提供哪些必选参数可在命令行通过 --info 参数或者在交互式Shell中使用 show options 命令查看。在命令行执行模块时候要为其提供必选参数请使用 -P 或者 --options 选项提供参数值,参数值遵循 argparse 使用方式。 在交互式Shell则以相同方式为 run 或者其他模块执行命令提供参数值。
在命令行下为模块提供 username 和 password 参数:
$ python3 cli.py -M modules/exploits/webapp/example.py -H http://www.target.com -P "--username admin --password 123"
警告
在命令行下多个参数与参数值之间存在空格,所以全部的参数值需要使用 " 或是 ' 包裹,在交互式Shell中则不需要。如果参数值有空格,请使用 " 或是 ' 包裹。
使用Payload
要为 Exploit 设置有效攻击载荷(Payload),可以使用 -p 或者 --payload 选项指定攻击载荷模块。同时也可以使用 -Po 选项为其提供运行参数,使用方式和为 Exploit 模块提供运行参数一样。
$ python3 cli.py -M td_oa_all_in_one -P "--username admin --password 111" -p modules/payloads/webshells/NormalEval.py -Po "--lang asp --pass castiel" -H http://www.target.com
使用Encoder
要为 Payload 设置编码器,可以使用 -e 或者 --encode 选项,用法与设置 payload 一样。要为编码器提供运行参数则是使用 -Eo 选项。
$ python3 cli.py -M td_oa_all_in_one -P "--username admin --password 111" -p neval -Po "--lang asp --pass castiel" -H http://www.target.com -e base64
HTTP请求设置
ExpDepos 默认采用 httpx 作为内置HTTP请求模块,同时为其提供多个选项设置,如下所示:
--auth为HTTP请求提供基础认证信息,格式使用username:password方式。
--cookie自定义Cookie信息,可选完整cookie字符串或键值对,多个键值对使用,分割。
--headers自定义Header信息,格式为key1:value1,key2:value2形式。
--user-agent自定义HTTP Header的User-Agent值(默认值:随机生成)。
--referer自定义HTTP Header的Referer值。
--timeout自定义超时时间(默认值:30)。
--retries当请求失败后重试次数(默认值:3)。
--rdelay当请求失败后重试间隔时间(默认值:3)。
--delay两次请求之间的间隔时间(单位:秒)。
--proxy使用代理发起REQUEST请求,格式为protocol://username:password@host:port。
--thread协程并发请求量(默认:200)。
--scf使用云函数(Serverless Cloud Functions)代理,目前只支持腾讯云。
警告
ExpDepos 内置 httpx 版本为 0.18.2,如果您系统已安装该模块且该模块版本高于内置版本将会产生向下兼容性问题,建议移除并重新安装内置版本。
交互式Shell
ExpDepos 提供了一个类似 MSF 一样的交互式Shell,其交互式命令也参考了 MSF 的方式,目前支持如下所示命令:
Core Commands
=============
Command Description
------- -----------
? 打印命令帮助
help 等同 ? 命令
setg 设置全局参数值
get 获取参数值
show 显示给定类型的模块信息或者全部模块
debug 设置Console输出为Debug模式
undebug 设置Console输出为非Debug模式
exit 退出Console
Module Commands
===============
Command Description
------- -----------
use 通过模块别名或路径选择使用的模块
set 设置模块参数值
run 执行已选中的模块(默认verify模式)
exploit 以exploit模式运行模块
verify 以verify模式运行模块
info 显示模块详细信息
Cloud Functions
===============
Command Description
------- -----------
scfinit 初始化云函数
scfcls 删除全部云函数
scfrst 重置云函数
Tools Functions
===============
Command Description
------- -----------
md5 md5加密工具
base64 base64加密
mmh3 mmh3加密
hex hex编码
unhex hex解码
add 添加字典或者指纹
Debug Commands
==============
Command Description
------- -----------
reload 重载并应用consoleShell模块的代码更改
ExpDepos>
小技巧
在交互式Shell控制台中,可以使用 Tab 键补齐命令(仅限 Linux 系统),也可以使用 help command 来获取具体命令的详细帮助。
使用示例:
在交互式Shell中选择使用的模块:
ExpDepos> use exploits/webapp/example
ExpDepos(exploits/webapp/example)> show options
List Module Options
===================
Name Current Setting Type Required Description
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
NAME admin String Yes 字符类型示例
AGE 20 Integer Yes 整型参数示例
REQUIRE False Boolean 非必选项参数示例
HOST None String 目标地址 (可选IP端口或URL地址)
ExpDepos(exploits/webapp/example)>
使用参数选项运行模块:
ExpDepos(exploits/webapp/tdoa_exploits/Test)> set host http://www.target.com/
host ==> http://www.target.com/
ExpDepos(exploits/webapp/tdoa_exploits/Test)> run --username admin --password 123456 --mode exploit
[22:36:35] [*] INFO 设置模块参数:{'username': 'admin', 'password': '123456', 'notrequire': None}
[*] INFO 正在以 'exploit' 模式运行模块 'Test Exploit'
[+] SUCCESS {'shell': 'test success'}
小技巧
run 命令除了给予模块必选参数外还添加了 --mode 和 -b 参数,前者用于指定模块的运行方式是 verify 还是 exploit。后者则将模块放入后台运行,这对于长耗时模块非常有用。例如运行一个监听任务的模块时候即可在参数中直接加上 -b 让其在后台运行。
Debug
在 ExpDepos 运行过程中会有不同等级的消息输出,在命令行中可以使用 -v 或是 --verbose 选项来控制不同等级的消息输出。在交互式Shell中则使用全局参数设置命令 setg 来设置 verbose 值, 其值对应消息等级如下所示:
0EXCEPTION和ERROR等级消息
1SUCCESS和FAILED等级消息
2WARNING等级消息
3INFO等级消息
4DEBUG等级消息
小技巧
设置 verbose 值后将只输出等级值小于等于当前 verbose 值的消息,在交互式Shell中还可以使用 debug 和 undebug 命令来设置是否输出 DEBUG 消息。