首页>参考读物>金融学>金融工程习题

C#灰帽子:设计安全测试工具
作者 : [美]布兰德·佩里( Brandon Perry )著
译者 : 王自亮 侯敬宜 李伟 译
出版日期 : 2018-02-28
ISBN : 978-7-111-59076-7
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 292
开本 : 16
原书名 : Gray Hat C#: A Hacker's Guide to Creating and Automating Security Tools
原出版社: No Starch Press
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书介绍如何用C#核心库进行漏洞扫描、恶意软件自动分析和安全事件响应等,如何编写安全实用工具可应用于Mac、Linux、移动平台等。例如,编写模糊分析器以便用HTTP和XML库扫描SQL和XSS注入,在 Metasploit中生成shell代码来创建跨平台和跨架构的工具, 用Nessus、OpenVAS和sqlmap自动化扫描漏洞并利用SQL漏洞,写一个Mac和Linux网络反编译,解析和脱机读取注册表来得到系统信息,将安全工具Arachni和Metasploit自动化,用C#工具库和本书提供的工具可简化日常安全工作。

图书特色

图书前言

很多人问我为什么喜欢C#。我原本是一个开源软件的支持者、忠实的Linux用户和Metasploit的贡献者(主要使用Ruby编写),然而我却把C#当作我最喜欢的语言,这似乎很奇怪。这是为什么呢?许多年前,当我开始使用C#的时候,Miguel de Icaza(因GNOME出名)开始了一个叫作Mono的小项目。在本质上,Mono是一个Microsoft .NET框架的开源实现。C#被提交为ECMA标准,微软将其吹捧为替代Java的框架(因为C#代码可以在一个系统或平台上编译并在其他地方运行),唯一的问题是微软只为Windows操作系统发布了.NET框架。Miguel和一小群核心贡献者接受了使Mono项目成为.NET到达Linux社区的桥梁的重任。幸运的是,我的一个朋友建议我学习C#,但是他也知道我对Linux很感兴趣,他为我指明了这个刚刚起步的项目的方向,看看我是否可以同时使用C#和Linux。之后,我被C#深深吸引了。
C#是一种优雅的语言,C#的发明者和主要架构师Anders Hejlsberg曾经为Pascal编写编译器,然后为Delphi编写编译器,这些经历使他对各种编程语言的真正特点有深刻的理解。Hejlsberg加入微软之后,于2000年左右推出了C#。早年,C#与Java共享了很多语言特性,比如Java的语法细节,但是随着时间的推移,C#自成一派,并早于Java引入了一大堆功能,例如LINQ、代理和匿名方法。使用C#,你可以使用许多C和C++的强大特性,可以使用ASP.NET栈或丰富的桌面应用程序编写完整的Web应用程序。在Windows上,WinForms是UI库的首选,但对于Linux来说,GTK和QT库更易于使用。最近,Mono已经可以在OS X平台上支持Cocoa工具包,甚至支持iPhone和Android。
为什么信任Mono
贬低Mono项目和C#语言的人声称,Mono等技术如果在非Windows的任何平台上使用都是不安全的。他们认为微软将会停止开发Mono,使Mono被遗忘到许多人都不会严肃谈论这个项目的程度。我不认为这是一个风险。在撰写本书时,微软不仅收购了Xamarin公司(该公司由Miguel de Icaza创建以支持Mono框架),而且微软拥有大量的开源的核心.NET框架。在Steve Ballmer的领导下,微软还以许多令人难以想象的方式接受了开源软件。新任首席执行官Satya Nadella表示,微软与开源软件对接根本没有任何问题,建议各种公司要积极参与Mono社区,以便使用微软的技术来进行移动开发。
本书的读者对象
在网络和应用安全工程师中,许多人在一定程度上依赖自动化地扫描漏洞或分析恶意软件。因为有很多安全专业人员喜欢使用各种操作系统,所以编写每个人都可以轻松运行的工具可能很困难。Mono是一个不错的选择,因为它是跨平台的,并且有一个优秀的核心库集合,使安全专业人员将各种工作自动化变得简单。如果你有兴趣学习如何编写攻击性的Exploit、自动扫描基础设施的漏洞、反编译其他.NET应用程序、读取离线注册表配置单元、创建自定义跨平台载荷,那么本书涵盖的许多内容都会让你快速入门(即使你没有C#的使用背景)。
本书的主要内容
在本书中,我们将介绍C#的基础知识,然后使用合适的、丰富的库快速实现实际能用的安全工具。在应用程序之外,我们会编写模糊工具来找到可能的漏洞,并编写代码对发现的任何漏洞进行全面利用。你将看到C#语言特性和核心库的强大功能。一旦学习了基础知识,我们将自动化目前流行的安全工具,比如Nessus、Sqlmap和Cuckoo Sandbox。总之,在读完本书后,你将有一个包含库的执行方案列表,将许多安全专业人员经常执行的工作自动化。
第1章:C#基础知识速成
在这一章中,我们通过简单的例子介绍C#面向对象编程的基础知识,但同时覆盖了各种各样的C#特性。我们从一个Hello World程序开始,然后构建小的类,以便更好地了解面向对象的概念,然后介绍更高级的C#特性,例如匿名方法和P/Invoke。
第2章:模糊测试和漏洞利用技术
在这一章中,我们使用各种数据类型编写了一个寻找XSS和SQL注入的小型HTTP请求模糊工具(通过HTTP库与Web服务器通信)。
第3章:对SOAP终端进行模糊测试
在这一章中,我们采用前几章介绍的模糊测试工具概念,编写了另一个小型模糊测试工具,通过自动生成HTTP请求来检索和解析SOAP WSDL,以查找潜在的SQL注入。
同时该章也会介绍如何从标准库中获得优秀XML库。
第4章:编写有效载荷
在这一章中,我们将重点放在HTTP上,继续编写有效载荷。我们首先创建几个简单的有效载荷——一个通过TCP,另一个通过UDP。然后学习如何在Metasploit中生成x86/x86-64 shellcode来创建跨平台和跨架构的有效载荷。
第5章:自动化运行Nessus
在这一章中,为了将几个漏洞扫描程序自动化,我们回到HTTP(第一个是Nessus),通过编程了解如何创建、观察和报告CIDR扫描的范围。
第6章:自动化运行Nexpose
在这一章中,我们继续专注于工具自动化,只不过转到Nexpose漏洞扫描器上。Nexpose
的API也是基于HTTP的,可以自动化扫描漏洞并创建报告。Rapid7是Nexpose的创始人,为其社区产品提供一年免费的许可证,这对业余爱好者非常有用。
第7章:自动化运行OpenVAS
在这一章中,我们专注于使用开源的OpenVAS使漏洞扫描自动化。OpenVAS的API仅使用TCP套接字和XML实现通信协议,从根本上与Nessus和Nexpose不同。因为它也是免费的,所以对于希望通过有限的预算获得更多的漏洞扫描经验的爱好者来说很有用。
第8章:自动化运行Cuckoo Sandbox
在这一章中,我们将使用Cuckoo Sandbox进行数字取证。使用易用的REST JSON API自动提交潜在的恶意软件样本,然后报告结果。
第9章:自动化运行sqlmap
在这一章中,我们通过自动化执行sqlmap,最大限度地发挥SQL注入的危害。首先编写一些小工具,使用与sqlmap一起发送的易用的JSON API提交单个URL。一旦熟悉了sqlmap,我们会将其集成到第3章介绍的SOAP WSDL模糊测试工具中,自动利用和验证任何潜在的SQL注入漏洞。
第10章:自动化运行ClamAV
在这一章中,我们开始关注与本机的非托管库进行交互。ClamAV是一个受欢迎的开源反病毒项目,虽然不是用.NET语言编写的,但是我们仍然可以与其核心库以及TCP守护进程交互,这将允许远程使用。我们会在这两种情况下介绍如何将ClamAV自动化。
第11章:自动化运行Metasploit
在这一章中,我们重点介绍Metasploit,学习如何通过配有核心框架的MSGPACK RPC以编程的方式利用和报告植入shell的主机。
第12章:自动化运行Arachni
在这一章中,我们关注通过双重许可配置黑盒Web应用程序扫描器Arachni,这是一个免费开源的项目。使用更简单的REST HTTP API和随附项目更强大的MSGPACK RPC,编写一些在扫描URL时自动报告调查结果的小工具。
第13章:反编译和逆向分析托管程序集
在这一章中,我们进行逆向工程。在Windows上有易于使用的.NET反编译器,但不适用于Mac或Linux,所以我们自己写一个小的反编译器。
第14章:读取离线注册表项
在这一章中,我们通过检查二进制结构的Windows注册表,将注意力集中在注册表项上,从而转向事件响应。学习如何解析和读取离线注册表项,可以检索系统启动密码,它存储在注册表中,用于加密密码的散列。
致谢
可以说,写这本书花了10年时间!虽然在电脑上我只写了3年。我的家人和朋友肯定注意到我一直在不断地谈论C#,但是他们非常宽容并理解我,成为我的超级耐心的听众。AHA的兄弟姐妹们给了我这本书中许多项目的灵感,是本书的重要支柱。非常感谢John Eldridge,一位亲密的朋友,是他带我进入C#世界,激发了我对编程的兴趣。Brian Rogers一直是我最好的技术资源之一,在本书的编写过程中,我们的思想产生了许多碰撞,并得到很多启发,他也是一个拥有敏锐眼光和见解的优秀的技术编辑。我的产品经理Serena Yang和Alison Law减轻了我反复修改书稿的痛苦。当然,Bill Pollock和Jan Cash把我模糊的表述变成了每个人都可以读懂的清晰的句子。非常感谢No Starch的全体工作人员!
最后的说明
本书所介绍的内容远远不能反映C#的强大功能和构建自动化工具的潜力,特别是因为我们创建的许多库是灵活的、可扩展的。我希望这本书展示了将常用的或烦琐的任务自动化是多么简单,并鼓励你继续完善我们创造的工具。可以在https://www.nostarch.com/ grayhatcsharp找到本书的源代码和更新。

上架指导

计算机\安全

封底文字

学习使用C#强大的核心库来自动化执行那些枯燥但重要的任务,例如模糊测试、漏洞扫描和病毒分析。通过Mono你可以编写出能在Windows、Mac OS X、Linux,甚至移动设备上运行的实用安全工具。
通过本书你将学习:
编写使用HTTP和XML库的模糊测试工具扫描SQL注入和XSS
使用Metasploit生成shellcode以创建跨平台和跨架构的有效载荷
自动化Nessus、OpenVAS和sqlmap扫描漏洞并利用SQL注入
编写在Mac OS X和Linux上运行的.NET反编译器
解析并读取脱机注册表配置单元以dump系统信息
使用Arachni和Metasploit的MSGPACK RPC对安全工具自动化

作者简介
Brandon Perry 早在开源.NET实现Mono出现的时候,他就开始编写C#应用程序。他在空闲时间喜欢为Metasploit框架编写模块,解析二进制文件,进行模糊测试。他的个人网站是https://volatileminds.net/。

作者简介

[美]布兰德·佩里( Brandon Perry )著:

译者序

互联网的快速发展给人们带来了快捷、高效的生产生活方式。随着互联网的加速渗透,网络已成为一个继海、陆、空、天之后与人类生活密切相关的第五空间,成为现代社会不可或缺的一部分。
各种各样丰富多彩的互联网应用在吸引大量用户的同时,也将自己暴露在了攻击者面前。震网病毒、棱镜门事件、Hacking Team被黑事件、乌克兰电网系统遭攻击事件、希拉里邮件门、Mirai病毒致使美国大规模断网事件……层出不穷的网络安全事件推动着网络安全从非主流走向主流,从附属变为有机组成部分,网络安全也成为整个安全体系的重要外延。特别是在《网络安全法》正式颁布实施之后,我国从法治的角度将网络安全的管理提升到一个新高度,对网络建设、运营、维护和使用的各方提出了具体要求。
少量设备的渗透测试或者安全防护所需的人力、物力投入都是可预期的。但如果设备数量达到一定的规模,任何组织和个人都需要面对量变引起质变所引发的一系列问题。如何省时省力而又高效地完成各项网络安全工作是每一位网络安全从业人员必须要解决的问题。
每一位需要渗透测试、风险评估的安全从业人员都有自己的“武器库”,有人擅长使用Metasploit,有人喜欢使用Nmap,也有人喜欢用Nessus、OpenVAS。面对大量的结果数据,很多安全人员都有过“濒临崩溃”的经历,很多人都针对扫描、测试、分析等事项编写了自己的小工具,以求优化日常工作。只不过有的人喜欢用Python,有的人喜欢用C#。选择何种语言是个“仁者见仁智者见智”的事情,如果要展开讨论估计会争个面红耳赤,三天三夜也不会有结论。
C#语言能够跻身常见编程语言之列,有许多先进的功能和特性,可以用来处理复杂的数据和应用。本书基于C#语言强大的核心库,略加改造,通过编程调用Metasploit、OpenVAS、Nessus等渗透测试常见工具,来自动执行那些枯燥但又比较重要、基础的工作,如漏洞扫描、恶意软件分析以及事件响应。这样既能提升工作的趣味性,减少不必要的大力重复性工作,使得日常工作流程化、简单化,也切合了当前渗透测试、安全运营的DevSecOps趋势,有助于网络安全从业人员管理更为大型的网络,解决更多的安全问题。
如果你是一名希望从事网络安全工作的新手,那么可跟随本书的指导,更快地学到如何用C#来编程实现一些工具的优化甚至自动化;如果你是一名经验丰富的网络安全从业者,也可根据本书的提示,结合工作实战经验,编写出更满足自己需求的程序,让你的网络安全工作如虎添翼。
本书主要由王自亮、候敬宜、李伟完成翻译。我们力求做到在技术术语准确的前提下给读者带来最佳的阅读体验,但限于水平,难免有错误或疏漏,恳请广大读者朋友批评指正。

图书目录

译者序

前 言
第1章 C#基础知识速成 1
1.1 选择IDE 1
1.2 一个简单的例子 2
1.3 类和接口 3
1.3.1 创建一个类 4
1.3.2 创建接口 4
1.3.3 从抽象类中子类化并实现接口 5
1.3.4 将所有内容与Main()方法结合到一起 7
1.3.5 运行Main()方法 8
1.4 匿名方法 9
1.4.1 在方法中使用委托 9
1.4.2 更新Firefighter类 10
1.4.3 创建可选参数 10
1.4.4 更新Main()方法 11
1.4.5 运行更新的Main()方法 12
1.5 与本地库整合 12
1.6 本章小结 14
第2章 模糊测试和漏洞利用技术 15
2.1 设置虚拟机 16
2.1.1 添加仅主机虚拟网络 16
2.1.2 创建虚拟机 16
2.1.3 从BadStore ISO启动虚拟机 17
2.2 SQL注入 19
2.3 跨站脚本攻击 20
2.4 使用基于突变的模糊测试工具对GET参数进行模糊测试 22
2.4.1 污染参数和测试漏洞 23
2.4.2 构造HTTP请求 23
2.4.3 测试模糊测试的代码 25
2.5 对POST请求进行模糊测试 25
2.5.1 编写一个对POST请求进行模糊测试的工具 28
2.5.2 开始模糊测试 29
2.5.3 对参数进行模糊测试 30
2.6 对JSON进行模糊测试 32
2.6.1 设置存在漏洞的程序 32
2.6.2 捕获易受攻击的JSON请求 33
2.6.3 编写对JSON进行模糊测试的工具 34
2.6.4 测试对JSON进行模糊测试的工具 39
2.7 利用SQL注入 40
2.7.1 手工进行基于UNION的注入 40
2.7.2 编程进行基于UNION的注入 42
2.7.3 利用基于布尔的SQL注入 45
2.8 本章小结 53
第3章 对SOAP终端进行模糊测试 55
3.1 设置易受攻击的终端 55
3.2 解析WSDL 56
3.2.1 为WSDL文档编写一个类 57
3.2.2 编写初始解析方法 58
3.2.3 为SOAP类型和参数编写一个类 60
3.2.4 编写一个SoapMessage类来定义发送的数据 62
3.2.5 为消息部分实现一个类 63
3.2.6 使用SoapPortType类定义端口操作 64
3.2.7 为端口操作实现一个类 65
3.2.8 使用SOAP绑定定义协议 66
3.2.9 编辑操作子节点的列表 68
3.2.10 在端口上寻找SOAP服务 68
3.3 自动化执行模糊测试 70
3.3.1 对不同的SOAP服务进行模糊测试 71
3.3.2 对SOAP HTTP POST端口进行模糊测试 75
3.3.3 对SOAP XML端口进行模糊测试 78
3.3.4 运行模糊测试工具 82
3.4 本章小结 83
第4章 编写有效载荷 84
4.1 编写回连的有效载荷 84
4.1.1 网络流 85
4.1.2 运行命令 86
4.1.3 运行有效载荷 88
4.2 绑定有效载荷 88
4.2.1 接收数据,运行命令,返回输出 89
4.2.2 从流中执行命令 90
4.3 使用UDP攻击网络 91
4.3.1 运行在目标机器上的代码 92
4.3.2 运行在攻击者机器上的代码 95
4.4 从C#中运行x86和x86-64 Metasploit有效载荷 97
4.4.1 安装Metasploit 97
4.4.2 生成有效载荷 99
4.4.3 执行本机Windows有效载荷作为非托管代码 100
4.4.4 执行本机Linux有效载荷 102
4.5 本章小结 106
第5章 自动化运行Nessus 107
5.1 REST和Nessus API 107
5.2 NessusSession类 108
5.2.1 发送HTTP请求 109
5.2.2 注销和清理 111
5.2.3 测试NessusSession类 112
5.3 NessusManager类 112
5.4 启动Nessus扫描 114
5.5 本章小结 117
第6章 自动化运行Nexpose 118
6.1 安装Nexpose 118
6.1.1 激活与测试 120
6.1.2 一些Nexpose语法 121
6.2 NexposeSession类 121
6.2.1 ExecuteCommand()方法 123
6.2.2 注销及释放会话 126
6.2.3 获取API版本 127
6.2.4 调用Nexpose API 127
6.3 NexposeManager类 128
6.4 自动发起漏洞扫描 130
6.4.1 创建一个拥有资产的站点 130
6.4.2 启动扫描 131
6.5 创建PDF格式站点扫描报告及删除站点 132
6.6 汇总 133
6.6.1 开始扫描 133
6.6.2 生成扫描报告并删除站点 134
6.6.3 执行自动化扫描程序 134
6.7 本章小结 135
第7章 自动化运行OpenVAS 136
7.1 安装OpenVAS 136
7.2 构建类 137
7.3 OpenVASSession类 137
7.3.1 OpenVAS服务器认证 138
7.3.2 创建执行OpenVAS命令的方法 139
7.3.3 读取服务器消息 140
7.3.4 建立发送/接收命令的TCP流 141
7.3.5 证书有效性及碎片回收 141
7.3.6 获取OpenVAS版本 142
7.4 OpenVASManager类 143
7.4.1 获取扫描配置并创建目标 144
7.4.2 封装自动化技术 148
7.4.3 运行自动化操作 149
7.5 本章小结 149
第8章 自动化运行Cuckoo Sandbox 150
8.1 安装Cuckoo Sandbox 150
8.2 手动运行Cuckoo Sandbox API 151
8.2.1 启动API 151
8.2.2 检查Cuckoo的状态 152
8.3 创建CuckooSession类 153
8.3.1 编写ExecuteCommand()方法来处理HTTP请求 154
8.3.2 用GetMultipartFormData()方法创建分段HTTP数据 156
8.3.3 用FileParameter类处理文件数据 158
8.3.4 测试CuckooSession及支持类 159
8.4 编写CuckooManger类 160
8.4.1 编写CreateTask()方法 161
8.4.2 任务细节及报告方法 162
8.4.3 创建任务抽象类 163
8.4.4 排序并创建不同的类类型 165
8.5 组合在一起 167
8.6 测试应用程序 168
8.7 本章小结 170
第9章 自动化运行sqlmap 171
9.1 运行sqlmap 172
9.1.1 sqlmap REST API 173
9.1.2 用curl测试sqlmap API 174
9.2 创建一个用于sqlmap的会话 177
9.2.1 创建执行GET请求的方法 179
9.2.2 执行POST请求 179
9.2.3 测试Session类 180
9.3 SqlmapManager类 182
9.3.1 列出sqlmap选项 184
9.3.2 编写执行扫描的方法 185
9.3.3 新的Main()方法 187
9.4 扫描报告 188
9.5 自动化执行一个完整的sqlmap扫描 189
9.6 将sqlmap和SOAP漏洞测试程序集成在一起 191
9.6.1 在SOAP漏洞测试程序中增加sqlmap GET请求支持 191
9.6.2 增加sqlmap POST请求支持 192
9.6.3 调用新编写的方法 194
9.7 本章小结 196
第10章 自动化运行ClamAV 197
10.1 安装ClamAV软件 197
10.2 ClamAV软件本地库与clamd网络守护进程 199
10.3 通过ClamAV软件本地库自动执行 199
10.3.1 创建支持的枚举类型和类 199
10.3.2 调用ClamAV软件的本地库函数 202
10.3.3 编译ClamAV软件引擎 203
10.3.4 扫描文件 205
10.3.5 清理收尾 206
10.3.6 通过扫描EICAR测试文件来测试程序 207
10.4 通过clamd守护进程自动化执行 208
10.4.1 安装clamd守护进程 209
10.4.2 启动clamd守护进程 209
10.4.3 创建clamd进程会话类 210
10.4.4 创建clamd进程管理器类 211
10.4.5 测试clamd进程 212
10.5 本章小结 214
第11章 自动化运行Metasploit 215
11.1 运行RPC服务器 215
11.2 安装Metasploitable系统 217
11.3 获取MSGPACK库 218
11.3.1 为MonoDevelop环境安装NuGet软件包管理器 218
11.3.2 安装MSGPACK库 219
11.3.3 引用MSGPACK库 220
11.4 编写MetasploitSession类 221
11.4.1 为HTTP请求以及与MSGPACK库进行交互创建Execute()方法 222
11.4.2 转换MSGPACK库的响应数据 223
11.5 测试会话类 225
11.6 编写MetasploitManager类 226
11.7 整合代码模块 228
11.7.1 运行漏洞利用示例 229
11.7.2 与命令行进行交互 230
11.7.3 连接得到命令行 231
11.8 本章小结 231
第12章 自动化运行Arachni 233
12.1 安装Arachni软件 233
12.2 Arachni软件的REST API函数 234
12.2.1 创建ArachniHTTP-Session类 235
12.2.2 创建ArachniHTTP-Manager类 237
12.3 整合会话和管理器类 238
12.4 Arachni软件的RPC服务 239
12.4.1 手动运行RPC服务 239
12.4.2 ArachniRPCSession类 241
12.4.3 ExecuteCommand()的支持方法 243
12.4.4 ExecuteCommand()方法 245
12.4.5 ArachniRPCManager类 247
12.5 整合代码 248
12.6 本章小结 250
第13章 反编译和逆向分析托管程序集 252
13.1 反编译托管程序集 252
13.2 测试反编译器 255
13.3 使用monodis工具分析程序集 256
13.4 本章小结 259
第14章 读取离线注册表项 260
14.1 注册表项结构 260
14.2 获取注册表项 261
14.3 读取注册表项 263
14.3.1 创建注册表项文件的解析类 263
14.3.2 创建节点键类 264
14.3.3 创建值键的存储类 269
14.4 对库进行测试 270
14.5 导出启动密钥 271
14.5.1 GetBootKey()方法 271
14.5.2 GetValueKey()方法 273
14.5.3 GetNodeKey()方法 273
14.5.4 StringToByteArray()方法 274
14.5.5 获取启动密钥 275
14.5.6 验证启动密钥 275
14.6 本章小结 276

教学资源推荐
作者: (加)约翰·赫尔(John C.Hull) 著
参考读物推荐
作者: [美]威廉·斯托林斯 (William Stallings) 著