提权概念
- 提权:提高自己在服务器中的权限,主要针对网站入侵过程中,当入侵某一网站时,通过各种漏洞提升WEBSHELL权限以夺得该服务器权限。
Linux概念
Linux内核版本
使用一下命令查看Linux内核版本
1 | uname -srm |
Linux 3.10.0-957.12.2.el7.x86_64 x86_64
- 3 - 内核版本.
- 10 - 主修订版本.
- 0-957 - 次要修订版本.
- 12 - 补丁版本.
Linux下的用户权限
用户管理
按照UID划分:
- 0为超级用户root
- 500-6000为普通用户
- 1-499为伪用户,不能登录,用于处理系统进程
/etc/passwd
/etc/passwd
存储用户的基本信息
例子:
1 | root:x:0:0:root:/root:/bin/bash |
其中shell部分:
- /sbin/nologin不允许登录系统和使用shell
- /bin/false是最严格的禁止登录选项,一切服务均不能用
修改用户shell
1 | usermod -s /bin/false username |
/etc/shadow
/etc/shadow
是用户口令文件
例子:
1 | root:$6$duveWLyJsvTXZE4j$MrFtzxUN9khvw/uoWzIfpjZr/T.1H7InrqckFYMt1fxKh/s7PenGYUznE6EasluKRp1n7xti5jpv6bGmYvwXo.:18544:0:99999:7::: |
同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 :
作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:
1 | 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段 |
其中第二个字段中的数字代表以下加密方式
- $1 = MD5 hashing algorithm.
- $2 =Blowfish Algorithm is in use.
- $2y=eksblowfish Algorithm
- $5 =SHA-256 Algorithm
- $6 =SHA-512 Algorithm
空代表可以使用空密码登录
需要开启/etc/ssh/sshd_config中的
PermitEmptyPasswd
选项为yes
星号表示账号被锁定
双叹号表示密码已过期
生成密码
openssl
-6 SHA512-based password algorithm
-5 SHA256-based password algorithm
-salt val — Use provided salt
简单用法
1
openssl passwd -6 linux
自定义salt
1
openssl passwd -6 -salt salt linux
mkpasswd
Available methods:
sha512crypt SHA-512
sha256crypt SHA-256
md5crypt MD5
descrypt standard 56 bit DES-based crypt(3)Example: mkpasswd -m {algo} {password}
1
2mkpasswd -m md5crypt linux
# $1$.RDau/ZZ$Bkh4OXLZ6/mk6x2szP.x1/
用户创建及删除
主要用到useradd命令
1 | useradd [-c comment] [-d home_dir] |
-u UID: 手工指定用户的 UID,注意手工添加的用户的 UID 不要小于 500;
-d 家目录:手工指定用户的家目录。家目录必须写绝对路径,而且如果需要手工指定家目录,则一定要注意权限;
-c 用户说明:手工指定用户说明。还记得 /etc/passwd 文件的第五个字段吗?这里就是指定该字段内容的;
-g 组名:手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。如果不想使用默认初始组,则可以用 -g 手工指定。不建议手工修改;
-G 组名:指定用户的附加组。我们把用户加入其他组,一般都使用附加组;
-s shell:手工指定用户的登录 Shell。默认是 /bin/bash;
-e 曰期:指定用户的失效曰期,格式为”YYYY-MM-DD”。也就是/etc/shadow文件的第八个字段;
-o 允许创建的用户的 UID 相同。例如,执行”useradd -u 0 -o usertest”命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0;
-m 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的;
-f 指定在密码过期后多少天即关闭该账号。
-M 不要自动建立用户的登入目录。
-n 取消建立以用户名称为名的群组。
-r 建立系统账号。
useradd账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在
/etc/passwd
文本文件中。
操作如下
1 | #创建用户 |
删除用户
1 | sudo userdel test |
用户组管理
组分为私有组和标准组,如果创建用户的时候没有指定加入哪个组,就默认创建一个同名私有组
用户组管理文件:/etc/group
例子:
1 | test:x:1001: |
分为四个部分:
- 组名:test
- 组口令:一般不使用
- 组标识码(GID):1001
- 组内用户列表:属于改组的所有用户列表
常见操作
1 | #添加用户组 |
sudoers结构
sudoers文件位于/etc/sudoers
sudoers流程
sudo需要输入密码的情况
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
–>确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
–>若密码输入成功,则开始执行sudo后续的命令sudo不需要输入密码的情况
1.root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
2.欲切换的身份与执行者的身份相同,不需要输入密码
3./etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
( %wheel ALL=(ALL) NOPASSWD: ALL)
sudoers利用
可以通过设置sudoers对普通用户进行提权,比如将普通用户设置为sudo时不需要输入密码即可执行root可执行的权限
1 | visudo |
Windows概念
Windows下的用户
Windows下用户大概分为以下四种
- User: 普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)。
- Administrator:管理员权限。可以利用Windows的机制将自己提升为System权限,以便操作SAM文件等。
- System:系统权限。可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到System权限才可以对散列值进行Dump操作。
- TrustedInstaller: Windows 中的最高权限。对系统文件,即使拥有System权限也无法进行修改。只有拥有TrustedInstaller 权限的用户才可以修改系统文件。
低权限级别将使渗透测试受到很多限制。在 Windows 中,如果没有管理员权限,就无法进行获取散列值、安装软件、修改防火墙规则、修改注册表等操作。
Windows操作系统中管理员账号的权限,以及Linux操作系统中root账户的权限,是操作系统的最高权限。提升权限(也称提权)的方式分为以下两类。
纵向提权:低权限角色获得高权限角色的权限。例如,一个 WebShell 权限通过提权,拥有了管理员权限,这种提权就是纵向提权,也称作权限升级。
横向提权:获取同级别角色的权限。例如,在系统A中获取了系统B的权限,这种提权就属于横向提权。
常用的提权方法有系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、Web 中间件漏洞提权、DLL劫持提权、滥用高权限令牌提权、第三方软件/服务提权等。
提权POC大全
https://github.com/SecWiki/linux-kernel-exploits
http://3xp10it.cc/web/2016/09/18/%E6%8F%90%E6%9D%83/