前言
apache有一个cgi模块,该模块可以设置指定文件类型以cgi方式让服务器运行,例如一个不存在的afaafa后缀文件,通过设置,就可以当作cgi运行,因为是直接服务器运行的,所以可以绕过php的disable_functions限制。环境搭建
说是环境需要是linux、apache+php、apache开启cgi和rewrite、web目录有allowoverride权限、当前目录可写,看着感觉很难搭建,所以这里就直接使用蚁剑的docker环境进行测试。
地址:
https://github.com/AntSwordProject/AntSword-Labs/tree/master/bypass_disable_functions/3
相关命令如下:
git clone https://github.com/AntSwordProject/AntSword-Labs.gitcd到3文件夹下docker-compose up -d
手动测试(失败)
这里以afaafa后缀为例,这里最好使用一个未知的后缀,如果使用已知的,apache解析可能会碰到问题,导致无法当作cgi执行。
afa.afaafa文件中写入相关shell,示例如下。
#!/bin/shecho&id
然后再建一个.htaccess文件,内容如下,意思是把afaafa文件当作cgi执行。
OPtions +ExecCGIAddHandler cgi-script .afaafa
创建好后,将这两个文件传到服务器。
这时访问afa.afaafa文件会提示服务器内部错误。
原因是该文件没有执行权限,可以看到权限是0644,需要改成0777,修改方法有两种,一种是直接通过类似蚁剑的软件直接右键修改权限,另一种可以通过php的chmod修改,如下图。
然后再访问还是报内部错误。后来用蚁剑插件测试,插件运行后会自动弹一个命令窗口出来,如果不在这个窗口执行下命令,则访问也是内部错误。
蚁剑测试
蚁剑测试选择apache_mod_cgi模式,运行后会弹出一个命令行,如下图。
这时如果不运行命令,直接访问shell.ant,刷新了很多遍,一直是错误页。
如果去命令行随便输入一个命令,再次访问shell.ant文件才会正常。
总结
无。