高级用法

不管是在命令行还是在交互式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

模块列表

在命令行中使用 -Llist 选项来显示给定类型模块列表,在交互式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 或者其他模块执行命令提供参数值。

在命令行下为模块提供 usernamepassword 参数:

$ 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 值, 其值对应消息等级如下所示:

  • 0 EXCEPTIONERROR 等级消息

  • 1 SUCCESSFAILED 等级消息

  • 2 WARNING 等级消息

  • 3 INFO 等级消息

  • 4 DEBUG 等级消息

小技巧

设置 verbose 值后将只输出等级值小于等于当前 verbose 值的消息,在交互式Shell中还可以使用 debugundebug 命令来设置是否输出 DEBUG 消息。