[2021SCTF]web-Loginme wp
2021-12-28 15:07
21195
最近也是刚刚放假,比较忙,就看了看这个SCTF
比赛快到尾声的时候才抽出空来看看题
按照惯例,肯定是要看看分最少的题
这道题被我看中了,我打算研究一下这个题
附件是一份源码,而且是go语言的源码
我们来看一看
题中源码给了middleware.go
此时我们应该理解一下go语言的中间件是起到什么作用的
1
有时候在执行实际Handler里面的逻辑的时候想要预处理或者后处理一些行为(比如写入log、统计执行时间等等);有时候我们想要在调用一个Handler之前或之后调用另一个Handler。这时我们就需要用到中间件这个中间处理函数,把我们实际使用的Handler放在中间件里面,以实现额外的功能。
所以我们先来看看middleware.go
定义了什么
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package middleware
import
(
"github.com/gin-gonic/gin"
)
func LocalRequired() gin.HandlerFunc {
return
func(c
*
gin.Context) {
if
c.GetHeader(
"x-forwarded-for"
) !
=
"
" || c.GetHeader("
x
-
client
-
ip
") != "
" {
c.AbortWithStatus(
403
)
return
}
ip :
=
c.ClientIP()
if
ip
=
=
"127.0.0.1"
{
c.
Next
()
}
else
{
c.AbortWithStatus(
401
)
}
}
}
这里导入了一个包github.com/gin-gonic/gin
我们来看一下该包的描述
1
2
3
Gin
is
a web framework written
in
Go (Golang). It features a martini
-
like API with performance that
is
up to
40
times faster thanks to httprouter. If you need performance
and
good productivity, you will love Gin.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似martini
-
like的 API,由于 httprouter,性能提高了
40
倍。 如果您需要性能和良好的生产力,您会喜欢 Gin。
到这里其实就有那么一点能感觉到这个题的做法了
接着往下看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func LocalRequired() gin.HandlerFunc {
return
func(c
*
gin.Context) {
if
c.GetHeader(
"x-forwarded-for"
) !
=
"
" || c.GetHeader("
x
-
client
-
ip
") != "
" {
c.AbortWithStatus(
403
)
return
}
ip :
=
c.ClientIP()
if
ip
=
=
"127.0.0.1"
{
c.
Next
()
}
else
{
c.AbortWithStatus(
401
)
}
}
}
这里就是简单的获取数据头的函数
其中
1
2
3
4
if
c.GetHeader(
"x-forwarded-for"
) !
=
"
" || c.GetHeader("
x
-
client
-
ip
") != "
" {
c.AbortWithStatus(
403
)
return
}
这里定义到如果存在x-forwarded-for
或者x-client-ip
就会返回403
但是还需要ip == "127.0.0.1"
百度一下就知道x-real-ip
这个头
中间件看完了,接着往下看route.go
这里就能看到端倪了
go语言模板渲染支持传入一个结构体的实例来渲染它的字段,就有可能造成信息泄露
而在route.go
中恰巧传入了一个结构体,我们接着看structs.go
到这里已经真相大白了
1
2
3
1
、首先构造ip伪造
2
、在age变量中存在ssti信息泄露出flag
3
、干他!
[2023春季班]2023,新的征程,脱壳机更新、iOS/eBPF、赠送云手机套装!一块裸板虚拟化五个容器云手机!3月25日起同时上调价格并赠送新设备!
最后于 2022-1-4 08:29
被H3h3QAQ编辑
,原因: 添加题目源码
上传的附件: