Tuto Ajouter Paysafecard sur Prometheus

  • Initiateur de la discussion
  • #1

Swarzox

Psychopathe
Messages
784
Score réaction
473
Points
325
Bonjour à tous, avant toute chose mon module n'est pas 100% automatique car Paysafecard ne fournit pas d'API permettant la vérification des cartes cependant il est ergonomique, rapide, professionnel et très simple d'utilisation que ça soit pour vous et vos joueurs.

Prérequis :

- 1 site web avec prometheus installé dessus avec un accès ftp à ce dernier
- Les crédits doivent être activés sur votre prometheus
- 1 serveur mysql avec accès (phpmyadmin)
- Mon pack "Prometheus Paysafecard" disponible ici : https://www.dropbox.com/s/490i8ryrz696197/Prometheus Paysafecard by Swarzox 1.0.rar?dl=0
Sachez que dans ce tutoriel je prend en compte le fait que votre prometheus est déjà installé, configuré et fonctionne normalement. Si vous ne disposez pas de prometheus vous pouvez l'acheter ici : https://scriptfodder.com/scripts/view/565/prometheus-a-gmod-donation-system

Côté joueur :

1.PNG


Le système est très simple pour le joueur, il a juste à rentrer son code et à attendre j'ai mis au point une sécurité solide anti spam/flood afin d'éviter tout abus de la part du joueur.

Côté administrateur, un panel de gestion de chaque paysafecard, accessible si on a la permission "transactions" :

2.PNG


Vous vérifierez de votre côté si la paysafecard est correcte ou non, vous pourrez ainsi la valider :

3.PNG


Ou la refuser :

5.PNG


Il y a également l'information de chaque paysafecard validée pour éviter tout abus :

4.PNG


Il y a également dans les logs chaque actions effectuées sur les paysafecard.

INSTALLATION :

1. Base de donnée

1 - Rendez-vous sur votre espace phpmyadmin sur lequel vous avez les fichiers sql de prometheus installés, si vous ne vous en souvenez plus ils sont indiqués dans le fichier "config.php" de prometheus web :

6.PNG


2- Une fois connecté, vous irez dans votre base de donnée prometheus puis dans la navbar vous cliquerez sur "Importer"

3- Puis vous glissez simplement le fichier paysafecard.sql et cliquez sur "Exécuter"

7.PNG


2. Installation du script

1 - Dans le fichier config.php qui se trouve à la racine vous devez rajouter ceci :
Code:
// Mettez sur false si vous souhaitez désactiver le module paysafecard ou sur true si vous souhaitez l'activer
$paysafecard = true;
Vous pourrez à tout moment désactiver mon module en remplacement le "true" par "false"

9.PNG


2 - Vous remplacez et ajoutez les fichiers de mon pack dans votre FTP :

Fichiers à remplacer :
/store.php
/pages/admin/navigation.php
/pages/store/credits.php

Fichiers à ajouter :

/pages/admin/paysafecard.php
/pages/store/paysafecard.php
/inc/ajax/psc.php

Voilà, n'hésitez pas à me faire vos retours, si ça marche bien ou si vous avez d'éventuelles erreurs. Je compte faire des mises à jour assez régulières si vous avez des idées pour améliorer le module n'hésitez surtout pas :)
 

Pièces jointes

Deadman69330

Psychopathe
Messages
2 467
Score réaction
352
Points
290
Est-ce qu'il est compatible avec le tuto pour ajouter Starpass ?
 

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
PHP:
$db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
 

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
Regarde tout le code avant tu peux envoyer cette requête que si t'as une certaine permission
Oui j'ai remarqué, mais un fondateur pas avisé pourrait donner cette permissions à quelqu'un et alors il ferait n'importe quoi avec la base de donnée
 
  • Initiateur de la discussion
  • #8

Swarzox

Psychopathe
Messages
784
Score réaction
473
Points
325
Oui j'ai remarqué, mais un fondateur pas avisé pourrait donner cette permissions à quelqu'un et alors il ferait n'importe quoi avec la base de donnée
Côté administrateur, un panel de gestion de chaque paysafecard, accessible si on a la permission "transactions" :
Et si le fondateur donne la permission "transactions" à une mauvaise personne (ce qui arrive normalement jamais) il a simplement accès à cette requête qui peut juste supprimer des codes paysafecard + les logs permettent de voir si justement un administrateur a utilisé cette requête pour supprimer un code
 
