0x00 题目概述
比赛地址:www.happyctf.org
使用thinkphp框架写的登录注册页面。
尝试注入——无效
扫描看目录泄露——存在include,但没有得到有用的信息
注册登录成功后会提示不是管理员,存在admin用户。
注册一段时间后会删除账号。
cookie信息有两个,base64,解码出来是乱码。
flag在哪?
很显然,flag应该是以管理员身份登录成功后才会回显的。
0x01 个人思路流程
要是管理员身份才能拿到flag的ctf题并不少见
这里要感谢p牛的一篇文章,传送门:https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html
所以,这里,我们抓包。注册: admin%c2
是注册成功的,然后登陆:
使用用户名为admin,密码为我们刚刚注册的,并不能成功。
也就是说,并没有重置admin的密码。
这里有一个问题我也还没搞懂,为什么加了%c2之后 可以 一直注册成功 ,而不会提示用户名重复。
卡住了,寻找还有什么有用的信息。
这题的一个关键就是,验证身份是通过cookie里面的uid来验证的,是比较常见的base64,所以很自然的想到,是不是我把管理员的uid搞到手,就行了。
要获取管理员uid,然后替换cookie,第一想到的是把这加密算法搞懂,这里还有一个username呢,也是base64。
于是接下来我不停地注册,观察用户名和cookie里面username之间的关联。想要搞懂是则么实现这加密的,默认cookie里面两个值加密的方法是一样的。
没有收获,搞不出他的加密算法。
算是又卡住了。
页面停留在抓包页面,突然想到,如果我把uid的值替换到username去呢,会怎样?如图
5121
恍然大悟,这就是uid啊,这不就是一个加密一个解密函数么?
我拿管理员的uid去注册不久行了么?
什么?管理员的uid只有一位数?注册长度不够?
1%c2%c2
0x02 最后题解
是用形如 1%c2%c2的用户名去注册
注册成功后登陆
将登陆成功的得到cookie的username 去替换uid
判断是不是管理员只是根据uid来判断的,和username无关。
这里需要一个脚本
但我想的是先试了1-10不行再写脚本
试了试 到6就出来了
0x03 总结
p牛还是6啊
题目挺好的,给出题人一个赞
怎么说,没有思路是绝对错的这一说,只有相对题目而言的对错
想了挺长时间的,自己太菜了,学吧!Go ahead!
网友评论