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科学计算环境推荐——Anaconda
Jun 30 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
Python数据类型学习笔记
Jan 13 Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
Python面向对象之继承代码详解
Jan 29 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
Python实现自动访问网页的例子
Feb 21 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 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检测文件编码的函数
2014/04/21 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
VSCode搭建Vue项目的方法
2020/04/30 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[03:17]史诗级大片应援2018DOTA2国际邀请赛 致敬每一位坚守遗迹的勇士
2018/07/20 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
美国留学经济担保书
2014/05/20 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
闪闪红星观后感
2015/06/08 职场文书
初三化学教学反思
2016/02/22 职场文书
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle