W3af扫描时插件加载失败怎么办?
用w3af_console扫描目标时老是报错”Plugin not found”,折腾了半天没解决。按照官方文档装了所有依赖,运行w3af_console后选择插件扫描就直接报错了。
错误提示是:
Traceback (most recent call last):
File "/usr/bin/w3af_console", line 123, in load_plugins
from plugins.crawl.web_spider import WebSpider
ModuleNotFoundError: No module named 'plugins.crawl'
已经试过重新安装w3af和pip安装缺失依赖,但问题依旧。是不是路径配置哪里错了?或者某些系统依赖没装?
你直接进到 w3af 的源码目录再运行就正常了,比如你的源码在
/opt/w3af,那就必须先:cd /opt/w3af然后再执行:
./w3af_console不要用全局安装的那个命令,那个路径根本没把你本地的 plugins 目录加进去。如果你是从 pip 安装的,建议卸了重来,用源码运行最靠谱。
还有个细节,你执行完
cd /opt/w3af后,记得检查一下目录结构,plugins 目录必须在根目录下,也就是/opt/w3af/plugins,不能是别的位置。如果你之前用 pip 安装过,缓存起来的那些模块可能会干扰,建议清理掉:
pip uninstall w3af然后进到源码目录重新执行安装依赖:
pip install -r requirements.txt搞完这波,应该就不会再报 plugins.crawl 找不到的问题了。
问题根源是w3af默认会在当前目录下找plugins目录,如果你是用pip安装的w3af,实际的插件目录应该在site-packages里。
解决方法有两个:
进入w3af安装目录运行
cd /usr/local/lib/python3.8/site-packages/w3af
sudo ./w3af_console
或者修改源码强制指定路径
打开w3af源码目录下的core/controllers/baseconfig.py
找到这行:
PLUGIN_PATH = os.path.join(ROOT_PATH, 'plugins')
改成绝对路径:
PLUGIN_PATH = '/usr/local/lib/python3.8/site-packages/w3af/plugins'
原理是这样:Python的模块导入机制是基于sys.path里的路径列表。w3af启动时会尝试把当前目录添加到路径里,但有时候虚拟环境和实际安装路径不一致就会出问题。直接用绝对路径能绕过这个查找过程。
建议先试试第一种方法,如果还有问题可以试试:
sudo python3 -c "import site; print(site.getsitepackages())"
看看输出的路径里有没有w3af的目录,正常应该能看到插件目录在输出路径里。