比赛做不动,靠着赛后复现来学习一下。师傅们tql
一上来就是一个简单的登录页面,题目附件给了源码,打开看看
传入的uname通过text转换为str,一开始我以为是text转换为str的这里可能存在漏洞,上网一搜也没有发现。golang弱比较特性还是比较少,这个方法后面也直接被我排除了,找了好久,哭了。。。
既然这个绕过admin不行,就直接想到修改cookie值来进行身份验证。
全局搜索一下,发现cookie生成代码
这里可以加入一下代码验证一下
但是cookie并没有被解密出来,返还上层发现
这里将cookie进行decode,加入代码过后可以看见cookie内容
类型是field Values map[interface{}]interface{} of Session type
将cookie的格式一一对应填入进去,将uname改为admin
得到了伪造的cookie,然后填入到服务器端的cookie中修改flag值即可
应为我是本地复现,所以后续内容就没有做了
后面大概的步骤就是用golang的一个uint32+uint32的整数溢出将flag的值慢慢变小即可。
Uint32的范围是:[0 : 4294967295]
整体下来还是看出来许多不足之处,没有很好地去更进分析代码,前面知道的伪造cookie的大概方向,后面没有找到cookie这个生成的函数,也是自己代码阅读经验少的原因。