三层渗透测试-DMZ区域 二三层设备区域

DMZ区域渗透

信息收集

首先先进行信息收集,这里我们可以选择多种的信息收集方式,例如nmap如此之类的,我的建议是,可以通过自己现有的手里小工具,例如无影,密探这种工具,进行一个信息收集。以免在信息收集的环节,遗漏一些信息,导致后续渗透任务的失败。话不多说,我们先确定靶机地址

使用ifconfig命令,查看kali攻击机与DMZ靶机相连接的网卡,这里得到一个网段地址:192.168.50.0/24

使用nmap对其网段进行扫描

扫出来一个192.168.50.128开放了8080端口,这里建议访问一下,是不是我们的目标靶机

成功访问到一个cms平台,那证明上述ip靶机已经发现。那我们还要继续进行一些常见的信息收集,利用目录扫描工具进行扫描

使用dirsearch进行工具的扫描

得到如下结果,可能会有用的

/member/login.php                                 
/robots.txt 
/data/sessions

再用我们自带的字典进行查找:这个地方我直接用无影来扫了

这里我们得到一个管理后台的地址

又得到一个与sql文件有关的txt文件
我们现在先查看此sql文件存在那些相关信息

发现FTP服务的账户与密码

以及SMTP服务器的相关密码信息。

我们现在就需要去连接一下FTP服务器,看看上面存在什么文件。

发现上面服务器存在dedecms.zip估计就是网站的源码,先把他pull下来

我们将我们得到的信息进行总结

端口开放信息:
21/tcp   open  ftp
135/tcp  open  msrpc
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
3306/tcp open  mysql
8080/tcp open  http-proxy目录信息:
/member/login.php  //普通用户登录                            
/robots.txt 
/data/sessions
/dede/login.php  //后台管理用户登录文件信息:
/install/sql-dfdata.txt //sql文件信息服务器相关信息:
FTP   wwwroot/1
SMTP  desdev/7260444huxiao网站源码信息:
dedecms.zip网站系统版本:
dedecms57

源码审计&GETSHELL

通过上述的信息收集,我们已经知道/dede/login.php 是网站后台管理的登录页面,那我们可以先从此处入手逐渐分析

先分析这个目录下的文件:我们的目标是为了通过分析代码,找到有无我们可以利用的漏洞点,利用管理员账户的账户与密码信息,或者是登录框存在sql注入。登陆到后台找到有无存在文件上传getshell的功能点。话不多说,先进行分析

先来到login.php