Dernière édition:

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
Et si le fondateur donne la permission "transactions" à une mauvaise personne (ce qui arrive normalement jamais) il a simplement accès à cette requête qui peut juste supprimer des codes paysafecard - ARRETE D'EDITER TES MESSAGES QUAND J'ECRIS ;)
Normalement oui,
Mais tu exécute une requête SQL avec le paramètre $_POST['id'] dedans sans vérifier que ce dernier est un nombre, on peux donc faire une SQLi avec :
1; DROP TABLE paysafecard
 
  • Initiateur de la discussion
  • #10

Swarzox

Psychopathe
Messages
784
Score réaction
473
Points
325
non tu peux pas essaie par toi même tu verras
 

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
J'ai pas Prometheus donc je peux pas tester complètement, par contre j'ai testé juste le {$_POST['id']}
 
  • Initiateur de la discussion
  • #13

Swarzox

Psychopathe
Messages
784
Score réaction
473
Points
325
J'ai pas Prometheus donc je peux pas tester complètement, par contre j'ai testé juste le {$_POST['id']}
Sauf que dans mon code ça marche pas du tout comme ça c'est pas aussi simple, toi tu passes directement par le lien ce qui n'est pas possible avec le code il faudrait que l'admin s'amuse à forger une requête http à l'aide d'outils comme curl ou wget et même encore là y a d'autre vérifications + comme je te l'ai dit avant il y a un système de login et de permission avant que l'admin puisse tenter de s'auto hacker
 
Dernière édition:

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
Sauf que dans mon code ça marche pas du tout comme ça c'est pas aussi simple, toi tu passes directement par le lien ce qui n'est pas possible avec le code il faudrait que l'admin s'amuse à forger une requête http à l'aide d'outils comme curl ou wget et même encore là y a d'autre vérifications
PHP:
<?php

SESSION_START();

$page = 'ajax';
include('../functions.php');

