sobota, 19 maja 2012

Def-Blog CMS v1.0.2 - Multiple Web Vulnerabilities



Def-Blog CMS jest bardzo prosty do zainstalowania na serwerze w krótkim czasie.  
Pozwala zarządzać:

* Artykułami z komentarzami
* Formularzami z danymi osobowymi
* Kontaktami z różnymi informacjami na ich temat
* Ocenami użytkowników
* Aktualnym szablonem



Jest w nim wiele błędów SQL Injection.
W kodzie są też błędy XSS.
 
Dziurawe pliki: 
 
* SQL Injection
               [+] comlook.php
               [+] comaddok.php
               [+] modif.php
               [+] vue.php
               [+] redir.php
               [+] comlook.php
               [+] modifok.php
               [+] sup.php
 
*XSS 
 
               [+] modules/Commentaires/mod_commentaires.php
               [+] administration/articles.php
               [+] administration/categories.php
               [+] administration/pages.php
               [+] administration/configuration.php
               [+] administration/utilisateur.php
 
PoC:
               [+] http://127.0.0.1/defblog/comaddok.php?article=[vuln]
               [+] http://127.0.0.1/defblog/modif.php?type=article&id=[vuln]
               [+] http://127.0.0.1/defblog/modif.php?type=creas&id=[vuln]
               [+] http://127.0.0.1/defblog/vue.php?id=[vuln]
               [+] http://127.0.0.1/defblog/redir.php?id=[vuln]

Fix:
 
W pliku: comaddok.php
W lini:

19:  $Tout = addslashes($_GET['article']); 
20:  $Tout = htmlentities($Tout);

W pliku: comlook.php
W lini: 

21:  $Tout = addslashes($_GET['article']); 
22:  $Tout = htmlentities($Tout);

W pliku: modif.php
W lini: 
29:  $Tout = addslashes($_GET['id']); 
30:  $Tout = htmlentities($Tout);

W pliku: modifok.php
W lini: 

27:  $Tout = addslashes($_GET['id']); 
28:  $Tout = htmlentities($Tout);

W pliku: sup.php
W lini: 

29:  $Tout = addslashes($_GET['id']); 
30:  $Tout = htmlentities($Tout);

Przykładowe filtrowanie które możemy utworzyć, to np.
pod ostatnią pokazaną tutaj linijką każdego pliku dopisać:

                 $Tout = (int)$Tout ;

W pliku: imprt.php
W lini: 

19:  if (isset($_GET['id'])) { $id = addslashes($_GET['id']); }

W pliku: redir.php
W lini: 

17: if (isset($_GET['id'])) { $id = addslashes($_GET['id']); }

W pliku: vue.php
W lini: 

17: if (isset($_GET['id'])) { $id = addslashes($_GET['id']); }

Tutaj, pod każdą pokazaną linijką każdego pliku można dopisać:

                  $id = (int)$id;

W pliku: imprt.php
W lini: 

26:  $pseudo = addslashes($_POST['pseudo']); 
 
28:  $TheTexte = addslashes($_POST['TheTexte']); 
 
92:  $pseudo = addslashes($_POST['pseudo']); 
 
117:  if($_POST['prenom']!='') { $prenom=addslashes($_POST['prenom']); } 
      else { $prenom='Aucun'; } 
 
128:  if($_POST['prenom']!='') { $prenom=addslashes($_POST['prenom']); } 
      else { $prenom='Aucun'; } 
 
119:  if($_POST['loc']!='') { $localisation=addslashes($_POST['loc']); } 
      else { $localisation='Aucune'; } 
 
120:  if($_POST['loisirs']!='') { $loisirs=addslashes($_POST['loisirs']); } 
      else { $loisirs='Aucun'; } 
 
121:  if($_POST['emploi']!='') { $emploi=addslashes($_POST['emploi']); } 
      else { $emploi='Aucun'; } 
 
122:  if($_POST['citation']!='') { $citation=addslashes($_POST['citation']); } 
      else { $citation='Aucune'; } 
 
123:  if($_POST['mail']!='') { $mail=addslashes($_POST['mail']); } 
      else { $mail='Aucune'; } 
 
124:  if($_POST['msn']!='') { $msn=addslashes($_POST['msn']); } 
      else { $msn='Aucune'; } 
 
125:  if($_POST['yahoo']!='') { $yahoo=addslashes($_POST['yahoo']); } 
      else { $yahoo='Aucune'; } 
 
126:  if($_POST['icq']!='') { $icq=addslashes($_POST['icq']); } 
      else { $icq='Aucune'; } 
 
127:  if($_POST['aim']!='') { $aim=addslashes($_POST['aim']); } 
      else { $aim='Aucune'; } 
 
