津门杯GoOSS和302重定向漏洞
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重定向漏洞相关推荐
- [津门杯]全部WEB题解
津门杯WEB题解 日常比赛被爆,感谢队里教我题的大师傅 power_cut 存在一个.index.php.swp文件,vim -r 恢复一下 <?php class logger{public ...
- [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)
这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.这篇文章主要介绍5月9日参加津门杯CTF题目知识,包括power_cut.hate_ ...
- python漏洞检测脚本_URL重定向漏洞,python打造URL重定向漏洞检测脚本
前言: 今天学习了重定向漏洞,这个漏洞比较好理解 漏洞名:URL重定向漏洞 威胁:低 漏洞的来源:开发者对head头做好对应的过滤和限制 例子: 有漏洞的网站:http://a.com/x.php?u ...
- 【web-攻击用户】(9.6.2)其他客户端注入攻击:开放式重定向漏洞
前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...
- nginx中301和302重定向之间的区别
首先客户端浏览器的URL都会改变: 302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址.因为服务器返回302,所以搜索引擎会认为新的网址是暂时的: 301重定向是永久的重定向,搜索引擎会 ...
- uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...
- scrapy 解决Redirecting 301 302重定向问题
在使用Scrapy框架中URl被重定向,总是遇到这类问题: DEBUG: Redirecting (301/302) to <GET https://XXXX refer https://XXX ...
- HTTP 302重定向的一个具体例子
网址:https://www.sslshopper.com/certificate-decoder.html 我们从IE浏览器里导出Certificate成.cer文件后, 用记事本打开,内容是这样的 ...
- java http 302重定向_Java 纯HTTP请求 禁止302自动重定向
Java 纯HTTP Get请求获取响应内容,如果发生302重定向,继而模拟请求域获取重定向后的响应内容. 关键点:设置conn.setInstanceFollowRedirects为false即可 ...
最新文章
- linux下查看GPU版本和详情信息 CUDA版本信息 anaconda版本信息
- ECMA_作用域深入This关键字
- java获取年初年末_Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间...
- 快速深入一门语言的几个问题
- 3.strcpy使用注意(3)
- angular 标准目录结构_Angular-cli新建项目目录结构详解
- weka 初练之 文本分类
- Poj 1556 The Doors 计算几何+最短路
- Windows启动管理器
- [转]Decide.com是怎么做商品价格预测的
- 使用反射复制一个JavaBean的对象
- 基于51单片机的温度检测监测报警系统设计
- Ubuntu20.04 vscode + opencv4教程(2021.10.27完成)
- 北航计算机组成原理课程设计-2021秋 PreProject-MIPS-MIPS 汇编程序设计
- Linux部署单体架构,从单体式架构迁移到微服务架构:三个策略叙述
- c语言中的右移是逻辑右移还是算术右移的问题
- 基于JSP的班级聚会网站
- 差异表达分析(DEG)时 row.names'里不能有重复的名字 的解决方案
- iOS ☞ SDWebimage 内存暴增问题
- 免费的 AI 动作捕捉工具 #Rokoko Video