基本信息
- 作者: (美)布兰德·佩里(Brandon Perry)
- 译者: 王自亮 侯敬宜 李伟
- 丛书名: 网络空间安全技术丛书
- 出版社:机械工业出版社
- ISBN:9787111590767
- 上架时间:2018-3-9
- 出版日期:2018 年3月
- 开本:16开
- 版次:1-1
- 所属分类:计算机 > 软件与程序设计 > 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
译者序
各种各样丰富多彩的互联网应用在吸引大量用户的同时,也将自己暴露在了攻击者面前。震网病毒、棱镜门事件、Hacking Team被黑事件、乌克兰电网系统遭攻击事件、希拉里邮件门、Mirai病毒致使美国大规模断网事件……层出不穷的网络安全事件推动着网络安全从非主流走向主流,从附属变为有机组成部分,网络安全也成为整个安全体系的重要外延。特别是在《网络安全法》正式颁布实施之后,我国从法治的角度将网络安全的管理提升到一个新高度,对网络建设、运营、维护和使用的各方提出了具体要求。
少量设备的渗透测试或者安全防护所需的人力、物力投入都是可预期的。但如果设备数量达到一定的规模,任何组织和个人都需要面对量变引起质变所引发的一系列问题。如何省时省力而又高效地完成各项网络安全工作是每一位网络安全从业人员必须要解决的问题。
每一位需要渗透测试、风险评估的安全从业人员都有自己的“武器库”,有人擅长使用Metasploit,有人喜欢使用Nmap,也有人喜欢用Nessus、OpenVAS。面对大量的结果数据,很多安全人员都有过“濒临崩溃”的经历,很多人都针对扫描、测试、分析等事项编写了自己的小工具,以求优化日常工作。只不过有的人喜欢用Python,有的人喜欢用C#。选择何种语言是个“仁者见仁智者见智”的事情,如果要展开讨论估计会争个面红耳赤,三天三夜也不会有结论。
C#语言能够跻身常见编程语言之列,有许多先进的功能和特性,可以用来处理复杂的数据和应用。本书基于C#语言强大的核心库,略加改造,通过编程调用Metasploit、OpenVAS、Nessus等渗透测试常见工具,来自动执行那些枯燥但又比较重要、基础的工作,如漏洞扫描、恶意软件分析以及事件响应。这样既能提升工作的趣味性,减少不必要的大力重复性工作,使得日常工作流程化、简单化,也切合了当前渗透测试、安全运营的DevSecOps趋势,有助于网络安全从业人员管理更为大型的网络,解决更多的安全问题。
如果你是一名希望从事网络安全工作的新手,那么可跟随本书的指导,更快地学到如何用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
序言
我的主要目标执行环境是什么?
以这种语言编写的有效载荷的检测和记录状态是什么?
我的软件需要保持隐藏在什么级别(例如内存驻留)?
客户端和服务器端的支持情况如何?
是否有一个大的社区正在开发这门语言?
这种语言的学习曲线如何,可维护性怎样?
对这些问题C#有一些令人信服的答案。关于目标执行环境的问题,.NET应该是在Windows环境下的最佳候选者,因为它已经和Windows打包在一起很多年了。但是随着.NET的开源,C#现在成为可以在每种操作系统上运行的语言,自然C#应该是真正的跨平台语言。
C#一直是.NET语言的通用语言。正如本书将会介绍的那样,由于其门槛低,开发人员众多,你将很快就能编写C#代码运行程序。此外,由于.NET是一种托管的类型丰富的语言,编译后的程序集可以简单地反编译为C#。因此,编写攻击性C#代码不一定需要从零开始,而是可以从大量的.NET恶意软件样本中获取反编译的代码,阅读相应的源代码并“借用”它们的功能,甚至可以使用.NET反射API动态加载和执行现有的.NET恶意软件样本——当然,假设它们已经被逆向以确保不会做任何破坏。
有人花了很长时间将PowerShell引入主流市场,在PowerShell恶意软件激增之后,我的努力带来了大量的安全改进和日志功能。最新版本的PowerShell(截至撰写本书时,最新版本为v5)实现了比其他任何脚本语言更多的日志记录功能。从防守角度来看,这太棒了。从一个渗透测试者、红队成员,或对手的角度来看,这显著提高了攻击者的门槛。对于一本关于C#的书,我为什么要提到这个?我花了多年的时间意识到,PowerShell写得越多就越发现,攻击者通过在C#中而不是在PowerShell中开发工具,不会受到那么严格的限制,从而可以获得更高的灵活性。请允许我解释一下:
.NET提供了丰富的反射API,允许用户轻松地在内存中加载和动态地与已编译的C#程序集进行交互。在PowerShell有效载荷上执行所有额外的检查后,反射API使攻击者可以通过开发仅用作.NET程序集加载器和运行器的PowerShell有效载荷以更好地躲避检测。
正如Casey Smith(@subTee)所演示的那样,默认安装的Windows上有许多合法的Microsoft签名的可作为C#有效载荷的绝佳的宿主进程二进制文件—— msbuild.exe
是最隐蔽的宿主进程。使用MSBuild作为C#恶意软件的宿主进程完美体现了“不落地”的特点,即攻击者可以融入目标环境并占用最小的空间,且长时间驻留。
到目前为止,反病毒厂商仍不太了解运行时.NET程序集的功能。那里仍然有足够的非托管恶意代码,焦点还没有转移到有效地挂钩.NET运行时执行动态运行时检查。
C#有庞大的.NET类库,那些熟悉PowerShell的人将会发现向C#的过渡相对平滑,反过来,那些熟悉C#的人在将其技能转移到其他.NET语言(如PowerShell和F#)时的门槛更低。
与PowerShell一样,C#也是一种高级语言,这意味着开发人员不必关心底层编码工作和内存管理范例,但是,有时候需要底层编码(例如,与Win32 API交互)。幸运的是,通过反射API和P/Invoke和封送处理接口,C#可以根据需要获得底层编码能力。
每个人学习C#的动机不同。我的动机是需要扩展PowerShell技能以便在更多平台上更灵活地使用.NET代码。有的读者可能想扩充C#技能来获取攻击者的思维,有的读者可能希望将现有的攻击者思维应用于多种平台上。无论你的动机是什么,准备好通过本书来一次狂野之旅吧!本书作者为C#攻防工具开发提供了独特的经验和智慧。
Matt Graeber
Microsoft MVP