129:  $web=addslashes($_POST['web']); 
 
157:  $pseudo = addslashes($_POST['pseudo']); 
 
203:  if($_POST['TheTexte']!='') { $TheTexte=addslashes($_POST['TheTexte']); } 
      else { $TheTexte='Aucun'; } 
 
231:  $pseudo = addslashes($_POST['pseudo']); 
 
260:  if($_POST['prenom']!='') { $prenom=addslashes($_POST['prenom']); } 
      else { $prenom='Aucun'; } 
 
263:  if($_POST['msn']!='') { $msn=addslashes($_POST['msn']); } 
      else { $msn='Aucun'; }

W pliku: modifok.php
W lini: 

131:  if($_POST['msn']!='') { $msn=addslashes($_POST['msn']); } 
      else { $msn='Aucun'; } 
 
208:  if($_POST['TheTexte']!='') { $TheTexte=addslashes($_POST['TheTexte']); } 
      else { $TheTexte='Aucun'; }

Możemy dodać htmlspecialchars oraz np. strip_tags.
Wtedy zamieniamy wyświetlone powyżej linie na takie:

W pliku: imprt.php
W lini: 
 
26:  $pseudo = addslashes($_POST['pseudo'])); 
 
28:  $TheTexte = addslashes($_POST['TheTexte'])); 
 
92:  $pseudo = addslashes($_POST['pseudo'])); 
 
117:  if($_POST['prenom']!='') { 
         $prenom=htmlspecialchars(strip_tags($_POST['prenom'])); } 
      else { $prenom='Aucun'; } 
 
128:  if($_POST['prenom']!='') { 
         $prenom=htmlspecialchars(strip_tags($_POST['prenom'])); } 
      else { $prenom='Aucun'; } 
 
119:  if($_POST['loc']!='') { 
         $localisation=htmlspecialchars(strip_tags($_POST['loc'])); } 
      else { $localisation='Aucune'; } 
 
120:  if($_POST['loisirs']!='') { 
         $loisirs=htmlspecialchars(strip_tags($_POST['loisirs'])); }
      else { $loisirs='Aucun'; } 
 
121:  if($_POST['emploi']!='') { 
         $emploi=htmlspecialchars(strip_tags($_POST['emploi'])); } 
      else { $emploi='Aucun'; } 
 
122:  if($_POST['citation']!='') { 
         $citation=htmlspecialchars(strip_tags($_POST['citation'])); } 
      else { $citation='Aucune'; } 
 
123:  if($_POST['mail']!='') { 
         $mail=htmlspecialchars(strip_tags($_POST['mail'])); } 
      else { $mail='Aucune'; } 
 
124:  if($_POST['msn']!='') { 
         $msn=htmlspecialchars(strip_tags($_POST['msn'])); } 
      else { $msn='Aucune'; } 
 
125:  if($_POST['yahoo']!='') { 
         $yahoo=htmlspecialchars(strip_tags($_POST['yahoo'])); } 
      else { $yahoo='Aucune'; } 
 
126:  if($_POST['icq']!='') { 
         $icq=htmlspecialchars(strip_tags($_POST['icq'])); } 
      else { $icq='Aucune'; } 
 
127:  if($_POST['aim']!='') { 
         $aim=htmlspecialchars(strip_tags($_POST['aim'])); } 
      else { $aim='Aucune'; } 
 
129:  $web=htmlspecialchars(strip_tags($_POST['web'])); 
 
157:  $pseudo = htmlspecialchars(strip_tags($_POST['pseudo'])); 
 
203:  if($_POST['TheTexte']!='') { 
         $TheTexte=htmlspecialchars(strip_tags($_POST['TheTexte'])); } 
      else { $TheTexte='Aucun'; } 
 
231:  $pseudo = htmlspecialchars(strip_tags($_POST['pseudo'])); 
 
260:  if($_POST['prenom']!='') { 
         $prenom=htmlspecialchars(strip_tags($_POST['prenom'])); } 
      else { $prenom='Aucun'; } 
 
263:  if($_POST['msn']!='') { 
         $msn=htmlspecialchars(strip_tags($_POST['msn'])); } 
      else { $msn='Aucun'; }

W pliku: modifok.php
W lini: 

131:  if($_POST['msn']!='') { 
         $msn=htmlspecialchars(strip_tags($_POST['msn'])); } 
      else { $msn='Aucun'; } 
 
208:  if($_POST['TheTexte']!='') { 
         $TheTexte=htmlspecialchars(strip_tags($_POST['TheTexte'])); } 
      else { $TheTexte='Aucun'; }

Brak komentarzy:

Prześlij komentarz