首页 > 其他分享 > Web安全入门与靶场实战(32)- 利用find提权

Web安全入门与靶场实战(32)- 利用find提权

时间:2023-02-10 10:04:23浏览次数:36  
标签:Web 调用 提权 exec 32 命令 root find

在上篇文章中,我们找到了靶机中的find命令被设置了SUID权限,那么如何利用find来提权呢?这里需要用到find命令的exec处理动作。

之前说过,find属于Linux中比较复杂的一个命令,主要原因就是它的各种选项和用法太多了,其中exec处理动作就属于find命令的一种比较高级的用法。

所谓的“处理动作”是指我们不仅能用find命令来查找,而且还可以对找到的结果进行进一步的处理,比如删除或复制等。

比如要找出/tmp目录中所有后缀为“.txt”的文件并将其删除,就可以执行下面的命令:

[root@localhost  ~]# find /tmp -name  "*.txt" -exec rm -f {} \;

使用exec时在格式上有一些固定要求:

  •   在“-exec”的后面要跟上进一步处理所要执行的命令,这里就是去调用执行rm命令。
  •   符号“{}”用于表示find命令查找到的结果。
  •   在命令的最后必须添加“ \;”表示命令结束(注意前面有个空格)。

再比如要找出/boot目录下所有以“init”开头的文件,并将它们全部复制到/tmp目录中:

[root@localhost  ~]# find /boot -name  "init*" -exec cp {} /tmp \;

如果能理解上面这两条命令,对exec处理动作也就掌握的差不多了。我们继续对靶机进行操作。

因为通过exec可以调用其它命令,而靶机中的find命令又被设置了SUID权限,所以两者结合,我们就可以root身份去调用执行各种命令了。

比如想去查看一下root家目录里的文件,这个操作对于我们当前所使用的www-data用户本来是没有权限的,但是现在通过exec动作去调用ls命令就可以实现:

 Web安全入门与靶场实战(32)-  利用find提权_提权

再继续去查看终极flag的内容:

 Web安全入门与靶场实战(32)-  利用find提权_提权_02

在上面这两条命令中,都是先用find找到了一些指定的文件,然后再用exec调用其它命令对其进行处理。但其实exec并非只能对find找到的结果进行处理,exec要调用执行的操作也可以跟找到的结果没有任何关系,当然前提是find要查找的文件必须是存在的,否则就会报错。

比如下面的2条命令,分别让find在当前目录下查找a.txt和b.txt,只要文件能找到,那么exec后面调用的命令就可以执行,无论这个命令与要找的文件之间是否有关系。但如果文件找不到,find就会报错,exec后面的命令也就无法执行。

 Web安全入门与靶场实战(32)-  利用find提权_bash_03

我们的最终目录是利用find来提权。再次回顾一下提权的主要思路:以root身份去执行bash、sh等Shell程序。

所以这里很明显也是要通过exec去调用执行Shell程序,下面的命令就是随便去查找一个在当前目录下存在的文件,保证find命令能正常执行,然后再通过exec去执行sh,从而以root身份打开一个Shell,成功提权。

 Web安全入门与靶场实战(32)-  利用find提权_提权_04

在上面的命令中,我们运行的是sh,为什么不使用传统的bash呢?这是因为 bash在执行时会自动检测euid(即suid),如果发现euid和uid不匹配,就会将euid强制重置为uid。

所以bash对这种利用suid提权的方式做了安全防御,如果不想使用bash的这种防御机制,可以加上-p选项,这样就不会再覆盖uid了。

 Web安全入门与靶场实战(32)-  利用find提权_Shell_05

至此我们就成功实现了提权,并拿到了终极flag。

标签:Web,调用,提权,exec,32,命令,root,find
From: https://blog.51cto.com/yttitan/6048613

相关文章

  • 算法随想Day9【栈与队列】| LC232-用栈实现队列 、LC225-用队列实现栈
    LC232.用栈实现队列之前看过相关的实现方法,但在想具体实现上,还是略显冗余。我的思路是,用一个标志位method记录当前是push或pop/top操作,如果有操作的更换,都进行一次栈元......
  • C#.NET WEB项目大文件上传下载解决方案
    ​ IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag     ......
  • web前端 Promise.all、Promise.allSettled方法
    Promise.allSettled执行多个Promise对象实例,配合await使用,可以达到等待任务全部完成后再继续执行的效果。返回值是一个成功的Promise,其内部值为参数中的Promise的执行结......
  • 不用Blazor WebAssembly,开发在浏览器端编译和运行C#代码的网站
    本文中,我将会为大家分享一个如何用.NET技术开发“在浏览器端编译和运行C#代码的工具”,核心的技术就是用C#编写不依赖于Blazor框架的WebAssembly以及Roslyn技术。一、为什......
  • 【Web】emscripten编译ffmpeg
    编译命令:emconfigure./configure--cc="emcc"--cxx="em++"--ar="emar"--ranlib=emranlib--prefix=$(pwd)/dist--enable-cross-compile--target-os=none--arch=x86......
  • 《剑指Offer》-32-从上到下打印二叉树/力扣-102/力扣-103
    就是二叉树的层序遍历,我记得这题,用栈用队列,然后有个关键的size()Ⅰ vector<int>levelOrder(TreeNode*root){ vector<int>res; if(!root)returnres; queue<T......
  • 解决PyQtWebEngine安装缓慢的问题
    在使用PyQtWebEngine时候,发现pyqt5由于版本高而没有PyQtWebEngine。于是安装但是在使用清华源的时候,发现下载非常慢。我通过各种方式进行测试均需要9小时才能下载。原因未......
  • 明解STM32—GPIO理论基础知识篇之基本结构
    ​一、前言        万物皆有源头,大家学习单片机的源头操作就是通过GPIO口点灯,GPIO作为STM32最基础的外设,也是大家最先接触的外设。当然,看似基础的GPIO,不仅仅是简......
  • 明解STM32—GPIO理论基础知识篇之基本结构
     一、前言        万物皆有源头,大家学习单片机的源头操作就是通过GPIO口点灯,GPIO作为STM32最基础的外设,也是大家最先接触的外设。当然,看似基础的GPIO,不仅仅是简单......
  • web.xml文件简述
    tomcat的conf中:是全局配置,配置公共信息。Web项目中:是局部配置,只针对本项目有效。加载顺序:ServletContext->context-param->listener->filter->se......