-
Notifications
You must be signed in to change notification settings - Fork 0
Exploit Museum
status: fixed as of https://github.com/ridhoq/pro-grid/pull/45
will keep the entire board white.
The inner filter and each statement actually select all the non white tiles. The problem is, It clicks so fast that it misses some, so I just run that a bunch of times to get the whole board. It's not exactly pretty, but way easier then trying to figure out when it's ok to send another click.
// Load jquery
var script = document.createElement('script');script.src = "http://code.jquery.com/jquery-latest.min.js";document.getElementsByTagName('head')[0].appendChild(script);
// Click the cell if it is anything but white
clickCell = function(options) {
if (options.color != "") {
console.logOld("Clicking row", options.row, "col", options.col);
$(".col_" + options.row + "_" + options.col).click()
}
}
// Intercept the console messages that are printed when a change comes over the network
console.logOld = console.log;
console.log = (function() {
var log = console.log;
return function() {
log.apply(console, arguments);
clickCell(arguments[0])
}
})();
// Clear the entire board
for (var i = 1; i < 51; i++) {
console.log("Starting loop", i);
$(".g__col").filter(function(index) {
return $(this).css('background-color') != "rgb(255, 255, 255)"
}).each(function() {
$(this).click()
});
}- no logs on the client side
- add client side throttling. Click method can only be called once per 100ms
status: fixed as of https://github.com/ridhoq/pro-grid/pull/45 and https://github.com/ridhoq/pro-grid/pull/56
Bypasses client-side throttling of click function by making a brand new io.connect and emitting messages to the server directly
##code
for (var a = "0123456789ABCDEF".split(""), b = "#", c = 0; 6 > c; c++)
b += a[Math.round(15 * Math.random())];
d = b
c = io.connect()
e = function(a, b, c) {
var d = ".col_" + a + "_" + b, e = document.querySelector(d);
e.style.backgroundColor = e.style.backgroundColor ? "" : c
};
click = function(a, b) {
e(a, b, d), c.emit("clicked", {
row: a,
col: b,
color: d
})
}
color = function(a,b,c){ var d = ".col_" + a + "_" + b, e = document.querySelector(d);
return e.style.backgroundColor;}
_.throttle(a.gridClicked, 0)
fill_grid = function(){for (var y = 0; y < 32; y++){ for (var x = 0; x < 32; x++){click(y,x); }}}
clear_grid = function(){for (var y = 0; y < 32; y++){ for (var x = 0; x < 32; x++){ if (color(y,x,c) != ""){click(y,x);} }}}- Now you have to sign all your requests with an API key
- A new API key is issued to you on connect and after each and every request made
- If either the API key is missing, malformed, or not registered you are disconnected immediately
status: fixed as of https://github.com/ridhoq/pro-grid/pull/45 and https://github.com/ridhoq/pro-grid/pull/56
Just runs through and clicks the grid at whatever interval you want
var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
var delay = 1000;
var i = 0; var x = 0;
for(i = 0; i < 32; i++) {
for(x = 0; x < 32; x++) {
setTimeout(
(function(i,x) {
return function() {
$('.col_' + i + '_' + x).click();
}
})(i,x), delay);
delay += 1000;
}
}- client side throttling
- server side token bucket throttling algorithm based on times between API key requests http://en.wikipedia.org/wiki/Token_bucket
This will still work if you simply live within the client side throttling rules. You could slowly but surely take over the grid with this code.
status: will probably still compromise the app
for clarity: we are not responsible for what users draw on the grid
album: http://imgur.com/a/0g9Ll



- bot draws crude images spelled out in black and white
- we introduce API key requirement
- bot now spawns up to 16 clients at once to farm API keys
- bot begins drawing complex bitmap images
- bot begins cycling through a slideshow of different images
The bot does a couple things to avoid detection
- images are drawn in random order. There is no pattern to how it renders the image
- the bot spawns many clients
We have been unable to replicate this bot. If you know how to replicate this please contribute the code.
- disconnect if you click too fast
- how to prevent many automated clients on one IP
- the bot grabs the API key variable from the controller and is able to make programmatic requests
- color is dictated on the client side
