这里先获取path路径。
此处解析上传的恶意sql文件,此处$sql为我们的恶意sql语句,经过了一处正则匹配,然而并没什么用。
从$sql=$trasfer->getQuery($sql)开始一行一行执行我们的sql语句直至完成操作。
但是利用SQL语句写shell,需要知道绝对路径和高权限,不管那么多,先去找找绝对路径,万一这个点可以利用岂不是美滋滋。
Getshell返回目标寻找绝对路径,在翻js时,由于目标明确直接搜索path关键字找到了我所需要的东西。
接下就是去构造一个SQL文件写入小马。
执行导入,写入小马,这里用一句话上传了冰蝎,连接
一切都这么顺理成章,简直就是上帝的宠儿。然而现实它狠狠的给了我一巴掌
发现不能执行命令,无法执行命令的 webshell 是毫无意义的,查看phpinfo
禁用函数:
passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
发现没有禁用putenv,尝试Bypass disable_functions,利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意 .so,达到执行系统命令的效果。php文件是需要上传到目标的执行命令的脚本.so是编译后的bypass_disablefunc_x64.so
基本原理
在 Linux 中已安装并启用 sendmail 程序。php 的 mail() 函数在执行过程中会默认调用系统程序 /usr/sbin/sendmail,而 /usr/sbin/sendmail 会调用 getuid()。通过 LD_PRELOAD 的方式来劫持 getuid(),再用 mail() 函数来触发 sendmail 程序进而执行被劫持的 getuid(),从而就能执行恶意代码了。