php-fpm(绕过open_basedir,结合ssrf)
2024-09-04 02:13:15
环境的安装->https://www.cnblogs.com/zaqzzz/p/11870489.html
1.nginx的畸形访问
因为安装的是php7.0,所以需要手动修改一下(版本低的时候没有这种防护措施)
fpm里面的security.limit_extensions默认只执行.php的文件
vi /etc/php/7.0/fpm/pool.d/www.conf
把php-fpm.conf文件里面的security.limit_extensions前边的分号去掉,把值设置为空,这样就可以执行任意的文件了,也可以试试把fpm关掉。
cgi.fix_pathinfo这个参数为1的时候,访问:
ip:/*.*/.php
例如ip/1.jpg/.php,这里1.jpg的内容是<?php phpinfo();?>
因为 1.jpg/.php (把他看成一个整体)不存在,但是cgi.fix_pathinfo的原因,去掉/后边的参数,可以找到1.jpg,就会把jpg当作php执行。
执行图:
2. fpm未授权访问
原因:
fpm的9000端口暴露在公网上,其实默认文件是只有本地才可以访问的。
复现:
vi /etc/php/7.0/fpm/pool.d/www.conf
;listen=127.0.0.1:9000修改为listen=0.0.0.0:9000
复现脚本
https://gist.github.com/phith0n/9615e2420f31048f7e30f3937356cf75
执行
python3 fpm.py ip /var/www/html/index.php -c "<?php echo `whoami`; ?>"
为什么要选择:/var/www/html/index.php
因为security.limit_extensions默认只允许php文件执行,当然最好猜的是web目录下的index.php了,如果这个配置值为空的时候(需自己手动修改),就可以返回任意文件。
当我们手动修改security.limit_extensions为空,执行命令:
python3 test.py ip /etc/passwd
这里并不会输出passwd的内容,而是输出phpinfo()的内容,在p牛博客底下问,因为不加-c参数的时候,默认执行phpinfo();exit();,所以返回phpinfo()后exit()结束,就不会返回passwd的内容了。或者直接执行命令
python3 test.py ip /etc/passwd -c ""
修改代码:
成功读取文件:
还有个问题,如果security.limit_extensions只允许php文件执行,但是你爆破不出web的目录的话,也可以利用主机上任意的一个php文件(执行搜索: find / -name "*.php" )。
假设靶机的根目录下存在1.php
python3 fpm.py ip /1.php -c "<?php echo `whoami`; ?>"
3.fpm未授权访问存在 open_basedir 的限制
open_basedir限制了php能访问的目录
复现:
vi /etc/php/7.0/cli/php.ini
修改open_basedir的值,限制只在访问web目录下的文件
别忘了重启
发现已经不能访问根目录的1.php文件了
修改代码:
作用是修改了php的参数,可访问目录是全部目录
运行脚本,又可以继续访问了
4.ssrf+FastCgi
如果fpm不在外网开放,我们可以通过ssrf进行攻击(如果存在ssrf漏洞的地方)
vi /etc/php/7.0/fpm/pool.d/www.conf
listen=0.0.0.0:9000改为listen=127.0.0.1:9000,只允许本地访问
假设存在ssrf.php
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
利用gopher协议攻击(脚本在github)
因为是get传参,所以要url编码,如果是post方式,则这一步不需要,编码使用burp来实现
burp截包,url的值改为gopher的内容,然后用burp编码
编码后
发送包,成功执行了 whoami这条命令
最新文章
- C#执行Dos命令公用方法
- POJ1390Blocks(DP+好题+抽空再来理解理解)
- - >;code vs 1475 m进制转十进制
- centos中安装字体
- 使用log4net 日志输出到数据库MySQL
- hibernate进行多表联合查询
- 启动 mysql 失败 Warning:The /usr/local/mysql/data directory is not owned by the &#39;mysql&#39; or &#39;_mysql&#39;
- 小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入
- IP地址的分类——a,b,c 类是怎样划分的
- Oracle数据库中将一个数据库中一张表的数据导入到另外一张表
- zoj 2229 Ride to School
- Palindrome(Manacher)
- 基于visual Studio2013解决C语言竞赛题之0612递归
- asp.net 下载任意格式文件 上传文件后台代码
- Linux 朝花夕拾
- 在C++中,setw(int n)
- Git命令集
- 没钱买windows怎么办?
- lambda函数的特性
- Windows下如何更新 node.js
热门文章
- win中使用curl上传文件报错
- laravel中引入composer安装在vendor中的第三方组件
- win server服务器 关闭危险端口 135,137,138,139,445的方法
- IT 界那些朗朗上口的“名言”
- mysql workbench使用技巧,使用workbench导出部分表
- linux 优化
- Python中的memoryview
- BZOJ 3887/Luogu P3119: [Usaco2015 Jan]Grass Cownoisseur (强连通分量+最长路)
- electron 打包成桌面运用
- JSON格式数据