<?php
/*** 后台登陆** @version        $Id: login.php 1 8:48 2010年7月13日Z tianya $* @package        DedeCMS.Administrator* @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.* @license        http://help.dedecms.com/usersguide/license.html* @link           http://www.dedecms.com*/
require_once(dirname(__FILE__).'/../include/common.inc.php');
require_once(DEDEINC.'/userlogin.class.php');
if(empty($dopost)) $dopost = '';//检测安装目录安全性
if( is_dir(dirname(__FILE__).'/../install') )
{if(!file_exists(dirname(__FILE__).'/../install/install_lock.txt') ){$fp = fopen(dirname(__FILE__).'/../install/install_lock.txt', 'w') or die('安装目录无写入权限,无法进行写入锁定文件,请安装完毕删除安装目录!');fwrite($fp,'ok');fclose($fp);}//为了防止未知安全性问题,强制禁用安装程序的文件if( file_exists("../install/index.php") ) {@rename("../install/index.php", "../install/index.php.bak");}if( file_exists("../install/module-install.php") ) {@rename("../install/module-install.php", "../install/module-install.php.bak");}$fileindex = "../install/index.html";if( !file_exists($fileindex) ) {$fp = @fopen($fileindex,'w');fwrite($fp,'dir');fclose($fp);}
}
//更新服务器
require_once (DEDEDATA.'/admin/config_update.php');if ($dopost=='showad')
{include('templets/login_ad.htm');exit;
}
//检测后台目录是否更名
$cururl = GetCurUrl();
if(preg_match('/dede\/login/i',$cururl))
{$redmsg = '<div class=\'safe-tips\'>您的管理目录的名称中包含默认名称dede,建议在FTP里把它修改为其它名称,那样会更安全!</div>';
}
else
{$redmsg = '';
}//登录检测
$admindirs = explode('/',str_replace("\\",'/',dirname(__FILE__)));
$admindir = $admindirs[count($admindirs)-1];
if($dopost=='login')
{$validate = empty($validate) ? '' : strtolower(trim($validate));$svali = strtolower(GetCkVdValue());if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){ResetVdValue();ShowMsg('验证码不正确!','login.php',0,1000);exit;} else {$cuserLogin = new userLogin($admindir);if(!empty($userid) && !empty($pwd)){$res = $cuserLogin->checkUser($userid,$pwd);//successif($res==1){$cuserLogin->keepUser();if(!empty($gotopage)){ShowMsg('成功登录,正在转向管理管理主页!',$gotopage);exit();}else{ShowMsg('成功登录,正在转向管理管理主页!',"index.php");exit();}}//errorelse if($res==-1){ResetVdValue();ShowMsg('你的用户名不存在!','login.php',0,1000);exit;}else{ResetVdValue();ShowMsg('你的密码错误!','login.php',0,1000);exit;}}//password emptyelse{ResetVdValue();ShowMsg('用户和密码没填写完整!','login.php',0,1000);exit;}}
}
include('templets/login.htm');


登录逻辑:

这里存在一个函数,两个参数:

checkUser()
$userid
$pwd

还注意到在代码的开头,包含了两个文件

require_once(dirname(__FILE__).'/../include/common.inc.php');
require_once(DEDEINC.'/userlogin.class.php');

我们先全局搜索checkUser()函数

这个地方定义了这个函数,我们分析以后,还是没有看见有用的信息,至少得找到数据库sql文件才行。但是经过一番查询后无果,所以我先决定尝试下弱口令。看看是否能登录进去

由于此登录框存在验证码登录,我们需要用到一个插件进行爆破。这里给出地址
地址:https://github.com/f0ng/captcha-killer-modified

配置教程:https://blog.csdn.net/weixin_72986003/article/details/144359468?ops_request_misc=%257B%2522request%255Fid%2522%253A%252242e73ae4142c000e7df9f2123c3842f0%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=42e73ae4142c000e7df9f2123c3842f0&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-9-144359468-null-null.142^v101^pc_search_result_base8&utm_term=%E9%AA%8C%E8%AF%81%E7%A0%81%E7%88%86%E7%A0%B4&spm=1018.2226.3001.4187

这里已经配置好了,我们现在就开始爆破:

成功找到弱口令密码,得到管理员账户与密码

管理员账户密码:
admin/admin

现在进行登录:查看后台存在那些功能点,根据后台功能点,我们去反向审计源代码,查看是否存在漏洞。

进入首页后,我们发现在附件管理一栏,发现存在上传文件的功能点

上述提示到,系统的上传附件/其他 类型的文件,可以通过其修改系统参数而进行更改,那我们现在就需要找到系统参数的修改功能点,添加后门文件类型。

那这个地方,在附件管理的允许上传文件的类型中,我们可以去添加我们想执行的后门文件类型,例如

.php/.jsp/.asp

等诸如此类的文件,这里我们先上传一个shell,看看是否能执行。

但是这里没有上传成功,那这个地方我们没办法再次进行利用,现在只能去审计源码,看看后台哪里还存在功能点。

审计到一处管理文件功能点:

dede/file_manage_main.php
<?php
/*** 文件查看** @version        $Id: file_manage_view.php 1 8:48 2010年7月13日Z tianya $* @package        DedeCMS.Administrator* @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.* @license        http://help.dedecms.com/usersguide/license.html* @link           http://www.dedecms.com*/
require_once(dirname(__FILE__)."/config.php");
CheckPurview('plus_文件管理器');
require_once(DEDEINC."/oxwindow.class.php");
$activepath = str_replace("..", "", $activepath);
$activepath = preg_replace("#^\/{1,}#", "/", $activepath);
if($activepath == "/") $activepath = "";
if($activepath == "") $inpath = $cfg_basedir;
else $inpath = $cfg_basedir.$activepath;//显示控制层
//更改文件名
if($fmdo=="rename")
{if($activepath=="") $ndirstring = "根目录";$ndirstring = $activepath;$wintitle = "&nbsp;文件管理";$wecome_info = "文件管理::更改文件名 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("filename",$filename);$win->AddTitle("更改文件名,当前路径:$ndirstring");$win->AddItem("旧名称:","<input name='oldfilename' type='input' class='alltxt' id='oldfilename' size='40' value='$filename'>");$win->AddItem("新名称:","<input name='newfilename' type='input' class='alltxt' size='40' id='newfilename'>");$winform = $win->GetWindow("ok");$win->Display();
}
//新建目录
else if($fmdo=="newdir")
{if($activepath=="") $activepathname="根目录";else $activepathname=$activepath;$wintitle = "&nbsp;文件管理";$wecome_info = "&nbsp;文件管理::新建目录 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("token",make_hash());$win->AddTitle("当前目录 $activepathname ");$win->AddItem("新目录:","<input name='newpath' type='input' class='alltxt' id='newpath'>");$winform = $win->GetWindow("ok");$win->Display();
}//移动文件
else if($fmdo=="move")
{$wintitle = "&nbsp;文件管理";$wecome_info = "&nbsp;文件管理::移动文件 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("filename",$filename);$win->AddTitle("新位置前面不加'/'表示相对于当前位置,加'/'表示相对于根目录。");$win->AddItem("被移动文件:",$filename);$win->AddItem("当前位置:",$activepath);$win->AddItem("新位置:","<input name='newpath' type='input' class='alltxt' id='newpath' size='40'>");$winform = $win->GetWindow("ok");$win->Display();
}//删除文件
else if($fmdo=="del")
{$wintitle = "&nbsp;文件管理";$wecome_info = "&nbsp;文件管理::删除文件 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("filename",$filename);if(@is_dir($cfg_basedir.$activepath."/$filename")){$wmsg = "你确信要删除目录:$filename 吗?";}else{$wmsg = "你确信要删除文件:$filename 吗?";}$win->AddTitle("删除文件确认");$win->AddMsgItem($wmsg,"50");$winform = $win->GetWindow("ok");$win->Display();
}//编辑文件
else if($fmdo=="edit")
{if(!isset($backurl)){$backurl = "";}$activepath = str_replace("..","",$activepath);$filename = str_replace("..","",$filename);$file = "$cfg_basedir$activepath/$filename";$content = "";if(is_file($file)){$fp = fopen($file,"r");$content = fread($fp,filesize($file));fclose($fp);$content = dede_htmlspecialchars($content);}$contentView = "<textarea name='str' id='str' style='width:99%;height:450px;background:#ffffff;'>$content</textarea>\r\n";$GLOBALS['filename'] = $filename;$path_parts  = pathinfo($filename);if ( $path_parts['extension'] == 'php' ){$GLOBALS['extension'] = 'text/x-php';} else if($path_parts['extension'] == 'js'){$GLOBALS['extension'] = 'text/javascript';} else if($path_parts['extension'] == 'css'){$GLOBALS['extension'] = 'text/css';} else {$GLOBALS['extension'] = 'text/html';}$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_edit.htm");$ctp->display();
}
/*编辑文件,可视化模式
else if($fmdo=="editview")
{if(!isset($backurl)){$backurl = "";}if(!isset($ishead)){$ishead = "";}$activepath = str_replace("..","",$activepath);$filename = str_replace("..","",$filename);$file = "$cfg_basedir$activepath/$filename";$fp = fopen($file,"r");@$content = fread($fp,filesize($file));fclose($fp);if((eregi("<html",$content) && eregi("<body",$content)) || $ishead == "yes"){$contentView = GetEditor("str",$content,"500","Default","string","true");}else{$contentView = GetEditor("str",$content,"500","Default","string","false");}$GLOBALS['filename'] = $filename;$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_edit_view.htm");$ctp->display();
}
*/
//新建文件
else if($fmdo=="newfile")
{$content = "";$GLOBALS['filename'] = "newfile.txt";$contentView = "<textarea name='str' style='width:99%;height:400'></textarea>\r\n";$GLOBALS['token'] = make_hash();$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_edit.htm");$ctp->display();
}//上传文件
else if($fmdo=="upload")
{$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_upload.htm");$ctp->display();
}

这个地方,上传的代码,并没有存在任何的上传过滤,对文件内容,以及常见的恶意文件后缀名没有进行任何的过滤,导致我们可以轻松获得shell。

成功上传shell。但是在平常的练习中,尽可能找到多的代码漏洞点。所以,我们继续审计代码,查看有无其他漏洞点。

/dede/media_main.php

在此处,我们发现,他调用了上述文件管理的功能点,所以这里也可上传shell,对应到web站点上

这里我就不在继续进行源码分析,我们先继续往下进行。

访问我们shell。使用蚁剑进行连接

shell地址:
http://192.168.50.128:8080/shell.php

成功获得flag
flag{78477a738c06620b872421af357d2cd5}

完成我们的DMZ区域的任务。

目标

拿下二层网络设备获取某服务内的flag

二层设备区域渗透

前期渗透准备

对于内网的渗透,我们前期要考虑诸多的因素,比如内网的首台机器,出不出网。这是一点,其次是内网环境到底是存在内网域或者是其他,渗透手法也不近相同。除此之外,内网的渗透其实和外网相差不大,但是在前期的信息收集等方面还是存在一定的差异。在前期渗透准备时,我们需要将我们的工具上传到我们此时已经拿到shell的服务器或者主机上。因为在宿主机上是不存在我们的渗透的工具的,如果宿主机出网,我们能够下载工具也无不可。

先连接蚁剑进行工具的上传

成功上传至我们的DMZ区域。现在就要进行信息的收集。

二层区域渗透

常见的来说,我们需要知晓在此机器上存在几张网卡,网段ip是什么。所以先行找到这个部分。

这里我们可以发现在二网卡的网段

192.68.60.0/24

所以现在就好办了,我们用我们已经上传的fscan进行扫描针对这个网段,看看能不能扫描出来一些有用的东西。

成功扫描以后,会在fscan的当前目录下生成一个result.txt文件,我们可以进行查看。

在其扫描的结果内我们可以看见,我们的fscan的POC扫描成功扫描出来一个在192.168.60.129的8848的一个nacos的一个漏洞。

由于我们的攻击机是不能直接访问到二层设备区域的,这里咱们使用frp进行反向代理,使我们的攻击机也能正常访问我们的二层区域。

在kali攻击机中开启fprs.exe(服务端),frps.toml配置文件默认为7000端口,用于和客户端进行交互

然后在kali上开启服务,

再在DMZ区域进行连接。

这里就已经成功了。我们可以尝试用kali的工具去测试一下到底是否能连接成功。

成功能ping到。我们现在就对刚才那个漏洞进行测试。

这里用nuclei也能扫描到一些漏洞

因为这些密码是加密以后的,还原还是比较困难,或者大家可以去CMD5上面去查,我没钱,就只能用漏洞重置密码了。

文章分析:
https://blog.csdn.net/weixin_51345872/article/details/127066347?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522cb0d78319a8457953a471f680a14840e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=cb0d78319a8457953a471f680a14840e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-127066347-null-null.142^v101^pc_search_result_base8&utm_term=nacos-authentication-bypass&spm=1018.2226.3001.4187

/nacos/v1/auth/users?username=test123&password=test123

访问上述路由后会创建一个账号

账号密码:
test123/test123

成功创建,这里创建账号的时候我们使用的POST方式。并不是GET。

创建成功后,直接登录:

这是第一个flag

注意到还有其他的信息,我们这里看到。

存在一个password。当然现在不知道是哪里的密码。我们这里再用namp去扫一扫。

这里用nmap进行扫描的时候,我们也要进行代理,这里我们用proxychains进行代理。

在/etc/proxychains4.conf,添加如下配置。

这个地方就和刚才我们在frp中的攻击机地址一样即可。我们在进行nmap扫描的时候,就需要加一个前缀进行代理扫描。

例如:

这里纯扫描是不能行的,开启代理扫即可

这里扫出来了一个/phpinfo.php

我们能够得到一些敏感信息:

/var/www/html

能够得到我们的绝对路径

我们之前用fscan的方式也扫描出来一个redis的默认服务端口6379,那我们之前得到一个密码现在就起到了一个作,我们可以写一个shell进去。

config set dir /var/www/html
config set dbfilename shell.php
set x "\r\n\r\n<?php @eval($_POST['cmd']);?>"
save

前往蚁剑进行连接,此处可以使用蚁剑自行配置代理,或proxifier指定文件

在根目录下找到flag。

到这里第二层的渗透也结束了,我们现在要准备进行第三层的渗透测试

三层区域信息收集

老样子上传fscan到二层设备上

这里扫描出来一个MS17-010的漏洞

直接利用工具进行注入利用

然后再注入dll文件

这个过程中会创建一个账号密码分别为:

admin01/Config123!@#

我们进行连接

成功获得flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19769.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek-R1:通过强化学习激励大模型的推理能力

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; DeepSeek 第一代推理模型&#xff08;reasoning models&#xff09; &#xff08;所以缩写为 R1&#xff09;的设计和训练过程&#xff1a; 要理解 DeepSeek-R1 的创新之处&#xff0c;可以先阅读 如何训…

演绎推理及其与数学的关系介绍

演绎推理及其与数学的关系介绍 什么是演绎推理&#xff1f; 演绎推理&#xff08;Deductive Reasoning&#xff09;是一种逻辑推理方法&#xff0c;它从一般性的规则或前提出发&#xff0c;得出一个具体的、必然正确的结论。换句话说&#xff0c;只要前提&#xff08;Premise&…

【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例

&#x1f680; Git 工作区 → 暂存区 → 本地仓库 → 回退实战 Git 的核心流程是&#xff1a; &#x1f449; 工作区&#xff08;Working Directory&#xff09; → git add → 暂存区&#xff08;Staging Area&#xff09; → git commit → 本地仓库&#xff08;Local Repos…

胶囊网络动态路由算法:突破CNN空间局限性的数学原理与工程实践

一、CNN的空间局限性痛点解析 传统CNN的瓶颈&#xff1a; 池化操作导致空间信息丢失&#xff08;最大池化丢弃85%激活值&#xff09;无法建模层次空间关系&#xff08;旋转/平移等变换不敏感&#xff09;局部感受野限制全局特征整合 示例对比&#xff1a; # CNN最大池化示例…

如何下载AndroidStudio的依赖的 jar,arr文件到本地

一、通过jitpack.io 下载依赖库 若需要下载 com.github.xxxxx:yy-zzz:0.0.2 的 jar则 https://jitpack.io/com/github/xxxxx/yy-zzz/0.0.2/ 下会列出如下build.logyy-zzz-0.0.2.jaryy-zzz-0.0.2.pomyy-zzz-0.0.2.pom.md5yy-zzz-0.0.2.pom.sha1jar 的下载路径为https://jitpack…

Ubuntu中离线安装Docker

Ubuntu中离线安装Docker 前言 本教程将详细介绍如何在 Ubuntu 22.04 系统上&#xff0c;通过 .deb 包离线安装 Docker CE、Docker CE CLI 和 Docker Compose。 适用于无法访问互联网的环境。 准备工作 下载 .deb 包 在可以访问互联网的机器上&#xff0c;下载 Docker CE、…

【科研创新与智能化转型】AI智能体开发与大语言模型的本地化部署、优化技术

智能体&#xff08;Agent&#xff09;是指能够感知环境、自主决策并采取行动以实现特定目标的实体。它可以是一个软件程序、机器人或任何具备自主行为的系统。智能体的核心特征包括自主性、反应性、目标导向性和社会性。 智能体的主要特征 自主性&#xff1a;能够在没有外部干预…

【拒绝算法PUA】LeetCode 1287. 有序数组中出现次数超过25%的元素

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结&#xff1a; [温习C/C]0x04 刷…

6.2.4 基本的数据模型

文章目录 基本的数据模型 基本的数据模型 基本的数据模型包含层次模型&#xff0c;网状模型和关系模型。 层次模型&#xff1a;使用树型结构表示数据间联系。记录间的联系用指针实现&#xff0c;简单高效。但是只能表示1:n的联系&#xff0c;且对插入、删除的限制多。网状模型…

前端JS接口加密攻防实操

前端JS接口加密攻防实操 背景 在爬虫过程中&#xff0c;对数据接口各类加密的经历总结&#xff0c;无头消耗资源效率不高&#xff0c;采用浏览器兜底解密协程并行 青铜版(混淆对称加密|签名nonce等&#xff09; 解&#xff1a;根据API 调用栈&#xff0c;断点找到request参…

嵌入式AI(2)清华大学DeepSeek 01:从入门到精通

嵌入式AI(2)清华大学DeepSeek 01&#xff1a;从入门到精通

SpringBoot+Vue+数据可视化的动漫妆造服务平台(程序+论文+讲解+安装+调试+售后等)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今数字化高速发展的时代&#xff0c;动漫产业迎来了前所未有的繁荣&#xff0c;动漫…

Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)

