黑客需要用到的Python技术?

Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测工具)。Python允许开发者编写脚本处理远程服务,处理二进制文件,与C语言库(或者Java的Jython/。Net的IronPython)以快速且简单的方式进行交互。它“内置电池”原则的巨大标准库,为开发省去对其它框架或者语言的依赖。

小编整理一套Python资料和PDF,有需要Python学习资料可以加学习群:631441315 ,反正闲着也是闲着呢,不如学点东西啦~~

我想跟读者们分享个人的Python编程经历,这些也许会对你未来的工作有所帮助,让这个世界变得更加安全一些(注:大多数例子基于Python3.0以上版本编写的,有些可以兼容python所有分支)。

1. 环境配置

对于你要编写的大多数工程或者脚本,建议读者们最好将所有的依赖放在同一个位置(除了有些在特殊工程中才用到的依赖)。为了满足上述要求,需要用到一个叫virtualenv的工具(Python3.3已经包括该工具),这个工具有一个简洁的功能,就是在不打乱全局环境的基础上,为你的Python工程生成独立的环境:

# 生成新环境的方法如下:$ virtualenv <新环境的路径># 或者在Python3.3以上的环境中:$ python3 -mvenv <新环境的路径># 使用这个环境之前,你要先激活它:$ source <新环境的路径>/bin/activate# 禁止该环境的方式也很简单:$ deactivate

2. 安装依赖包

很多时候读者们会发现,借助大型python社区中的python库编写的个人工具,可以帮助我们很快得到结果。你可以通过个人软件管理包或者可用的python软件包管理器安装这些库,其中最权威的就是pip工具了。有了pip,你可以全局安装这些依赖包(#pip install),或者逐用户安装(

pip install)。读者可以手动地使用个人发行版包管理器,或者基于Python3.4提供的库,安装pip包。

有一个基本的python包叫iPython,通常在我不是100%肯定该如何解决当前任务,想尝试做些实验时,我会安装这个依赖包。IPython是常用的python命令行,它是基于Python编写的,有以下几个特点:

动态对象内省

通过Tab完成本地命名空间

持续的历史记录

会话日志

路径补全

JIT调试器

自动缩进

和平常一样,通过pip安装也很简单:$ pip install ipython

如果你想创建教程或者其它文本文件,ipython中的笔记本特性(现在由jupyter提供)允许用户通过个人浏览器和IPython命令行交互,包括markdown、 mathjax、matplotlib等工具支持。

(通过安装jupyter(pip install jupyter)可以使用它们,开启笔记本服务通过(jupyter notebook))。

如果读者们需要与包括JSON/XML的HTTP服务交互,我建议特别好用的requests依赖库。该python库可以处理与网页交互面对的各类操作,如编码、解码、参数、标记、重定向等。例如,请求和解析一个JSON资源的代码如下:

