Jump to content
php.lv forumi

Palīdziet ar scripta optimizāciju


Леший

Recommended Posts

Iepriekšējais koderis ir uzlicis MySQL root paroli un, protams, to paroli nav pierakstījis.

DB var ienākt ar lietotaju, kuram ir praktiski visas permīcijas, tas ir, pašu root paroles hešu dabūt izdevās. Pameklēju tūļus recoverošanai - neatradu. Uzrakstīju pats, bet ir samērā lēns. Ja atļautie simboli ir a-z0-9 un paroles garums ir 5 simboli, tad parole tiek meklēta vidēji 3 minūtes. Protams, ar garāku paroli, un ja vēl pielikt klāt A-Z, būs vēl ilgāk. Līdz ar to lūgums: palīdziet ar optimizāciju.

 

<?
function pass($in)
{
$p=sha1($in,true);
$p=sha1($p);
return "*".strtoupper($p);
}

function checkPass($depth = 0, $pass = ''){
global $letters;
global $char;
global $hash41;
global $symbolCount;
if ($depth == $letters){
	if (pass($pass) == $hash41) {
		die("FOUND: ".$pass);
	}
	return;
}
if (!isset($offset)){
	$offset = 0;
}
while ($offset < $symbolCount) {
	$pass = substr($pass, 0, $depth).$char[$depth][$offset];
	checkPass($depth+1, substr($pass, 0, $depth+1));
	$offset++;
}

}

$letters = 5;
$char = array();
$hash41 = '*00A51F3F48415C7D4E8908980D443C29C69B60C9'; #hash parolei 12345

for ($i = 0; $i < $letters; $i++){
$char[$i] = array_merge(range('a', 'z'), /*range('A', 'Z'),*/ range(0,9));
shuffle($char[$i]);
}

$symbolCount = count($char[0]);

checkPass();
?>

 

EDIT: Samainīt paroli, protams, var, bet šajā gadījumā tieši ir jāatjauno.

Edited by Леший
Link to comment
Share on other sites

dīvaini ka tik vienkārši glabā bez salt, bet nu labi

 

varbūt ir vērts mēģināt kaut kādas password bibliotēkas

 

vari iepostot http://forum.antichat.ru/forum76.html

bet rēķinies ar to ka to paroli visi zanās un tā būs viņu db) un tur arī ir password vardīcas

Edited by php newbie
Link to comment
Share on other sites

Amm, neder variants vienkārši nomainīt mysql root pswd?

Kāda OS?

Ja iepriekšējais koderis nav bijis dikti glups - root pswd nekam citam nevajadzētu lietot un uz linuksīgām OS to nomainīt ir vairāk kā elementāri. Protams, lietotājam, ar attiecīgām permīcijām.

 

btw - ja jau dabūji root pswd hashu - varbūt vari to arī nomainīt? Uzveidot jaunu... Tas būtu vēl vienkāršāk kā startēt mysql bez permisijām, mainīt pswd un tad atkal startēt ar visām permisijām.

Edited by ohmygod
Link to comment
Share on other sites

Kad man vajadzēja kaut ko līdzīgu (nu ok, tas bija pārbaudījums sev), atradu netā gatavu kodu, ko nedaudz pielāgoju: http://faili.wot.lv/tmp/cracker.py

Princips tāds pats kā tavam algoritmam, taču var saspawnot vairākus thread'us, katru savam garumam vai simbolu kopai. 8 simbolu a-z paroli piemeklēja ~1-2 dienas, ar vienu thread'u.

 

Ja vajag nesāpīgi, skaties uz John the ripper- http://www.openwall.com/john/doc/ tam AFAIK pat bija MySQL hashu algoritms iebūvēts.

 

 

Es gan provētu skatīties (kaut vai ar wireshark'u), kas pie datubāzes slēdzas klāt (pieņemot, ka slēdzas caur tcp/ip), un meklēt kaut kur tur paroli.

Edited by fest
Link to comment
Share on other sites

iesaku papētīt password.c failu no mysql sourcēm ...

 

/*
   MySQL 4.1.1 password hashing: SHA conversion (see RFC 2289, 3174) twice
   applied to the password string, and then produced octet sequence is
   converted to hex string.
   The result of this function is used as return value from PASSWORD() and
   is stored in the database.
 SYNOPSIS
   my_make_scrambled_password()
   buf       OUT buffer of size 2*SHA1_HASH_SIZE + 2 to store hex string
   password  IN  password string
   pass_len  IN  length of password string
*/

void my_make_scrambled_password(char *to, const char *password,
                               size_t pass_len)
{
 SHA1_CONTEXT sha1_context;
 uint8 hash_stage2[sHA1_HASH_SIZE];

 mysql_sha1_reset(&sha1_context);
 /* stage 1: hash password */
 mysql_sha1_input(&sha1_context, (uint8 *) password, (uint) pass_len);
 mysql_sha1_result(&sha1_context, (uint8 *) to);
 /* stage 2: hash stage1 output */
 mysql_sha1_reset(&sha1_context);
 mysql_sha1_input(&sha1_context, (uint8 *) to, SHA1_HASH_SIZE);
 /* separate buffer is used to pass 'to' in octet2hex */
 mysql_sha1_result(&sha1_context, hash_stage2);
 /* convert hash_stage2 to hex string */
 *to++= PVERSION41_CHAR;
 octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE);
}

 

saprotams ka lai viņu atkodētu ir jāveic pretējais šim te ...

Link to comment
Share on other sites

Nu saparalelizēju nedaudz, palaižot 4 procesus, jo viena httpd instance neredz vairākus kodolus. Ap 17 bija izprovēta puse no 6 simbolu kombinācijam. Simboli pašlaik ir a-zA-Z0-9 un "_". Nedaudz pilnveidoju, lai inkrementē $letters, kad ir izprovētās visas variācijas ar noteikto simbolu skaitu. Paralelizēju, aprobežojot un sadalot variantus priekš 1. un 2. simbola. Rīt ziņošu par rezultātiem.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...