用docker搭建的Vulfocus镜像管理界面没有镜像可以拉取解决办法
使用docker搭建的Vulfocus镜像管理界面没有可拉取的镜像,以下是解决办法。请注意,截至2023年4月2日,Kali和VPS上拉取的Vulfocus镜像可能存在版本差异。尽管都是最新版,但VPS上的镜像可能是3个月前的版本,而Kali上的镜像可能是16个月前的版本。因此,在修改views.py文件时,可能会发现文件内容不一样。版本不同还导致一键同步报错的解决办法在VPS上可行,但在Kali上不行。
在开始操作之前,需要将用户切换为root用户૮(˶ᴖ ᴗ ᴖ˶)ა。当Kali和VPS上出现不同操作时,我会分开说明。现在让我们开始:
查看容器ID:使用命令
docker ps -a
查看Vulfocus容器的ID,接下来会用到它。启动容器:如果容器已经启动,则无需执行此步骤。使用命令
docker start 容器ID
启动容器。查看需要修改的文件:先进入容器,通过命令进入
dockerapi
目录(进入时我们已经在vulfocus-API
目录下了),然后输入ls
命令查看是否有views.py
文件。如果没有该文件,可能需要重新从Docker拉取Vulfocus镜像。如果存在,请退出容器,使用命令docker exec -it 容器ID /bin/bash
进入容器,然后使用cd ./dockerapi
命令进入目录。
- 拷贝需要修改的文件(容器内没有vim命令,不能直接修改):
- Kali:输入命令
docker cp 容器ID:/vulfocus-api/dockerapi/views.py /home/kali/
,将容器内的views.py
文件拷贝到Kali机器上的/home/kali
目录下。
- VPS:输入命令
docker cp 容器ID:/vulfocus-api/dockerapi/views.py /home/用户/
,将容器内的views.py
文件拷贝到VPS上用户的/home/用户
目录下,然后使用ls
命令查看该目录。
- 修改文件:
- Kali:打开
views.py
文件,在第1576行处将URL改为指定的内容。如果打开后发现第1576行不是这样的,请参考VPS的操作。
- VPS:将
views.py
文件下载到本地,这样修改起来会更方便,保存时也不会报权限错误。如果打开文件时第1575行不是指定的内容,请直接按照Kali的操作进行修改。
try:
url = "http://vulfocus.cn/api/imgs/info"
res = requests.get(url, verify=False).content
req = json.loads(res)
image_names = list(ImageInfo.objects.all().values_list('image_name', flat=True))
for item in req:
if item['image_name'] == "":
continue
if 'is_docker_compose' in item:
if item['is_docker_compose'] == True:
continue
if item['image_name'] in image_names:
if item['image_name'] == "vulfocus/vulfocus:latest":
continue
single_img = ImageInfo.objects.filter(image_name__contains=item['image_name']).first()
if single_img.image_vul_name != item['image_vul_name'] or single_img.image_vul_name == "":
single_img.image_vul_name = item['image_vul_name']
if single_img.image_desc == "":
single_img.image_desc = item['image_desc']
if single_img.rank != item['rank']:
single_img.rank = item['rank']
if single_img.degree != item['degree']:
single_img.degree = json.dumps(item['degree'])
if "writeup_date" in item and single_img.writeup_date != item['writeup_date']:
single_img.writeup_date = item['writeup_date']
single_img.save()
else:
if "writeup_date" in item:
writeup_date = item['writeup_date']
else:
writeup_date = ""
image_info = ImageInfo(image_name=item['image_name'], image_vul_name=item['image_vul_name'],
image_desc=item['image_desc'], rank=item['rank'],
degree=json.dumps(item['degree']),
is_ok=False, create_date=timezone.now(), writeup_date=writeup_date,
update_date=timezone.now())
image_info.save()
return JsonResponse({"code": 200, "data": "成功"})
except Exception as e:
return JsonResponse({"code": 201, "data": e})
tasks.synchronous_image.delay()
return JsonResponse({"code": 200, "data": "镜像同步中"})
针对这种情况,需要添加一大段代码,具体代码如下所示。请注意将代码添加到自定义的get_timing_imgs
函数下,确保代码格式和排版正确。
- 关于一键同步报错问题:VPS上拉取的Vulfocus并没有这个问题。如图所示的代码中,红框部分与同步有关。它不能放在
try
代码块后面。如果在Kali上尝试解决一键同步报错问题,可以尝试将这段代码放置在指定的位置(但是,截至撰写本文时,我尝试添加此段代码并不能解决问题)。
- 保存:
Kali:点击保存,另存为到桌面(不替换原文件,因为我尝试后发现无法替换)。
VPS:直接使用Ctrl + S保存。
- 替换文件:
- Kali:删除原来位于
/home/kali
目录下的views.py
文件,将桌面上新保存的views.py
文件移动到/home/kali
目录下。
- VPS:删除原来的
views.py
文件,然后将桌面上修改好的文件上传到相同目录。
- 替换容器内的文件:
- Kali:输入命令
docker cp /home/kali/views.py 容器ID:/vulfocus-api/dockerapi/views.py
,将views.py
文件拷贝到容器内,替换原来的文件,然后使用命令docker restart 容器ID
重启容器。
- VPS:输入命令
docker cp /home/用户/views.py 容器ID:/vulfocus-api/dockerapi/views.py
,将views.py
文件拷贝到容器内,替换原来的文件,然后使用命令docker restart 容器ID
重启容器。
等待重启完成后,在浏览器中访问Vulfocus,点击镜像管理,查看是否有可拉取的镜像。
查询功能可以正常使用,涵盖了Vulfocus上的所有靶场。但是,添加功能中的搜索镜像功能尚未解决。本地靶场仍然可以正常导入。希望这些步骤能对您有所帮助૮(˶ᵔ ᵕ ᵔ˶)ა。