Cookie Monster
题目
Do prepare to see cookies lurking everywhere.
解决方案
打开网页后,感觉都在提Cookie,F12打开开发者工具看看Cookie。能发现响应头的Set-Cookie在变化,并且查到前两个分别是pc和tf的哈希值:
bc54f4d60f1cec0f9a6cb70e13f2127a
114d6a415b3d04db792ca7c0da0c7a55
应该是flag每两个字符去哈希,然后每次响应头的Set-Cookie,是请求头的Cookie对应两位字符的后两位字符的哈希,也就是说只要不断拿返回的新Cookie去请求,就可以拿到全部(我在说什么玩意儿)。
...我还是重新说一遍吧,刚开始没有Cookie,服务器会返回Set-Cookie是pc的哈希值(bc54开头的),然后浏览器再次请求这个页面就会带上bc54开头的Cookie,这时候服务器就会返回pc的后两位也就是tf的哈希值(114d开头的),以此类推,直到又出现pc的哈希值就可以停下了。
于是乎:
1 2 3 4 5 6 7 8 9 10 11 12 | import requests headers = { 'Cookie': 'flag=bc54f4d60f1cec0f9a6cb70e13f2127a' } while True: print(headers['Cookie']) res = requests.get('http://159.89.166.12:13500/', headers=headers) headers['Cookie'] = res.headers['Set-Cookie'] if headers['Cookie'] == 'flag=bc54f4d60f1cec0f9a6cb70e13f2127a': break |
应该能得到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | flag=bc54f4d60f1cec0f9a6cb70e13f2127a flag=114d6a415b3d04db792ca7c0da0c7a55 flag=b2984e12969ad3a3a2a4d334b8fb385a flag=6f570c477ab64d17825ef2d2dfcb6fe4 flag=988287f7a1eb966ffc4e19bdbdeec7c3 flag=0d4896d431044c92de2840ed53b6fbbd flag=f355d719add62ceea8c150e5fbfae819 flag=12eccbdd9b32918131341f38907cbbb5 flag=639307d281416ad0642faeaae1f098c4 flag=96bc320e4d72edda450c7a9abc8a214f flag=c716fb29298ad96a3b31757ec9755763 flag=51de5514f3c808babd19f42217fcba49 flag=05cb7dc333ca611d0a8969704e39a9f0 flag=bc781c76baf5589eef4fb7b9247b89a0 flag=ff108b961a844f859bd7c203b7366f8e flag=2349277280263dff980b0c8a4a10674b flag=0b1cdc9fe1f929e469c5a54ffe0b2ed5 flag=364641d04574146d9f88001e66b4410f flag=c758807125330006a4375357104f9a82 flag=fcfdc12fb4030a8c8a2e19cf7b075926 flag=440c5c247c708c6e46783e47e3986889 flag=97a7bf81a216e803adfed8bd013f4b85 flag=c1d12de20210d8c1b35c367536e1c255 flag=a8655da06c5080d3f1eb6af7b514e309 |
一个个去搜好像也不是什么大问题,但是也可以写个脚本生成字典,毕竟都是两位字符的哈希值。最后得到:
1 | pctf{c0oki3s_@re_yUm_bUt_tHEy_@ls0_r3vEaL_@_l0t} |