python妙用之编码的转换详解


Posted in Python onApril 21, 2017

前言

记得刚入门那个时候,自己处理编码转换问题往往是“百度:url解码、base64加密、hex……”,或者是使用一款叫做“小葵多功能转换工具”的软件,再后来直接上Burpsuite的decoder功能,感觉用的还挺好的。不过,也遇到些问题:在线转换效率低(搜索占去了2/3的时间)、两款工具存在一些小问题,比如burp中涉及中文往往显示乱码。

python妙用之编码的转换详解

python妙用之编码的转换详解

直到使用python来作为我日常编码转换工具……

开启py转换之旅

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常常用作网页表单和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

十六进制编码也是web application中常见的一种编码方案。作为一名web安全人员,我们心知肚明的是,MySQL注入可以使用hex绕过htmlspecialchars()函数从而写入webshell。

比如:

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

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

>>> '<?php @eval($_POST[a]); ?>'.encode('hex')
'3c3f70687020406576616c28245f504f53545b615d293b203f3e'
>>>
>>> print '3c3f70687020406576616c28245f504f53545b615d293b203f3e'.decode('hex')
<?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 '/web/1.php'

使用python将字符串转换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 ''.join(map(chr,l)) #感谢pcat表哥指出的方法
<?php phpinfo() ?>

Md5

md5在web安全界可以说是人尽皆知了,以他的不可逆性,大多数网站存储用户密码等关键数据时常常使用md5加密。有的时候我们提交payload需要md5加密,这个时候用下面的方法就可以轻松实现。当然解密的话推荐去cmd5。

>>> from hashlib import md5
>>> m = md5()
>>> m.update('this is a secret')
>>> m.hexdigest()
'7dbbcee180ba4d456e4aa1cfbdad9c7b'

>>> m.hexdigest()[8:-8]
'80ba4d456e4aa1cf'
>>>

Unicode转中文

unicode转换中文,很多情况下都能遇到。尤其是在做渗透测试的时候。用burp的话会存在中文乱码的问题,在python下实现非常简单。

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

总结

python实际上在实际使用中非常方便,编码转换只是其中一个例子。文中提到的编码转换皆为笔者日常积累,如果有没有涉及到的地方,欢迎评论补充。好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python抓取网页时字符集转换问题处理方案分享
Jun 19 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
Python 转换文本编码实现解析
Aug 27 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
keras slice layer 层实现方式
Jun 11 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
Python实战之实现简易的学生选课系统
May 25 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 #Python
Python学习笔记之解析json的方法分析
Apr 21 #Python
Python正则抓取网易新闻的方法示例
Apr 21 #Python
Python中shape计算矩阵的方法示例
Apr 21 #Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 #Python
用python找出那些被“标记”的照片
Apr 20 #Python
python实现12306火车票查询器
Apr 20 #Python
You might like
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php上传文件问题汇总
2015/01/30 PHP
php生成RSS订阅的方法
2015/02/13 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
php格式文件打开的四种方法
2018/02/24 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python3.3实现乘法表示例
2014/02/07 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
中国梦我的梦演讲稿
2014/04/23 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis