极客大挑战 2019 RCE ME
本文最后更新于:2023年10月15日 晚上
[极客大挑战 2019]RCE ME
分析
1 |
|
这是一道无字母数字RCE
绕过方法有很多,比如取反、异或等。
传入phpinfo()
测试:
1 |
|
直接将命令异或或者取反即可 取反后也有带数字字母的编码,为什么就可以呢,因为取反后url进行编码会将其编码为无法识别的字符,从而绕过无字母无数字的过滤
还有为什么不能直接
phpinfo()
取反当
(~%8F%97%8F%96%91%99%90%D7%D6);
被当作代码执行时的第一步就是取反操作~
但是取反得到的字符串
phpinfo()
并不会被当作代码执行,因为在取反之前PHP解释器并不知道这原来是phpinfo()
1 |
|
这样相当于"phpinfo"();
,即phpinfo();
(php可变函数)
禁用了很多函数
1 |
|
为了安全起见,很多运维人员会禁用
PHP
的一些“危险”函数,例如eval
、exec、system等,将其写在php.ini
配置文件中,就是我们所说的disable_functions
了,特别是虚拟主机运营商,为了彻底隔离同服务器的客户,以及避免出现大面积的安全问题,在disable_functions
的设置中也通常较为严格。如果在渗透时,上传了webshell
却因为disable_functions
禁用了我们函数而无法执行命令的话,这时候就需要想办法进行绕过,突破disable_functions
。
构造shell
在这里,我们不能直接使用eval 因为 所以为我们无法通过变量函数的方法进行调用。
在这里,我们使用 assert 来构造,但由于php版本问题,我们并不能直接构造<?php assert($_POST[‘a’]);>我们需要调用eval
拼接为assert(eval($_POST[test]))
翻了十几篇博客,大部分没有解释这个马是怎么来的,只找到这个不怎么清楚的解释
1 |
|
构造脚本:
1 |
|
1 |
|
蚁剑连接
根目录里有flag和readflag
flag读不了,只能尝试运行readflag
而绕过diseable_funtion才能运行readflag
可使用蚁剑插件
得到flag
参考
绕过Disable Functions来搞事情 - FreeBuf网络安全行业门户