题目环境:http://8.129.4.24:20003/
打开题目进入登录界面,没有账号,随便注册一个并登录
但是验证需要使用与给定前6位的md5值相同的验证码,这里给出一个脚本
1 | import hashlib |
注册并且登录后,出现一个secret,点击发现提示只有admin才可以看到,想到应该要提权,burp抓个包看看
分析服务器应该是根据cookie中的usr值来判断用户身份,多登录几次,观察usr有没有什么特殊之处
经过观察发现usr的奇数位总是不变,并且奇数位的数量正好等于用户名的位数,例如用户名为toms
,usr的奇数位总是为vmkq
;用户名为tom
,usr的奇数位总是为vmk
,推测usr是按照某种规律对用户名进行编码,每个字母是一一对应的,如果找到admin编码后的字符放到user中,应该就可以骗过服务器了,此时可以注册一个用户名为abcdefghijklmnopqrstuvwxyz
的用户,查看该用户的usr字段值,可以得到每个字母编码后的对应值,这样就可以构造出admin
的usr了
得到usr为_<dla+fDc~hFeQjug&l5ihnmknp(m/rToKt#qav>s#xouAzwwB|{
把usr的奇数位提取出来得到_dafchejglinkpmrotqvsxuzw|
,给出提取奇数位的脚本
1 | a='_<dla+fDc~hFeQjug&l5ihnmknp(m/rToKt#qav>s#xouAzwwB|{' |
现在得到了一组对应关系:abcdefghijklmnopqrstuvwxyz
_dafchejglinkpmrotqvsxuzw|
现在只需要根据这组对应关系找出admin
的编码即可,可以一个一个看,也可以用下面的脚本
1 | a='_dafchejglinkpmrotqvsxuzw|' |
得到admin
的usr为_fkgp
,于是访问secret时,将usr的奇数位改为_fkgp
,偶数位随意,发送,得到flag