译 者 序
在网络安全的世界里,需求、场景、时机,往往瞬息万变。一个今天还能打遍天下的0day漏洞,可能明天就会被全网紧急修复;一套一小时前还在线的业务系统,可能下一秒就被蓝队拔了网线。在这种争分夺秒的场景下,Python这样的语言堪称“最好的伙伴”。
Python简单、快捷,效率惊人,写一行代码就能直接看到结果。它拥有非常活跃的开发者社区和丰富的第三方生态,用几行代码就能跨平台实现各种复杂功能。它的动态类型设计虽然在构建大型项目时会导致你写出很烂的代码,但是在攻防场景中却会给你美好顺滑的编程体验——写百十来行的攻击代码就罢,今天打完这一场,明天这些代码就进垃圾桶,管它参数类型是str还是int呢?
对于畅销书《Python黑帽子:黑客与渗透测试编程之道》的再版,两位作者投入了很大的精力,将书中的示例代码进行了全方位的升级,除了引入的Python 3新语法、新框架之外,你能明显地感受到示例代码的质量有了很大提升。前一版中的示例代码看起来像是为了应付需求而随手写的小脚本,而这一版中的示例代码则更像是正经的教学代码或开源项目代码。
本书讨论的话题都非常基础,但也都相当实用,适合有一定Python基础、初学信息安全的同学阅读。亲手实现书里的示例能使你感受到快乐和成就感,但是,如果你想备战CTF拿名次的话,不推荐选择这本书作为参考,因为其定位更偏向于拓展视野和培养兴趣,内容跟CTF的比赛范围几乎没什么重叠。建议“赛棍们”还是好好刷题,专心学习“赛棍”专用读物。
由于水平有限,翻译中难免出现一些错漏和表达不准确的地方,欢迎读者批评指正。
——Gh0u1L5 腾讯玄武实验室研究员
2021年7月于北京
中文版推荐序一
20年前,我刚开始研究网络安全的时候,社区里最流行的脚本语言是Perl。当时,一个Exploit如果不是用C写的,八成就是用Perl写的,没人听说过Python。
那时候Python已经诞生近10年了。其实Python几乎和Perl一样古老。Perl的第一个版本是1987年发布的,而Python的发布时间只比它晚了4年。
但20年后的今天,网络安全社区里已经几乎看不到Perl的影子,人人都在用Python。
一种编程语言的兴衰,固然和其自身有关,但也和技术环境的变化有关,还有一点运气在里面。无论如何,一旦天平开始向一边倾斜,就会产生很大的势能。因为编程语言不仅是人和计算机对话的语言,也是编程者之间沟通的语言。语言的力量是巨大的,可以让我们建起巴别塔。所以技术生态一旦成熟,就会具有强大的生命力。
今天,Python已经成为网络安全社区里最重要的语言之一,而且地位非常稳固。无论是研究Web、操作系统、网络协议,还是硬件或者无线,都可以在社区里找到现成的模块和代码样例。不仅如此,甚至Python自身都已经成为网络攻击的目标——出现了向PyPI仓库投毒的攻击方式。
很多讲编程的书多少都会有些枯燥,但《Python黑帽子:黑客与渗透测试编程之道》(第2版)这本书完全不会。因为它其实并不是在谈Python语言本身,而是以Python作为线索在讲网络安全攻防。也正因为是以Python作为线索的,所以阅读这本书不仅可以学到攻防知识,还能学到怎么用Python去实现。
我还记得7年前《Python黑帽子:黑客与渗透测试编程之道》的第1版发行后,很快就在网络安全社区里流行起来。除了初学者们将其看作必备的入门书籍,一些已经工作了很多年的老家伙也会读。因为即使书中的网络安全知识对我们来说已经并不陌生,但知道如何以Python为工具去运用这些知识,可以帮助我们更高效地完成工作,也能使我们更顺畅地和社区成员交流。
——tombkeeper
中文版推荐序二
本书读起来很顺畅,覆盖了黑客或渗透工程师常用的很多技巧。其特点是,剖析技巧的本质,然后用Python 的内置模块或优秀的第三方模块来实现。
Python 是一门非常酷的主流语言,拥有优美的编码风格、顽强的社区与海量优质的模块,如果看到一段代码写得很好,我们会说:“Pythonic!”这本书用Python 来实现渗透测试中用到的各类技巧与工具,让人不得不说一句:“Pythonic!”
可以看出作者有丰富的渗透测试经验与Python 编程经验,感谢作者能把自己的经验如此清晰地分享出来,也感谢出版社能将这本书引入国内。
这本书的发行,会让更多人投身Python 黑客领域,不再是只会使用他人工具的“脚本小子”,在必要时刻,也能用Python 打造属于自己的漏洞利用工具。
关于Python有句流传甚广的话:“人生苦短,快学Python”。是的,人生苦短,如果你立志成为一名真正的黑客,Python 值得你掌握,这本书是一个非常好的切入点。
——余弦 知道创宇技术副总裁
中文版推荐序三
在日常工作中,Python已经成为我最常用的语言,其代码简洁、高效,同时拥有强大、丰富的第三方库,往往起到事半功倍的效果,极大提高了我的工作效率。
在渗透测试过程中,收集目标的信息、对漏洞进行模糊测试、利用漏洞、提升权限、部署后门等,对渗透测试人员来说都是重复繁杂的工作。幸运的是,这些基本上都可以利用Python来实现自动化、工具化。在这本《Python黑帽子:黑客与渗透测试编程之道》(第2版)中,作者通过渗透实战,从多个维度向读者阐述了Python如何被用在黑客和渗透测试的各个领域。相信本书能够给那些想要利用Python来提升自身水平的读者带来收获。
从Python开始,培养和锻炼自己的黑客思维。本书值得拥有!
——张瑞冬(Only_Guest)无糖信息CEO
中文版推荐序四
曾经去高校宣讲,被问得最多的问题就是,如何成为一名黑客。而成为一名黑客高手,是我们这批从事安全技术的人的梦想。
那么,如何成为高手呢?两个秘诀:持之以恒和动手实践。
记得刚刚接触计算机时,机缘巧合之下我买了本安全技术杂志月刊,但是由于水平所限,里面的技术文章一篇都看不懂。不过我每期都买来看,大约持续了半年,慢慢地发现自己能够看懂了,后来甚至还可以在杂志上发表文章、发布黑客工具。就这样坚持着,我终于走进了安全行业。
“纸上得来终觉浅,绝知此事要躬行”,成为黑客高手的另一个秘诀就是要多实践。实践就一定会涉及开发自己的工具或者优化别人的代码,所以我们必须精通一门甚至多门脚本语言。Python就是这样一门强大的脚本语言,很多知名的黑客工具、安全系统框架都是用Python开发的。比如,大名鼎鼎的渗透测试框架Metasploit、功能强大的fuzz 框架Sulley、交互式数据包处理程序Scapy 都是用Python 开发的,基于这些框架,我们可以扩展出自己的工具(多学一些总是好的,在这里也不必争论是Python 好还是Perl 好这样的问题)。
就我个人的经验来看,与实践结合是快速学习相关能力的路径。这本书就从实战出发,基于实际攻防场景讲解代码思路,能够让读者快速了解和上手Python,进行黑客攻防实战,所以特别推荐给大家。
知易行难,大家在读书的同时不要忘记实践:先搞懂原理,再根据实际需求写出一个强大的Python 工具。
——胡珀(lake2)腾讯安全中心副总监??
中文版推荐序五
几乎所有网络安全经典工具,包括调试器、渗透工具、取证工具、报文分析等都支持使用Python语言编写功能插件。不会编写程序的黑客是一个假黑客,最多是一个顶级的工具小子;而最适合网络安全的编程语言,莫过于Python,可以说不会用Python编程的渗透测试工程师是没有前途的。其实,知道创宇公司从2007年成立之时,就要求除了前端使用JavaScript和少量例外,全公司只允许使用Python语言。这门语言简单易学,各种第三方功能包十分丰富且强大。这本书的编程知识涉及网络安全的方方面,从漏洞的POC到网络通信,从攻击取证到数据报文分析,非常全面,十分实用,是网络安全从业者不可多得的一本好书。鄙人不敢藏私,力荐给大家。
——杨冀龙 知道创宇 CTO
中文版推荐序六
Python 是网络安全领域的编程利器,在分秒必争的CTF 赛场中拥有统治地位,在学术型白帽研究团队和业界安全研究团队中也已经成为主流编程语言。本书作者在其畅销书《Python 灰帽子:黑客与逆向工程师的Python 编程之道》之后,再次强力推出姊妹篇《Python 黑帽子:黑客与渗透测试编程之道》,以其在网络安全领域,特别是漏洞研究与渗透测试方向上浸淫十数年的经验,献上又一本经典的Python 黑客养成手册。我非常高兴地看到译者以精准的翻译、专业的表达将本书内容原汁原味地奉献给国内的读者。
——诸葛建伟 清华大学副研究员/蓝莲花战队联合创始人及领队/XCTF 联赛联合发起人及执行组织者
中文版推荐序七
我们一直认为,一个合格的安全从业者必须有自己动手编写工具和代码的意愿与能力。在这个安全攻防和业务一样日趋大数据化、对抗激烈化又隐蔽化的年代,攻防双方都必须有快速实现或验证自己想法的能力。选择并学习使用一个好的工具会起到事半功倍的效果。
Python则是目前特别适合这种需求的语言。平缓的学习曲线、胶水语言的灵活性和丰富的支持库使其天然成为攻防双方均可使用及快速迭代的利器,几乎可以覆盖安全测试的方方面面。求学时,我使用Scapy(本书中有详细的介绍)和PyQt 库编写了Wifi 嗅探工具WifiMonster;在我参加的CTF 比赛中,基本上所有的漏洞利用工具都是用基于Python 的pwntools 和zio 库编写的;在Keen,我们的很多fuzzer 和静态分析器也都是用Python 编写的。
但令人遗憾的是,目前国内的高校很少有将Python 及其在安全领域方面的应用列入计算机和信息安全专业培养计划的,市面上也缺乏相关图书供从业人员学习。本书填补了这个空白:作者从逆向和漏洞分析挖掘的角度编写了《Python 灰帽子:黑客与逆向工程师的Python 编程之道》后,又从渗透测试和嗅探、取证的角度编写了这本书,介绍Python 在这些方面的应用和相关库的使用。本书译者在安全领域有丰富经验,能保证翻译质量。
相信读者会从本书中受益良多。
——何淇丹(a.k.a Flanker) Keen Team 高级研究员
中文版推荐序八
接触信息安全之前,Python就已经是我的常用语言了,它能满足我日常工作的所有需求。因为对Python 已经有一定了解,接触信息安全以后,借助这一利器,我在信息安全领域的探索进行得很顺利。
老牌大黑客查理·米勒说的没错,脚本小子和职业黑客的区别是黑客会多编写自己的工具而少用别人开发的工具。从事Web 渗透测试相关工作以及参加CTF竞赛的时候,我基本上都是用自己写的Python 脚本来实现目的的:扫描及收集目标的信息,测试大量已知漏洞是否存在,自动发现SQL 注入、XSS 攻击点,对攻击进行抓取、截获和重放,在比赛中大量部署后门进行控制等。
Python 中有大量第三方库,可以让你从无关的工作中脱身,专心实现自己所需要的功能(有时你甚至会发现有人已经很好地实现了你所需要的功能),不被杂乱的事务所困扰。在Web 渗透测试这种重视效率的工作中,用Python快速地把自己的需求转换成能运行的程序,实在是令人兴奋的一件事。
作者在本书中所给出的大量样例和技巧,足以让那些想利用Python 迅速提高Web 渗透测试水平的人得到很大的帮助。但请记住,一定要动手实践。
只有动手实践,才能真正体会到本书的精华所在。
Hacking the planet by Python!
——陈宇森 北京长亭科技有限公司联合创始人/蓝莲花战队核心成员/BlackHat 2015 讲者
推荐序
从我为轰动一时的《Python黑帽子:黑客与渗透测试编程之道》(第1版)作序以来,已经过去6年了。这些年,世界变了不少,但有一件事始终没变:我每天还是要写一大堆Python代码。在计算机安全领域,为了应付各式各样的任务,你每天仍要跟用各种语言编写的工具打交道,比如用C语言写的内核漏洞利用程序,用JavaScript写的JavaScript fuzzer,或是用Rust之类的“花哨”语言写的代理。然而,Python依然是这个圈子里的“得力干将”。在我看来,它仍是最易上手的编程语言,有数不胜数的第三方库;如果需要快速编写代码完成复杂任务,轻松地化繁为简,那么Python是最佳选择。有大量的安全工具和漏洞利用程序仍然是用Python编写的,比如CANVAS这样的漏洞利用框架,以及Sulley这样经典的fuzzer。
在《Python黑帽子:黑客与渗透测试编程之道》(第1版)发行之前,我就已经用Python写过许多fuzzer和漏洞利用程序(攻击代码),攻击过的目标包括Mac OS上的Safari浏览器、苹果手机、安卓手机,甚至还有游戏《第二人生》(你可能需要上网搜一搜这个游戏)。
我还跟Chris Valasek一起写过一段挺特别的攻击代码,它能够远程感染包括2014款Jeep切诺基在内的多款车型。这段攻击代码当然也是用Python写的(基于dbus-python模块)。我们开发了大量工具,能够在感染车辆之后远程控制它的方向盘、刹车和油门。上述这些工具,也全部是用Python开发的。从某种意义上,你甚至可以说是Python害菲亚特克莱斯勒公司召回了140万辆汽车。
如果你喜欢做一些“修修补补”类的信息安全小项目,那么Python是一门非常值得学习的语言,因为Python中有大量的逆向工程框架、漏洞利用框架供你使用。现在,只要那帮Metasploit开发者能恢复神智,弃Ruby投Python,我们的开发者社区就能迎来统一。
此次对这本经典书的升级,Justin和Tim把书里的所有代码都更新到Python 3版本。就个人而言,我是个想要死守Python 2的老顽固,但是当所有第三方库都升级到Python 3时,我也得去接受它。这个新版很好地覆盖了大量知识点,它们都是摩拳擦掌的年轻黑客们入门必备的知识,从如何收发网络数据包,到网络应用审计/攻击所需的各项技能,应有尽有。
总之,《Python黑帽子:黑客与渗透测试编程之道》(第2版)是一本由从业多年的专家精心撰写的好书,无私分享了他们一路走来学到的许多诀窍。也许它不会让你马上变成像我一样的绝世高手,但它绝对能够让你走上一条正确的道路。
记住,脚本小子和职业黑客之间最大的区别,就是前者只会用别人写的工具;而后者,能创造自己想要的一切。
——Charlie Miller
前言
Python黑客、Python程序员,随便你怎么称呼我们。Justin大部分的时间都在做渗透测试,这项工作要求快速开发出各种Python工具,并以最终成果为导向,不一定兼顾美观、性能,甚至稳定性之类的细节。而Tim的口头禅则是“先让代码能用,然后使其易懂、高效”。如果你的代码写得简洁漂亮,不仅能方便别人读懂,你自己隔了几个月再看也会很轻松。通过阅读本书,你将了解我们的编程风格:我们以实现各种又快又脏的巧妙方案为最终目标,而编写干净易懂的代码是我们抵达这个目标的手段。希望这种编程哲学和风格也能对你有所帮助。
自《Python黑帽子:黑客与渗透测试编程之道》(第1版)问世以来,Python世界发生了不小的变化。Python 2于2020年1月被停止维护,Python 3成为目前编程与教学的推荐环境。因此,在本书中我们将所有代码迁移到Python 3,并用上了最新的包与第三方库。我们还用了一些Python 3.6和Python 3以上的版本才引入的语法,比如Unicode字符串、上下文管理器、f-string等。最后,我们还在本书中增补了一些编码和网络编程的知识点,比如上下文管理器的用法、BPF语法,以及ctypes和struct库的比较等。
在阅读本书的过程中,你会发现每个知识点都没有讲太深,这是我们有意为之的。我们希望教你一些基础知识,再加一点简单的技巧,为你进入黑客开发领域打下基础。与此同时,我们在本书里塞了不少拓展阅读材料、有趣的想法和课后作业,以此来启发你找到自己的方向。我们鼓励你去实践这些想法,也欢迎你分享“造轮子”的体验。
像所有技术图书一样,本书会带给不同水平的读者相当不同的体验。有的人可能只需要翻看自己急需的内容,而有的人则需要从头到尾读完全书。如果你是一名初级至中级水平的Python程序员,建议你按章节顺序通读本书,这个过程能让你学到不少东西。
作为开场,我们将在第2章介绍网络方面的基础知识,在第3章仔细讲原始socket,在第4章介绍如何使用Scapy开发有趣的网络工具。之后我们将讨论如何攻击Web应用。在第5章我们会先教你编写一些典型的Web黑客工具,然后在第6章用鼎鼎大名的Burp Suite来编写一些攻击插件。再接下来,我们花大量的篇幅讨论木马,从第7章的基于GitHub服务的C&C通信,一直讲到第10章的Windows提权技术。在最后一章我们学习Volatility内存取证库,它既能帮你理解防守方是如何思考的,又能让你明白如何以子之矛,攻子之盾。
我们会尽可能地让书中的代码样例及解释说明文字保持简明扼要的风格。如果你刚刚开始接触Python,建议你动手敲书里的每一行代码,好好锻炼一下写代码的手感。书中的所有源代码都可以在链接1所指的页面 上找到。
现在,让我们出发吧!