公众号:泷羽Sec-尘宇安全
前言
最近deepseek非常火,训练成本低,其预训练费用仅为OpenAI GPT-4o模型的不到十分之一,但是效果堪比OpenAI,使用深度思考,回答的问题很不错,啥都敢说
可惜惨遭ddos,导致官网注册用户都注册不了了,无法正常提供服务,不过我们可以进行本地部署,离线就可以使用,无需联网,即可本地使用。当然服务器多的,也可以在服务器上部署,这样大家都能用了。
如果嫌下载慢可以后台发送:deepseek
获取网盘下载地址
安装ollama
在官网点击Download下载对应系统的安装程序。
https://ollama.com/
如果C盘内存足够,可以直接安装
- 默认是安装到C盘的,如果你想安装到指定目录可以在安装程序目录上方输入CMD打开命令行窗口
在弹出的命令行窗口内输入:
setx OLLAMA_MODELS F:\chatgpt_all\ollama
来修改环境变量OLLAMA_MODELS
,将模型下载位置修改到F:\chatgpt_all\ollama
目录,你也可以改为其他容量比较大的磁盘下的目录
- 设置ollama服务启动配置:在弹出的命令行窗口内输入执行
setx OLLAMA_HOST 0.0.0.0
setx OLLAMA_ORIGINS *
之后默认一步一步安装即可
安装deepseek模型
之后来到ollama选择deepseek模型,第一就是
选择模型大小。正常情况下根据自己的显卡显存选择,比如显存8G就选择8B的模型
输入复制下来的命令
ollama run deepseek-r1:8b
等待一段时间,安装成功
其他命令
- 查看当前安装的模型:
ollama list
- 安装其他模型:在 https://ollama.com/library 上查询模型名称,执行
ollama run xx:xx
进行安装,如安装gemma2:9b模型,ollama run gemma2:9b
- 查询运行的模型:
ollama ps
查看一下安装的模型,之前因为线下的ctf比赛,就使用过离线的ai了,之前对比过觉得阿里云的qwen比其他的都要好用,等下将他和deepseek-r1对比一下
集成ChatGPT-Next-Web界面
安装
下载之后默认安装即可
https://github.com/ChatGPTNextWeb/NextChat/releases/
配置
打开ChatGPT-Next-Web界面 设置,进行基础配置:
- 配置服务商:选择Open Ai
- 自定义模型名:选择 deepseek-r1:8b
- 模型:选择 deepseek-r1:8b
- 接口地址:http://127.0.0.1:11434
关闭配置页面。所有工作已经完成, 可以试试在ChatGPT-Next-Web 里点击 新的聊天,来与大模型进行聊天了。
问题解决:
- ChatGPT-Next-Web无法聊天,提示
failed to fetch
: 可能是你没有执行setx OLLAMA_ORIGINS *
,或者是你搞乱了步骤,先安装了ollama,然后在执行环境变量设置后没有重启ollama.- 解决方法-查看环境变量是否正常:执行
set OLLAMA_ORIGINS
检查输出是否是OLLAMA_ORIGINS=*
- 解决方法-重启ollama,且重新打开新命令行窗口运行ollma run。
- 解决方法-查看环境变量是否正常:执行
- ChatGPT-Next-Web无法聊天,提示
gpt3.5tubo xxxx
: 选择模型有误,在聊天窗口点击模型切换按钮,选择qwen2:7b模型 - 模型运行缓慢:检查显卡是否正常
- 显卡检查:执行
nvidia-smi
查看显存占用和显卡使用情况
- 显卡检查:执行
对比qwen:7b和deepseek-r1:8b
由于是IT行业,所以就给一段漏洞代码让他们彼此分析一下,其实并不严谨,只供参考
给出下面的代码
分析下面代码的漏洞,给出利用步骤
<?php
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
include("lang/".$_COOKIE['lang']);
}
// Not implemented yet.
?>
<html>
<head>
<title>PwnLab Intranet Image Hosting</title>
</head>
<body>
<center>
<img src="images/pwnlab.png"><br />
[ <a href="/">Home</a> ] [ <a href="?page=login">Login</a> ] [ <a href="?page=upload">Upload</a> ]
<hr/><br/>
<?php
if (isset($_GET['page']))
{
include($_GET['page'].".php");
}
else
{
echo "Use this server to upload and share image files inside the intranet";
}
?>
</center>
</body>
</html>
<?php
session_start();
if (!isset($_SESSION['user'])) { die('You must be log in.'); }
?>
<html>
<body>
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='file' id='file' />
<input type='submit' name='submit' value='Upload'/>
</form>
</body>
</html>
<?php
if(isset($_POST['submit'])) {
if ($_FILES['file']['error'] <= 0) {
$filename = $_FILES['file']['name'];
$filetype = $_FILES['file']['type'];
$uploaddir = 'upload/';
$file_ext = strrchr($filename, '.');
$imageinfo = getimagesize($_FILES['file']['tmp_name']);
$whitelist = array(".jpg",".jpeg",".gif",".png");
if (!(in_array($file_ext, $whitelist))) {
die('Not allowed extension, please upload images only.');
}
if(strpos($filetype,'image') === false) {
die('Error 001');
}
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
die('Error 002');
}
if(substr_count($filetype, '/')>1){
die('Error 003');
}
$uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "<img src=\"".$uploadfile."\"><br />";
} else {
die('Error 4');
}
}
}
?>
deepseek-r1:8b
deepseek-r1:8b
,分析非常多,数据量非常大,但是没有分析到利用点上面
输出的全部内容,不得不说,很详细
首先,这个代码是一个简单的图片上传脚本,用户可以通过网页上传图片到服务器。这看起来是一个常见的任务,但由于涉及到文件上传和处理,可能存在多个安全隐患。
-
会话管理:代码中使用了
session_start()
来开始会话,并检查了$_SESSION['user']
是否存在。如果没有,就显示登录信息。这里看起来有一定的会话管理,但具体实现是否完整呢?比如,用户是否需要注册或密码验证? -
文件上传处理:使用了
multipart/form-data
,这在处理文件上传时是标准做法。但是,我注意到form action
没有设置,默认为''
,可能导致提交后无法正确处理。应该指定一个动作,比如upload.php
或者当前脚本。 -
文件扩展名检查:使用了
$whitelist = array(".jpg",".jpeg",".gif",".png");
来过滤文件类型。这是好的,但可能需要更严格的检查,例如使用get_file_type()
或其他方法验证实际文件类型是否与扩展名一致。 -
MIME类型检查:使用了
getimagesize()
和imageinfo['mime']
来判断是否为图像文件。这是合理的,但可能存在一些遗漏,比如某些不常见的图片格式。 -
文件移动与存储:使用了
move_uploaded_file()
将文件保存到upload/
目录,并生成一个带有MD5哈希和扩展名的文件名。这种方法可以避免重复上传,但如果没有正确处理可能导致文件覆盖或其他问题。 -
错误处理:在文件上传失败时,会显示“Error 4”等信息。这可能不够详细,有助于攻击者了解系统的反应。
-
包含外部文件:在
multilingual
部分和页面加载时有包含外部文件的代码。虽然这部分看起来没有被用于攻击,但如果不小心处理,可能会导致包含任意文件,比如.php
或其他类型。 -
cookie管理:设置了cookie来选择语言,但没有对cookie进行加密或验证,这可能存在跨站请求伪造(CSRF)的风险。
接下来,我需要逐一分析这些点,看看哪里可以被攻击者利用。
第一步:确定攻击面
- 会话管理:如果用户能够绕过登录检查,访问受保护的页面。
- 文件上传:允许用户上传任意格式的文件,但实际上只允许几种类型,可能有其他类型可以被上传并执行。
- 包含外部文件:如果
$_GET['page']
可以被控制,攻击者可能通过将其设置为一个恶意文件路径来包含代码。
第二步:潜在的漏洞点
-
会话管理:
- 如果没有密码验证或其他身份验证措施,攻击者可以绕过
$_SESSION['user']
检查。
- 如果没有密码验证或其他身份验证措施,攻击者可以绕过
-
文件扩展名检查:
- 虽然只允许几种格式,但如果没有进一步验证文件类型,攻击者可能上传隐藏的恶意代码(如
.php
或.jpg
中的执行代码)。
- 虽然只允许几种格式,但如果没有进一步验证文件类型,攻击者可能上传隐藏的恶意代码(如
-
包含外部文件:
- 如果
$_GET['page']
未过滤,攻击者可以将其设置为一个恶意路径,比如?page=shell.php
,导致服务器包含该文件。
- 如果
-
form action空白:
action=''
可能导致提交后的数据以GET方式处理,而不是POST,这取决于服务器配置,但通常会自动处理。这点需要确认。
-
错误信息:
- 如果某些错误条件下显示出过多的信息,攻击者可以利用这些错误来推断服务器结构或配置。
-
cookie管理:
- 如果没有防止跨站请求伪造(CSRF),攻击者可能通过设置特定cookie值来执行恶意操作。
-
文件移动与存储:
- 生成的文件名包含MD5哈希,理论上可以预防重复上传,但如果有缓存或其他方法,可以绕过这个机制。
第三步:如何利用这些漏洞
-
绕过登录检查:
- 攻击者可以直接访问受保护的页面,如果会话管理没有额外的验证。
-
上传非允许文件类型:
- 由于扩展名检查仅基于
.jpg
等,攻击者可能上传带有恶意代码的文件,比如.php
或.jpg
中的执行代码。虽然服务器可能拒绝,但如果检查不严格,仍然有风险。
- 由于扩展名检查仅基于
-
包含外部文件:
- 攻击者可以通过设置
?page=evil.php
来包含任意文件。如果页面加载逻辑允许,这会导致服务器返回该文件内容。
- 攻击者可以通过设置
-
CSRF攻击:
- 如果没有anti-CSRF tokens,攻击者可以伪造cookie或请求,执行恶意操作。
-
文件覆盖:
- 如果
move_uploaded_file()
不正确处理,攻击者可能覆盖现有文件或创建新的恶意文件。
- 如果
-
信息泄露:
- 错误信息中的“Error 4”等可能提供服务器细节,帮助攻击者了解系统状态。
第四步:具体利用示例
假设攻击者想包含一个恶意PHP脚本shell.php
,他可以尝试以下方法:
-
通过包含外部文件:
- 修改页面参数为
?page=shell.php
。
- 修改页面参数为
-
绕过登录检查:
- 如果会话管理没有进一步的验证,攻击者可以直接访问受保护的页面。
-
上传恶意文件:
- 上传一个
.jpg
文件,但其中包含PHP代码。当用户查看图片时,这些代码可能被执行。
- 上传一个
-
利用错误信息:
- 如果服务器返回详细错误信息,攻击者可以使用这些信息来推断更多细节。
-
CSRF攻击:
- 创建一个请求,伪造cookie值,使其看起来是从受信任的来源发送的,从而执行恶意操作。
第五步:防御措施
-
加强会话管理:
- 增加身份验证层次,如密码或双因素认证。
-
严格的文件上传检查:
- 使用更严格的内容类型检测,拒绝不允许的格式,并且进行恶意代码扫描。
-
防止包含外部文件:
- 过滤
$_GET['page']
或其他参数,仅允许特定的值。
- 过滤
-
引入anti-CSRF tokens:
- 在每个表单或请求中添加token,并在提交时验证其一致性。
-
限制文件上传大小和类型:
- 设置最大文件大小限制,拒绝过大文件,并严格检查允许的格式。
-
日志记录与监控:
- 实时监控异常访问,及时发现并处理潜在攻击。
-
安全更新:
- 定期更新服务器软件和数据库,修复已知漏洞。
通过以上步骤,可以识别和利用系统中的潜在漏洞,同时实施相应的防御措施来保护系统免受攻击。
qwen:7b
qwen:7b
,阿里云还是牛逼,直接找出了利用点
没有那么详细,而且有一些分析也不算很到位,但是找到了利用点
该代码存在多个安全漏洞,主要涉及输入验证不足、文件上传限制和权限控制问题。以下是利用步骤及分析:
漏洞1:未处理的外部脚本包含
//Multilingual. Not implemented yet.
//setcookie("lang","en.lang.php");
if (isset($_COOKIE['lang']))
{
include("lang/".$_COOKIE['lang']);
}
漏洞描述:
这段代码允许通过设置lang
cookie来动态加载多语言文件。然而,没有对加载的脚本进行安全检查或限制,这可能导致执行任意PHP代码。
利用步骤:
- 注入恶意代码:用户可以构造一个包含恶意代码的URL,例如
http://example.com/index.php?page=login&lang=evil_code.php
。 - 服务器响应:当用户访问上述链接时,脚本会尝试加载并执行
lang/evil_code.php
中的内容。
漏洞2:未验证文件类型和扩展名
$whitelist = array(".jpg",".jpeg",".gif",".png");
if (!(in_array($file_ext, $whitelist))) {
die('Not allowed extension, please upload images only.');
}
漏洞描述:
代码仅检查上传的文件是否为允许的扩展名之一,但未对$filetype
进行验证。这可能导致执行任意代码。
利用步骤:
- 构造恶意文件:创建一个包含PHP代码的文件(例如
myfile.php
),并尝试以其他类型上传。 - 上传和触发:通过提交表单上传该文件,试图绕过扩展名检查。
漏洞3:未验证MIME类型
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
die('Error 002');
}
漏洞描述:
代码仅检查文件是否为特定的图像类型,但未考虑$filetype
的实际值。
利用步骤:
- 构造恶意MIME类型:上传一个文件时使用自定义或不合法的MIME类型。
- 绕过验证:尝试通过上述类型的错误提示来上传非图像内容。
漏洞4:未限制文件路径
在处理上传文件时,代码可能暴露于目录遍历攻击:
$uploadfile = $uploaddir . md5(basename($_FILES['file']['name'])).$file_ext;
漏洞描述:
通过构造特定的文件名或使用特殊字符,可能导致文件被写入到不期望的位置。
漏洞5:未处理上传错误
代码中对上传过程中的错误处理不足:
if ($_FILES['file']['error'] <= 0) {
// ...
}
漏洞描述:
仅检查$error
是否小于等于0,而忽略可能的异常情况或非预期的行为。
演示利用步骤
- 注入恶意脚本:构造
lang/evil_code.php
并尝试通过设置lang
cookie加载。 - 绕过文件类型验证:上传一个包含PHP代码的文件(如
myfile.php
),利用不正确的扩展名或MIME类型。 - 触发目录遍历和错误处理:上传具有特定命名策略的文件,试图利用路径构造漏洞或未处理的异常。
为了解决这些问题,应实施更严格的安全措施,包括:
- 对外部脚本加载进行白名单过滤。
- 严格验证并限制上传文件的类型、MIME类型和扩展名。
- 确保文件上传路径安全,并使用安全的文件命名策略以避免目录遍历攻击。
- 完善错误处理逻辑,确保对所有可能的异常情况进行妥善处理。
总结
毕竟只是7b和8b量级的
其实两款都非常优秀了,已经是市面上顶尖的ai模型,而且deepseek最高有671b,而qwen最高只有110b,所以在最高配置的情况下,开源的deepseek确实是第一了