一、依赖包(Ubuntu 20.04/Debian 11) 点击下载https://www.spark-app.store/download_dependencies_latest 1、 下载最新的依赖包。 请访问星火应用商店依赖包下载页面, 下载最新的依赖包。2、解压依赖包 </

假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的区别又是什么?

前言&#xff1a;本篇文章解释了接口学习过程中的2个常见问题&#xff0c;一个是“为什么是类在使用接口”&#xff0c;另一个一个是“编程接口与物理接口的差异源于所处的抽象层次和交互模式的不同”&#xff0c;旨在揭示编程接口的本质。 Part1.是类在使用接口 当学习接口时…

python opencv基础使用总结

1.安装opencv库&#xff1a;pip install opencv-python 2.基础使用范例 import cv2 #图片的基本操作#1.读取一张图片 参数 1&#xff1a;图片的文件名如果图片放在当前文件夹下&#xff0c;直接写文件名就行&#xff0c;如lena.jpg否则需要给出绝对路径&#xff0c;如D:\Ope…

C++17 数学特殊函数:探索标准库中的强大工具

文章目录 1. 什么是数学特殊函数&#xff1f;2. C17 中的特殊函数2.1 贝塞尔函数2.2 勒让德函数2.3 椭圆积分2.4 伽马函数2.5 误差函数 3. 实际应用场景3.1 科学计算3.2 工程应用3.3 数据分析 4. 总结 在 C17 中&#xff0c;标准库引入了一系列数学特殊函数&#xff0c;这些函数…

mysql多主集群 galera cluster for mysql 8安装配置启动重启集群

[TOC] 一、安装mysql 1、安装 系统环境&#xff1a; Ubuntu 18.04 64位 MySQL 8.0.19 下载MySQL APT安装配置包 首先访问 https://dev.mysql.com/downloads/repo/apt/ 获取配置包下载地址 wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb sudo dpkg -i mysq…

面向长范围交互式 LLM 智体的强化学习

25年2月来自 Apple 的论文“Reinforcement Learning for Long-Horizon Interactive LLM Agents”。 交互式数字智体 (IDA) 利用状态数字环境的 API 来执行任务以响应用户请求。虽然由指令调整的大语言模型 (LLM) 驱动 IDA 可以对多步交换中接口调用的反馈做出反应&#xff0c;…

sql语言语法的学习

sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例&#xff1a; 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据 DML修改数据 DQL 单表查询 基础查询 条件查询 案例演示&#xff1a; 排序查询 聚合函数 分组查询…

kkFileView二开之pdf转图片接口

kkFileView二开之Pdf转图片接口 kkFileView二开系列文章&#xff1a;1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 kkFileView二开系列文章&#x…