环境搭建
Docker-compose搭建的php+nginx+mysql。
实战
1.请求首页,发现跳转
2.请求包中将cookie中的“admin=0”改为1。
3.继续观测cookie,发现参数key的值为32位的数字与a-f,猜测hash,尝试解密。
1 | fff56426453c85e36a540f9b50285a48------->k=md |
拼接后,发现k=md5(admin)
4.通过将k=c4ca4238a0b923820dcc509a6f75849b进行替换,增加等尝试,发现增加后,可正常进入。
注:这里有点坑。。。最开始一直把md5(admin)代进去,怎么试都不行,无耐去看源码,将md5(1)加到cookie中。
5.打开新链接。土拨鼠一只。
news页面。
hint页面。
6.很容易判断出每个页面可得出一个key。
6.1下载大老鼠图片,打开就能看到其
key1:(65ef2aa20ce8a5c16b7a1a4046ff9557)
6.2new页面显示的推测ascii码,转化为字符串,并做偏移。
1 | str=[65,79,86,77,89,87,79,00,94,89,00,51,61,49,00,11,00,85,79,99,29,36,18,76,33,27,28,35,28,35,27,32,78,34,76,80,77,27,33,27,34,75,30,29,27,77,33,76,30,80,75,28,34,26,75,79,32,19] |
发现key值。key3:(b71292916d8bfc1718a431c7b4fa280ae6)
6.3跟据hint页面提示,打开robots.txt。
搜索该文件中包含的敏感字符串,发现没有。
用二进制打开,发现相关字符串。。。。用0字节填充了。。。
7.代入3个key
8.访问该链接。自动跳转url
9.跟据线索,访问该链接
10.继续跟进。
提交任意数据,请求302跳转。
多次提交,发现人数遂次加一。看到注释提示,请求参数有参数,猜测有注入,对name进行fuzz,确认注入点。测试只有1列。
进行注入:发现列名为uid,并查看内容。
1 | " union select group_concat(schema_name) from information_schema.schemata --+ ---->information_schema,chiji,mysql,performance_schema,sys |
用uid删对手:
删到最后一个时,显示“book=c65e1e6e7c352f7f7f7f9b065c2ee56d”,此时继续将其代入。发现在请求体中没用,,在cookie中加入可返回新链接。
11.打开新链接
注册用户后,查看info信息,越权修改用户到admin
看到admin信息,重置密码,给出新链接,打开,看到flag
总结
总的来说,这次比赛的题主要针对甲方,利用的技术其实都不难,就是总想不到ctf出题人什么脑回路,一个坑过不去就进死胡同。