if(prometheus::loggedin()) {
    // besoin du cookie PHPSESSID
    // on peux donc faire un truc compliqué ou passer par
    // Firefox / Chrome / Autre

    $j = $_SESSION['uid'];

    if(!isset($_SESSION['already_reported_p'])){
        $_SESSION['already_reported_p'] = false;
    }

    if(empty($_POST['id'])){
        // de toute façon id n'est pas vide vu qu'on a notre injection
        // j'enlève cette section inutile du coup
    }

    if (permissions::has("transactions")){
        // seul la pseudo-élite a le droit d'arriver ici

        $action = $_POST['action'];
        // je me demande ce qu'il se passe
        // si $_POST['action'] est un array

        if($action == "delete"){ // === > ==
            $db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
            // j'ai déjà démontré que ceci était faillible
            prometheus::log('Suppression de la paysafecard : ' . $_POST['id'],  $j, 1);
            // j'ai rien à dire sur ça
        }
Je vois aucun code pour empêcher le chargement direct
Si tu penses qu'on est obligé de passer par curl / wget pour accéder aux paramètre POST :
https://addons.mozilla.org/fr/firefox/addon/hackbartool/?src=search
comme je te l'ai dit avant il y a un système de login et de permission avant que l'admin puisse tenter de s'auto hacker
Normalement avoir cette permission ( dans ton code ) permet seulement de retirer les codes PaySafeCard et d'ajouter de la monnaie mais au final on peux supprimer toute la base de donnée
 
Dernière édition:
  • Initiateur de la discussion
  • #15

Swarzox

Psychopathe
Messages
784
Score réaction
473
Points
325
Y a que un groupe de permission de base dans prometheus avec lequel on peut tout faire hein : https://prntscr.com/jgzaz7 donc en gros y a que les fondateurs qui ont les permissions

+ Essaie de faire tes requêtes pour supprimer la bdd avec prometheus en entier + mon module tu verras que tu pourras pas et même si on pouvait ça reste cocasse un fondateur qui veut supprimer sa bdd
 
  • Initiateur de la discussion
  • #16

Swarzox

Psychopathe
Messages
784
Score réaction
473
Points
325
if(prometheus::loggedin()) { // besoin du cookie PHPSESSID // on peux donc faire un truc compliqué ou passer par // Firefox / Chrome / Autre
J'ai ri

if(empty($_POST['id'])){ // de toute façon id n'est pas vide vu qu'on a notre injection // j'enlève cette section inutile du coup }
Justement ça nous signale si un malin comme toi veut essayer d’accéder directement au lien pour faire des carabistouilles (même si ça mènera à rien)

// je me demande ce qu'il se passe // si $_POST['action'] est un array
Suite du code ?
 
Dernière édition:

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
En effet la variable $_SESSION ( qui est utilisé dans prometheus::loggedin() ) est initialisé en fonction du cookie client PHPSESSID

Je pense que tu n'as toujours pas compris :
On peux faire une injection SQL, ce qui touche donc TOUTE la base de donnée, en ayant JUSTE la permission transactions sur Prometheus

Suite du code ?
Code:
    elseif($action == "add"){
        // partie inintéressante
        // car je ne l'ai pas évoqué
    }
    else {
        die("Erreur, action non déterminée");
    }
} else {
    die("Vous devez être connecté");
}
Bref pour le régler y'a juste à faire un if, je vois pas trop pourquoi tu veux autant d'explication sur quelque chose d'aussi évident
 

Keeta

Geek suprême
Messages
334
Score réaction
101
Points
150
Bref pour le régler y'a juste à faire un if
Comme ça ?
Code:
        if($action == "delete"){
            if (!is_numeric($_POST['id'])) {die();}
            $db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
            prometheus::log('Suppression de la paysafecard : ' . $_POST['id'],  $j, 1);
        }
 

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
Comme ça ?
Code:
        if($action == "delete"){
            if (!is_numeric($_POST['id'])) {die();}
            $db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
            prometheus::log('Suppression de la paysafecard : ' . $_POST['id'],  $j, 1);
        }
Chhhht il ne fallait pas lui dire !
 
Messages
7
Score réaction
8
Points
50
Chhhht il ne fallait pas lui dire !
Tu peux pas l'exploiter dans tous les cas regarde les fonctions include de prometheus un peu jean-jecroissavoircoder

Comme ça ?
Code:
        if($action == "delete"){
            if (!is_numeric($_POST['id'])) {die();}
            $db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
            prometheus::log('Suppression de la paysafecard : ' . $_POST['id'],  $j, 1);
        }
Inutile c'est pas exploitable il veut juste chercher la petite bête pour montrer que c'est le bestcoder2018 regarde la fonction db execute de prometheus
 

Makss

Psychopathe
Messages
865
Score réaction
1 028
Points
310
Inutile c'est pas exploitable il veut juste chercher la petite bête pour montrer que c'est le bestcoder2018 regarde la fonction db execute de prometheus
Sauf que la fonction execute de Prometheus prends en argument un array des paramètres de la requête SQL, dans ce code là
PHP:
$db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
$_POST['id'] est intégré directement à la requete
 

Keeta

Geek suprême
Messages
334
Score réaction
101
Points
150
Sauf que la fonction execute de Prometheus prends en argument un array des paramètres de la requête SQL, dans ce code là
PHP:
$db->execute("DELETE FROM paysafecard WHERE code = {$_POST['id']} ");
$_POST['id'] est intégré directement à la requete
Laisse tomber le seul truc qu'il sait faire c'est réagir avec sa réaction "Disagree" x) cétout
 

Snk

El Dictator
Membre du Staff
Messages
4 180
Score réaction
2 683
Points
790
L'intention initiale est bonne mais attention en effet à la sécurité ;-)

Quand il s'agit d'argent, il faut toujours faire très attention !
 

ZarosOVH

Modérateur
Messages
7 627
Score réaction
6 436
Points
1 295

MineProdZ

Geek suprême
Messages
906
Score réaction
117
Points
160
J'en ai vraiment besoin de ce module, dommage que le lien ne fonctionne plus ...
 

Découvrez mTxServ!

Discord d'entraide

Messages récents

Haut
Rejoignz-nous sur Discord