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

【Web】Ctfshow SSRF刷题记录1

核心代码解读

<?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.lryc.cn/news/238804.html

相关文章:

  • 【算法挨揍日记】day30——300. 最长递增子序列、376. 摆动序列
  • ROS2对比ROS1的一些变化与优势(全新安装ROS2以及编译错误处理)《1》
  • 基于单片机PM2.5监测系统仿真设计
  • CRM系统中的联系人是什么?如何进行联系人管理?
  • uniapp:如何实现点击图片可以全屏展示预览
  • python运行hhsearch二进制命令的包装器类
  • Java 网络编程、e-mail、多线程编程
  • 为虚幻引擎开发者准备的Unity指南
  • Vue 2使用element ui 表格不显示
  • C++学习 --文件
  • java/Android:将字符串按数量分割
  • JVM 监控命令详解
  • TEE威胁评分与评级
  • -bash: ./deploy.sh: /bin/bash^M: bad interpreter: No such file or directory
  • 【文末送书】十大排序算法C++代码实现
  • vue-waterfall2 实现瀑布流,及总结的问题
  • grafana二次启动失败
  • C/C++杂谈-printf的可变参数机制
  • es基本语法 (kibana)
  • Tesco EDI需求分析
  • html常用的标签
  • 4.14每日一题(二元函数求极值:常规方法、先代后求法)
  • 护眼灯什么价位的好?适合学生入手的护眼台灯推荐
  • 大数据架构
  • 【Linux】C文件系统详解(四)——磁盘的物理和抽象结构
  • 论文-分布式-拜占庭将军问题
  • 万字解析设计模式之 适配器模式
  • Linux 安全 - 扩展属性xattr
  • spring boot加mybatis puls实现,在新增/修改时,对某些字段进行处理,使用的@TableField()或者AOP @Before
  • 我的创作纪念日2048天