日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[VNCFT2021]gocalc0复现

發(fā)布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [VNCFT2021]gocalc0复现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[VNCFT2021]gocalc0復(fù)現(xiàn)

這道題當(dāng)時出了非預(yù)期,session兩次base64就能getflag,但是這道題本身的考點是Golang SSTI

正好復(fù)盤學(xué)習(xí)一下

打開題目能看到經(jīng)典計算器

點開flag在這里發(fā)現(xiàn)只有短短一行提示

flag is in your session

這里按照非預(yù)期接還是能夠拿到flag

但是我們要看一下具體按照預(yù)期方法怎么能拿到flag

https://www.jianshu.com/p/e0ffb76ba7e9

【查看相關(guān)資料】
1、網(wǎng)絡(luò)安全學(xué)習(xí)路線
2、電子書籍(白帽子)
3、安全大廠內(nèi)部視頻
4、100份src文檔
5、常見安全面試題
6、ctf大賽經(jīng)典題目解析
7、全套工具包
8、應(yīng)急響應(yīng)筆記

這里我們通過{{.}}查看一下作用域

整理一下,就能夠看到整個calc的源碼

package mainimport (_ "embed""fmt""os""reflect""strings""text/template""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie""github.com/gin-gonic/gin""github.com/maja42/goval" )var tpl string//go:embed main.go var source stringtype Eval struct {E string `json:"e" form:"e" binding:"required"` }func (e Eval) Result() (string, error) {eval := goval.NewEvaluator()result, err := eval.Evaluate(e.E, nil, nil)if err != nil {return "", err}t := reflect.ValueOf(result).Type().Kind()if t == reflect.Int {return fmt.Sprintf("%d", result.(int)), nil} else if t == reflect.String {return result.(string), nil} else {return "", fmt.Errorf("not valid type")} }func (e Eval) String() string {res, err := e.Result()if err != nil {fmt.Println(err)res = "invalid"}return fmt.Sprintf("%s = %s", e.E, res) }func render(c *gin.Context) {session := sessions.Default(c)var his stringif session.Get("history") == nil {his = ""} else {his = session.Get("history").(string)}fmt.Println(strings.ReplaceAll(tpl, "{{result}}", his))t, err := template.New("index").Parse(strings.ReplaceAll(tpl, "{{result}}", his))if err != nil {fmt.Println(err)c.String(500, "internal error")return}if err := t.Execute(c.Writer, map[string]string{"s0uR3e": source,}); err != nil {fmt.Println(err)} } func main() {port := os.Getenv("PORT")if port == "" {port = "8080"}r := gin.Default()store := cookie.NewStore([]byte("woW_you-g0t_sourcE_co6e"))r.Use(sessions.Sessions("session", store))r.GET("/", func(c *gin.Context) {render(c)})r.GET("/flag", func(c *gin.Context) {session := sessions.Default(c)session.Set("FLAG", os.Getenv("FLAG"))session.Save()c.String(200, "flag is in your session")})r.POST("/", func(c *gin.Context) {session := sessions.Default(c)var his stringif session.Get("history") == nil {his = ""} else {his = session.Get("history").(string)}eval := Eval{}if err := c.ShouldBind(&eval); err == nil {his = his + eval.String() + "<br/>"}session.Set("history", his)session.Save()render(c)})r.Run(fmt.Sprintf(":%s", port)) }

這里有很多東西,我們可以進行一下刪減整理(對我們getflag沒什么用處),提取出我們想要的東西

package mainimport (_ "embed""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie""github.com/gin-gonic/gin""os" )func main() {port := os.Getenv("PORT")if port == "" {port = "8888" //這個port可以自己指定奧}r := gin.Default()store := cookie.NewStore([]byte("woW_you-g0t_sourcE_co6e"))r.Use(sessions.Sessions("session", store))r.GET("/flag", func(c *gin.Context) {session := sessions.Default(c)c.String(200, session.Get("FLAG").(string))})r.Run(":8888") }

注意下這里

store := cookie.NewStore([]byte("woW_you-g0t_sourcE_co6e"))

這里是創(chuàng)建基于cookie的存儲引擎,woW_you-g0t_sourcE_co6e參數(shù)是用于加密的密鑰

然后是這里

c.String(200, session.Get("FLAG").(string))

session.Get(“FLAG”)這里是gin框架中的讀取session,而他指定了FLAG這個key(session是鍵值對格式數(shù)據(jù),因此需要通過key查詢數(shù)據(jù)),所以我們可以嘗試本地起這個gin框架,修改一下代碼,并且把題目中的session傳入cookie,看看他最終會輸出什么

exp:

package main import (_ "embed""fmt""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie""github.com/gin-gonic/gin""os" ) func main() {port := os.Getenv("PORT")if port == "" {port = "8888" //這個port可以自己指定奧}r := gin.Default()store := cookie.NewStore([]byte("woW_you-g0t_sourcE_co6e"))r.Use(sessions.Sessions("session", store))r.GET("/flag", func(c *gin.Context) {session := sessions.Default(c)b := session.Get("FLAG")fmt.Println(b)})r.Run(":8888") }

結(jié)果如下

成功解密出flag

但是這里有個問題

c.String(200, session.Get("FLAG").(string))

筆者在寫exp的時候,對String()產(chǎn)生了疑惑(我的Golang水平停留在Hello world水平),如果exp這樣寫他會直接輸出在界面上

r.GET("/flag", func(c *gin.Context) {session := sessions.Default(c)c.String(200, session.Get("FLAG").(string)) })

出于好奇,我跟進了一下

這里給了注釋,我蹩腳的翻譯一下

String()會把給定的字符串寫入響應(yīng)體中

跟進Render

Render() 寫入響應(yīng)頭并調(diào)用render。并且渲染出來

這里就明了了,shit我根本不用改代碼啊!!!直接讓他渲染出來就好了!!

so,我們驗證一下

package mainimport (_ "embed""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie""github.com/gin-gonic/gin""os" )func main() {port := os.Getenv("PORT")if port == "" {port = "8888" //這個port可以自己指定奧}r := gin.Default()store := cookie.NewStore([]byte("woW_you-g0t_sourcE_co6e"))r.Use(sessions.Sessions("session", store))r.GET("/flag", func(c *gin.Context) {session := sessions.Default(c)c.String(200, session.Get("FLAG").(string))c.String(200, "\nThis is H3h3QAQ")})r.Run(":8888") }

結(jié)果如下

總結(jié)

以上是生活随笔為你收集整理的[VNCFT2021]gocalc0复现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷激情六月 | 日韩欧美国产三级 | 久久有精品 | 乳色吐息免费看 | 激情欧美一区二区 | 日本在线一区 | 情欲超 | 亚洲最大成人网站 | 色视频国产| 性猛交ⅹxxx富婆video | 久久久久九九九九 | 国产精品一二三 | 国产xxx在线 | 少妇高潮灌满白浆毛片免费看 | 国产精品大屁股白浆一区 | 伊人av综合 | 国产性生活一级片 | 午夜av在线免费观看 | 久久久久久国产精品免费播放 | 无码日韩精品视频 | 精品国产一区二区三区噜噜噜 | 久久艹在线观看 | 激情久久视频 | 亚洲精品www | 日韩淫片 | 综合激情网站 | 国产熟妇与子伦hd | 看av网址| 久草电影在线 | 国产热热 | av男人天堂av | 久久激情网站 | 粉嫩av一区二区夜夜嗨 | 中文字幕国产在线观看 | 亚洲少妇在线 | 无码一区二区三区 | 国产影视一区二区三区 | 三区在线观看 | 国产男女猛烈无遮挡免费视频 | 午夜国产在线观看 | 午夜国产小视频 | 国产裸体美女永久免费无遮挡 | 久久三 | 91国偷自产中文字幕久久 | 亚洲精品男人的天堂 | 久久国产经典视频 | 136福利视频导航 | 骑骑上司妻电影 | 毛片一级在线观看 | 国产一区二区视频在线免费观看 | 99精品久久久久久中文字幕 | 亚洲国产影视 | 亚洲欧洲av在线 | 欧美人与性动交g欧美精器 国产在线视频91 | 久久久久国产精品区片区无码 | eeuss国产一区二区三区 | 中文字幕在线视频不卡 | 免费无遮挡无码永久视频 | 一区二区三区资源 | 丰满熟妇人妻中文字幕 | 亚洲一卡二卡在线 | freesex性hd公交车上 | 亚洲精品一区二区三区四区乱码 | 黄色一级免费大片 | 国产精品自拍区 | 亚洲欧美精品一区二区 | 视频一区二区国产 | 亚洲一区二区观看 | 在哪里可以看毛片 | 婷婷久久久久久 | 日本va欧美va国产激情 | 国产一区福利 | 91精品视频网 | 青青草成人网 | 一区二区三区视频观看 | 久久精品欧美一区 | 久久久久久久久艹 | 涩涩视频在线观看免费 | 探花国产| 免费看欧美黄色片 | re久久| 精品中文字幕一区二区三区 | 欧美激情在线观看视频 | 亚洲精品乱码久久久久久久 | 香蕉在线看 | 国产在线视频99 | 欧美三级网| 插插网站 | 99人妻碰碰碰久久久久禁片 | 亚洲精品午夜国产va久久成人 | 黄色骚视频 | 少妇激情一区二区三区视频 | 欧美色综合天天久久综合精品 | 亚洲第一天堂久久 | 欧美在线观看视频一区二区 | 一级视频在线观看 | 欧美黄网站| 麻豆免费在线观看 | 极品淫少妇 |