日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久中文娱乐网 | 日本伦理在线 | 国产三级午夜理伦三级 | av手机天堂网 | av手机免费观看 | 人妻少妇偷人精品久久性色 | 日本亲与子乱xxx | 黄色裸体网站 | 日韩欧美中文一区 | 久人人| 中文字幕第8页 | www.香蕉视频.com | xxxx性视频| 亚洲欧美综合 | 日本少妇性生活 | 成人极品 | 国产黄色录像 | 国产三级在线观看视频 | 中文字幕一区二区三区在线视频 | 一区二区视频在线观看 | 日本理论中文字幕 | 一个人看的www片免费高清中文 | 久久黄色一级视频 | 日韩精品一区二区三区在线播放 | 日本黄色美女视频 | www.色播.com| 亚洲精品爱爱 | 99热综合 | 夜夜天天干 | 精品久久久久久久久久久久久久久久久 | 久久久久国产精品区片区无码 | 撒尿free性hd | 亚洲色图14p | 国产精品三区四区 | 黄色在线观看网址 | 久久精品视频在线 | 午夜国产片 | 人妻熟女一区二区aⅴ水野 91在线观看视频 | 欧美三极片 | jizz色| 国产一区二区福利 | 毛片的网址 | 91网在线播放 | 成人av网址大全 | 国产亚洲女人久久久久毛片 | 国产老熟妇精品观看 | 精品视频在线一区二区 | 久久成人免费电影 | 久久国产三级 | 操穴网站 | 欧美一区二区在线免费观看 | 黄色日b片 | 美女精品一区 | 国产伦理一区二区三区 | 欧美另类专区 | 国产av 一区二区三区 | 亚洲精品在线免费 | 深爱五月综合网 | 国产视频一区二区三区在线观看 | 国产极品美女在线 | 国产乱偷 | 男人的天堂伊人 | 日韩成人午夜影院 | 国产三级精品三级 | 日韩欧美在线一区二区 | 日本高清视频www夜色资源 | 久久看片 | 老熟妇仑乱视频一区二区 | 美女黄视频大全 | 色性av | 国产精品三级在线观看无码 | 88国产精品视频一区二区三区 | 欧美日韩久久久久久 | 欧美成人一区二区三区高清 | 欧美高清性 | www.日本在线视频 | 99精品久久久 | 欧美韩国日本一区 | 在线不卡免费av | 日韩av在线播 | 亚洲蜜桃精久久久久久久久久久久 | 最近中文字幕免费mv视频7 | 91视频论坛 | 国产精品自拍视频 | 亚洲av无码一区二区三区在线播放 | 久久无码性爱视频 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 毛片基地在线观看 | 久久不卡av | 亚洲av人无码激艳猛片服务器 | hd性videos意大利精品 | 欧美性生交xxxxx久久久 | 女人18岁毛片 | 亚洲黄色中文字幕 | 黄黄的视频在线观看 | 久久婷婷五月综合色国产香蕉 | 狠狠干影院| 欧美jizz欧美性大全 | 国产精品电影 |