0x01.参考博客
https://evoa.me/archives/21/
这篇博客讲的一个类似的漏洞,而且比这题时间早很久,强烈怀疑出题人是参考的这个洞…
evoa大佬太强了

gin框架

0x02.题解
xxxx的部分为我的vps,vps上的内容为

<?php
header("Location: http://127.0.0.1/index.php?file=/flag");
?>

0x03.题目分析

#index.php
<?php
// php in localhost port 80
readfile($_GET['file']);
?>

可以看出index.php中有readfile函数可以读取文件,但放在了80端口

func vulController(c *gin.Context) {var url Urlif err := c.ShouldBindJSON(&url); err != nil {c.JSON(500, gin.H{"msg": err})return}if !strings.HasPrefix(url.Url,"http://127.0.0.1:1234/"){c.JSON(403, gin.H{"msg": "url forbidden"})return}client := &http.Client{Timeout: 2 * time.Second}resp, err := client.Get(url.Url)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}defer resp.Body.Close()var buffer [512]byteresult := bytes.NewBuffer(nil)for {n, err := resp.Body.Read(buffer[0:])result.Write(buffer[0:n])if err != nil && err == io.EOF {break} else if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}}c.JSON(http.StatusOK, gin.H{"data": result.String()})
}

vulController检测POST到/vul下的url,如果符合条件(http://127.0.0.1:1234/)才会200

然后解这道题的关键在于gin框架中用到的中间件

func fileMidderware (c *gin.Context){fileSystem := http.Dir("./files/")if c.Request.URL.String() == "/"{c.Next()return}f,err := fileSystem.Open(c.Request.URL.String())if f == nil {c.Next()}//if err != nil {c.Next()return}defer f.Close()fi, err := f.Stat()if  err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}if fi.IsDir() {if !strings.HasSuffix(c.Request.URL.String(), "/") {c.Redirect(302,c.Request.URL.String()+"/")} else {files := make([]string,0)l,_ := f.Readdir(0)for _,i := range l {files = append(files, i.Name())}c.JSON(http.StatusOK, gin.H{"files" :files,})}} else {data,_ := ioutil.ReadAll(f)c.Header("content-disposition", `attachment; filename=` + fi.Name())c.Data(200, "text/plain", data)}}

这个代码会判断传入的url是不是目录,如果是目录的话且不以/结尾,会在最后加上/
而这时如果传入我们的payload,由于一般路径会 … 结尾,http.FileSystem会认为他是一个路径,fi.IsDir()为真,并且路径并不是/结尾,if !strings.HasSuffix(ctx.Req.URL.Path, “/”)为true,就会跳转,由于302的漏洞会转到我们的服务器上,然后再通过我们服务器上php文件,跳转到靶机的127.0.0.1:80上,并根据get请求输出flag

0x04.302重定向漏洞
https://blog.csdn.net/wst0717/article/details/83275253

开放重定向(CWE-601: URL Redirection to Untrusted Site),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网站

这里实现的方式是通过在常规url后面+//,这样他实际会跳转到新加的//后面的url

津门杯GoOSS和302重定向漏洞相关推荐

  1. [津门杯]全部WEB题解

    津门杯WEB题解 日常比赛被爆,感谢队里教我题的大师傅 power_cut 存在一个.index.php.swp文件,vim -r 恢复一下 <?php class logger{public ...

  2. [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.这篇文章主要介绍5月9日参加津门杯CTF题目知识,包括power_cut.hate_ ...

  3. python漏洞检测脚本_URL重定向漏洞,python打造URL重定向漏洞检测脚本

    前言: 今天学习了重定向漏洞,这个漏洞比较好理解 漏洞名:URL重定向漏洞 威胁:低 漏洞的来源:开发者对head头做好对应的过滤和限制 例子: 有漏洞的网站:http://a.com/x.php?u ...

  4. 【web-攻击用户】(9.6.2)其他客户端注入攻击:开放式重定向漏洞

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  5. nginx中301和302重定向之间的区别

    首先客户端浏览器的URL都会改变: 302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址.因为服务器返回302,所以搜索引擎会认为新的网址是暂时的: 301重定向是永久的重定向,搜索引擎会 ...

  6. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案

    问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...

  7. scrapy 解决Redirecting 301 302重定向问题

    在使用Scrapy框架中URl被重定向,总是遇到这类问题: DEBUG: Redirecting (301/302) to <GET https://XXXX refer https://XXX ...

  8. HTTP 302重定向的一个具体例子

    网址:https://www.sslshopper.com/certificate-decoder.html 我们从IE浏览器里导出Certificate成.cer文件后, 用记事本打开,内容是这样的 ...

  9. java http 302重定向_Java 纯HTTP请求 禁止302自动重定向

    Java 纯HTTP Get请求获取响应内容,如果发生302重定向,继而模拟请求域获取重定向后的响应内容. 关键点:设置conn.setInstanceFollowRedirects为false即可 ...

最新文章

  1. linux下查看GPU版本和详情信息 CUDA版本信息 anaconda版本信息
  2. ECMA_作用域深入This关键字
  3. java获取年初年末_Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间...
  4. 快速深入一门语言的几个问题
  5. 3.strcpy使用注意(3)
  6. angular 标准目录结构_Angular-cli新建项目目录结构详解
  7. weka 初练之 文本分类
  8. Poj 1556 The Doors 计算几何+最短路
  9. Windows启动管理器
  10. [转]Decide.com是怎么做商品价格预测的
  11. 使用反射复制一个JavaBean的对象
  12. 基于51单片机的温度检测监测报警系统设计
  13. Ubuntu20.04 vscode + opencv4教程(2021.10.27完成)
  14. 北航计算机组成原理课程设计-2021秋 PreProject-MIPS-MIPS 汇编程序设计
  15. Linux部署单体架构,从单体式架构迁移到微服务架构:三个策略叙述
  16. c语言中的右移是逻辑右移还是算术右移的问题
  17. 基于JSP的班级聚会网站
  18. 差异表达分析(DEG)时 row.names'里不能有重复的名字 的解决方案
  19. iOS ☞ SDWebimage 内存暴增问题
  20. 免费的 AI 动作捕捉工具 #Rokoko Video

热门文章

  1. js将php时间戳转换成格式化日期
  2. 0 前言 关于数学基础以及如何入门算法学习
  3. 这 7 门 编程语言最适合新手学习
  4. PHP图书管理系统实训心得体会,图书馆信息管理系统——总结
  5. 云端原生数据泄露事件解析
  6. vsCode安装使用教程和插件安装
  7. C 语言取整的几种方法
  8. linux查看进程被kill原因,定位Linux下定位进程被谁KILL
  9. MySQL查询和删除重复记录
  10. Hutool XML 转JSON 后 parseArray踩坑