r = requests.get(‘https://api.github.com/user‘, auth=(‘user‘, ‘pass‘))r.json(){u‘private_gists‘: 419, u‘total_private_repos‘: 77, ...}

大多数HTML解析和交互工作都可以交给BeautifulSoup库,该python库可以在任何现在浏览器上处理HTML输入,包括修复受损代码。

3. 与网络交互

我们大多数目标都有可能在网络上获取,安装好的标准库中已经包含了通用的、有用的python库,这里我对其进行简短的介绍。socket模块是基于BSD socket API的瘦包装器,它在所有的通用操作系统都可用。

所以如果你已经有C语言socket编程经验,你可以将你的代码轻易地翻译成python代码。有很多特别方便的函数,如create_connection函数可以创建TCP socket,建立本机和给定主机或者端口的连接。另一个包装器是sendall方法,有些数据只有当所有给定数据都被发出,或者有错误发生才能在线路中传输,而sendall方法可以尝试重传这些数据。

from __future__ import unicode_literalsimport sockets = socket.create_connection((‘www.ernw.de‘, 80))s.sendall(b‘GET / HTTP/1.1Host: www.ernw.de‘)print(s.recv(1024))

增加TSL加密链路也非常简单:

from __future__ import unicode_literalsimport socketimport ssls = socket.create_connection((‘www.ernw.de‘, 443))s = ssl.wrap_socket(s)s.sendall(b‘GET / HTTP/1.1Host: www.ernw.de‘)print(s.recv(1024))

上述功能也可以在已经使用的连接中实现:

from __future__ import unicode_literalsimport socketimport ssls = socket.create_connection((‘smtp.example.com‘, 25))s.sendall(b‘HELO smtp.example.comSTARTTLS‘)print(s.recv(1024))s = ssl.wrap_socket(s)s.sendall(b‘MAIL FROM:<[email protected]>‘)print(s.recv(1024))

如何你不需要这些低级服务交互,还有些模块可以提供高层服务交互:

smtplib

ftplib

poplib

imaplib

httplib (Python 3以上版本的http客户端)

nntplib

telnetlib (应用于服务开发和之后的需要交互命令行会话)

xmlrpclib (Python 3以上版本的xmlrpc客户端)

4. 二进制操作或编码

当开发与服务或者文件交互的脚本时,你经常会发现需要将数据转换为不同格式或者编码。在Python2.x版本中,通常使用encode或者decode方法将字符串在不同格式之间转换。

"Hello World".encode("hex")"AAA=".decode("base64")

很可惜,这种捷径在Python3.x版本中被取消了,encode和decode方法当前只可以实现字符编码,如utf-8, cp1250, iso8859, big5等。

作为替代,你现在只能使用bytes类型的两种方法实现十六进制编码:

bytes.fromhex(‘414141‘)b‘AAA‘.hex() # 从Py3.5 开始

对于Base64编码,你需要使用另外的模块(在Python2.x版本中也有):

import base64base64.b64encode(b‘Hello World‘)import codecscodecs.encode(b‘Hello World‘, ‘base64‘)import binasciibinascii.b2a_base64(b‘Hello World‘)

URLs编码或者解析可以用urllib.parse模块实现(Python2.x版本中是urllib)

from urllib.parse import quote_plus, unquote_plusquote_plus(‘Hello World+1=1337‘) # Hello+World%2B1%3D1337unquote_plus(‘Hello+World‘) # Hello World

Python普通数据类型(如int,float,str)与二进制之间的一般转换,可以在stuct模块中实现:

import structstruct.pack(‘<I‘, 1337) # convert the integer 1337 into its little endian, 32 bit representationstruct.unpack(‘<I‘, b‘‘)[0] # returns tuple of results -> get only the first resultstruct.unpack(‘<I4s‘, b‘Test‘) # returns (16, b‘Test‘)

Python3.2也可以使用int类型直接获取其二进制表示:

a = 1337a.to_bytes(4, ‘little‘) # 32 bit little endiana.to_bytes(2, ‘big‘) # 16 bit big endianint.from_bytes(b‘‘, ‘little‘) # 16

ctypes 模块还有一个特别棒的特征,如果你将cpython作为解译器(通常大家都是这样),就可以使用ctypes.Structure结构化描述C语言,获取它们的二进制表示,就好像从C应用程序中转储的一样。

from ctypes import *import ioclass TestStructure(Structure): _fields_ = ((‘foo‘, c_int), (‘bar‘, c_char))t = Test()t.foo = 1337t.bar = b‘A‘b = io.BytesIO()b.write(t)b.seek(0)print(b.getvalue()) # 9At2 = Test()b = io.BytesIO(b‘B‘)b.readinto(t2)print(t2.foo) # 16print(t2.bar) # B

ctypes 模块通常是Python程序集和C语言库之间的桥梁,不需要编写任何Python包装器。有了ctypes模块,你可以使用任何C语言库和其输出函数:

from ctypes import *libc = ctypes.CDLL(‘libc.so.6‘)libc.printf(b‘Hello World‘)

上文中提到Structure 类型主要用于C语言库的交互,在函数调用过程中传递或者获取结构。

5. 漏洞开发工具

很多CTF团体提供他们自己的的CTF解决方案框架,我发现来自Gallopsled 的pwntools框架特别有用,尤其是开发远程elf二进制时,它包含很多方便的函数,例如位移计算(通过cyclic模式)、格式化字符串开发(普通数据馈送以及产生的格式化字符串)、跳转组合(基于ropgadget解析elf二进制以及提供生成简单跳转组合调用的包装器)和不同传输通道的全部API(称作管道)。这些可以让读者们开发gdb编译后端,同时简单地改变一行代码就可以传输到目标服务。

from pwn import *r = gdb.debug(‘./level3‘)# r = remote(IP, PORT) # 为了做一个远程交互式的接口,先注释r.recvuntil(‘: ‘)r.sendline(EXPLOIT)r.interactive() # 开启一个交互式会话

原文地址:https://www.cnblogs.com/qingdeng123/p/11311889.html

时间: 2024-10-13 19:55:45

黑客需要用到的Python技术?的相关文章

IBM Python 技术专题

Python 技术专题 Python 是由 Guido van Rossum 开发的,可免费获得的.是一种非常高级的解释型语言.其语法简单易懂,而且面向对象的语义功能强大又灵活,Python 可以广泛使用并具有高度的可移植性.本专题内容包括可爱的 Python 系列.Python 探索系列.Python 扩展.使用 Python 进行各种应用开发等等. 可爱的 Python 系列 可爱的 Python:将 XML 和 Python 结合起来 介绍 Python 的 XML 工具 可爱的 Pyth

Python技术公众号100天了

公众号100天了,是个值得一提的日子! 我从2017年10月31日开始做这个公众号,到今天2018年2月7日,差不多100天时间 .虽然公众号很早就申请了,但直到去年10月31日,我才有真正把这个公众号搞好的打算. 其实刚开始也没有想到做什么主题的公众号,但我个人认为开公众号就需要做一些有价值的事情,而不是随便写点东西,一开始我就给自己定下了这样的价值观. 公众号立意 经常在微信群里看到大家在聊Python ,而且平时我也是关注很多Python方面的技术文章以及公众号. 我认为用Python做一

基于Python技术栈的算法落地踩坑

背景介绍 在一些业务场景,我们需要把离线训练好的模型以微服务部署线上,如果是简单的使用sklearn pipeline,可以保存为XML格式的pmml供Java调用,在配置为4 core,8G内存的docker环境可以提供8K左右的高并发,并且这种docker可以快速大规模部署到PaaS云平台,优势相当明显,实际情况是算法人员会基于Python自定义lambda处理数据,而自定义的lambda是很难保存到pmml中的,并且很多公司的算法团队也是要求基于Python技术栈是 落地的. 踩坑过程 算

国外线下技术俱乐部建设(1) - Belgrade Python技术俱乐部2019-01-25活动感悟

虽然之前接触过Belgrade的.NET技术俱乐部,但是它最近活动要春节后了. 出于观摩别人是怎么搞线下社区的心态,还有自己也有在用Python,所以就参加了1月25日Belgrade Python俱乐部活动了. 该活动的线上网址是:https://www.meetup.com/PythonBelgrade/events/257744885/ 这是活动图片: 先流水账回顾一下,然后再做活动总结吧. 这天天气很差,大雪纷飞,然而活动有123人报名,实到大概有几十人. 坐在我后面的是两个大波金发碧眼

【转】如果有人让你推荐Python技术书,请让他看这个列表

入门级 <Head First Python>+ 入门级 + 微信49票 + 豆瓣评分 9.5 推荐语: 66:浅显易懂,编排的顺序特别,有大量插图.对话,不感觉枯燥 古心:通熟易懂,配有大量の图片,不会觉得枯燥,是一本好的入门书 <集体智慧编程>+ 入门级 + 微信123票 + 豆瓣评分 9.0 推荐语: Mèr?ury:以具体实例的方式来展示Python的编程技巧,受益良多 <Python源码剖析>+ 入门级 + 58票 + 豆瓣评分 8.7 推荐语: 王小惟:正在

【Python灰帽子--黑客与逆向工程师的Python编程之道】我的学习笔记,过程.(持续更新HOT)

我的学习笔记---python灰帽子 世界让我遍体鳞伤,但伤口长出的却是翅膀. -------------------------------------------- 前言 本书是由知名安全机构ImmunityInc的资深黑帽JustinSeitz先生主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍. 很庆幸,我会对这方面感兴趣,初中寥寥草草的涉及过一滴点逆向工程只是为了破解某软件刷刷QB啥,当然那是以前..现在回想起来也有点自娱自乐的感觉...接下来这会成为这几

程序员之数据分析Python技术栈

引言: Python是一种非常流行的脚本语言,其还提供了一个科学技术栈,可以进行快捷方便的数据分析,本系列文章将聚焦在如何使用基于Python的技术栈来构建数据分析的工具集合.工欲善其事,必先利其器,让我们来看看这些工具吧. 0. 数据分析 以及机器学习 信息时代唯一不变的就是变化. 随着信息化技术的推广和应用,大数据技术的大规模应用,于是乎数据分析.数据挖掘.机器学习甚至于从前高大上的人工智能(AI)已经开始频繁出现在各个场合,这一切昭示着数据时代的来临. 对于程序猿们来说,除了写代码,实现特

python - 技术提高要点之一,函数式编程,性能,测试和编码规范

摘自:http://www.cnblogs.com/kaituorensheng/p/4516983.html 函数式编程 命令式的编程风格已经成为事实上的标准.命令式编程的程序是由一些描述状态转变的语句组成.虽然有时候这种编程方式十分的有效,但有时也不尽如此(比如复杂性)--而且,相对于声明式编程方式,它可能会显得不是很直观. 如果你不明白我究竟是在说什么,这很正常.这里有一些文章能让你脑袋开窍.但你要注意,这些文章有点像<骇客帝国>里的红色药丸--一旦你尝试过了函数式编程,你就永远不会回头

黑客专家深度分析区块链技术主要用途

区块链的缺陷及其面临的技术挑战,黑客教父郭盛华试图警示大家:该技术还处于非常早期的阶段,企业应做足信息安全措施,以防泄露信息. 区块链技术可以集成到多个领域.目前,区块链的主要用途是作为加密货币的分布式账本,最值得注意的是比特币.虽然在印度,中国,美国,瑞典,新加坡,南非和英国等国家的几个中央银行正在研究发行中央银行颁布的加密货币(CICC),但迄今为止没有这样做. 一般潜力 区块链技术在长期转变商业运营模式方面具有巨大潜力.区块链分布式分类账技术更像是一种基础技术 - 具有为全球经济和社会系统