51Testing软件测试论坛

标题: Web安全渗透自学 [打印本页]

作者: always_fly    时间: 2018-3-6 15:40
标题: Web安全渗透自学
Web 应用程序(Web Applications)是指通过 Web 浏览器访问的任何应用程序。它基于 Web 运
行,是典型的浏览器--服务器架构的产物。

SQL 注入攻击(SQL Injection),攻击者在 SQL 注入成功后,可能会拥有整个系统的最高权限,
可以修改页面、数据,在网页中添加恶意代码,还可以通过查看数据库获
得所有关键数据信息,危害极大。

跨站脚本攻击是向 Web 系统提交恶意脚本,当访问者浏览受到攻击的网页时,会导致恶意脚本
被执行,从而泄露用户的密码等敏感信息。如果访问者是管理员,则 Web 系统的管理员权限将
有可能泄露,使得攻击者可以提升权限、甚至控制整个网站,其威胁程度更大、威胁波及面更广,
同时攻击过程也更加复杂多变。
[attach]111443[/attach]

Web 应用是由动态脚本、编译过的代码等组合而成。它通常架设在 Web 服务器上,用户通过
Web 浏览器发送请求,这些请求使用 HTTP 等协议,经过 Internet和企业的 Web 应用交互,由
Web 应用和企业后台的数据库及其他动态内容通信。

用户通过浏览器访问服务器上的资源,采用的是请求---应答模式。用户一般通过浏览器发送请
求,然后得到访问结果,而一般用户不用关心后台是如何处理的,而黑客所要做的事情,就是
想方设法干预后台处理过程,从而得到他们希望得到的信息。黑客会选择从 HTTP等协议端口
进行入侵,扫描 Web 应用程序和服务器等漏洞,发动网络攻击。

Web 应用程序漏洞产生的核心问题:用户能够提交任意的数据,而服务器端没有进行有效的验
证。从软件实现的角度来说,主要是编程时,程序员对安全问题考虑不周,另外
软件的部署和配置管理由于疏忽,往往也会存在一定的安全隐患。 因为操作、管理、维护软件
的是人,而整个 Web 系统的安全性取决于系统中最薄弱的环节,所以攻击者往往只需要一个切
入点,就可能导致系统的崩溃瓦解。

10 种主要的安全漏洞:XSS(跨站脚本)、信息泄露、内容欺骗、不充分授权、SQL 注入、资源
定向、不充分认证、HTTP 响应拆分、函数滥用、跨站请求伪造。

Web 攻击不是漫无目的的随意攻击,往往是有一定既定目标的攻击,这通常要经历以下 5 个
步骤:
1)  信息收集
正所谓工欲善其事,必先利其器,Web 攻击发生前,攻击者必定会对攻击目标进行细致的侦
查工作,从而为后续的攻击做准备。 对目标网络进行侦查之前,首先要收集汇总各种与目标
系统有关的信息,形成对目标网络必要的轮廓认识,并为实施攻击做好准备。
信息的收集可以通过以下几种方式进行:
DNS 域名服务,Finger 服务,Whois 服务,Nslookup,Ping 与 PathPing,Tracert等信息查询。
2)  扫描
通过信息收集掌握了目标网络的外部特征信息之后,可以对目标网络进行有针对性的扫描,
扫描的最终结果决定了能否对目标网络进行攻击,任何扫描得到的漏洞信息,都可能成为突
破网络的切入点。
当然扫描得到的结果不一定就是可以直接利用的系统漏洞。从利用方式来说,可以将信息分
为两类:一类是安全敏感信息,这包括第一阶段收集到的信息,以及扫描阶段得到的关于端
口开放以及操作系统类型信息,这些信息虽然不能直接用于对目标网络的渗透与攻击,但有
助于全面了解目标网络的信息;另一类就是安全漏洞信息,这类安全漏洞可能是系统配置上
的疏忽造成的(例如没有及时打补丁),也可能是操作系统或应用程序自身的缺陷,结果是都
可能导致利用漏洞突破并控制目标网络。
探测类扫描主要有以下常用手段:
端口扫描、操作系统探测、应用服务探测、路由器探测、防火墙探测等。
漏洞发掘类扫描主要有:
     Web、CGI 安全漏洞扫描,Windows、Unix、Linux 等操作系统漏洞扫描,SNMP漏洞扫描、
SQL Server 等数据库服务漏洞扫描,路由器、防火墙漏洞扫描。
扫描过程实际上已经与目标主机或网络发生物理链接,可以看作是程度较轻的攻击行为。扫
描结果决定了攻击者的下一步行动。
扫描要达到的基本目标:
Ø  确定目标系统是否真实存在;
Ø  确定目标系统上都哪些服务正在运行或监听;
Ø  探查操作系统版本。
3)  攻击
通过信息收集和扫描阶段得到相关线索以后,经过分析和筹划,下一步就可以采取各种手段
以实现直接的攻击目的。
从黑客攻击的目的来看,可以分为两种,一种是给目标以致命打击,使目标系统受损,甚至
瘫痪,这好比是正面战场上的交锋,目的是致敌人于死地;另一种攻击则更加常见,其目的
在于获取直接的利益,比如下载到目标系统的机密信息,或者是得到目标系统的最高控制权,
在此过程中,攻击者无意对目标系统的正常能力进行破坏,他可能更希望非常隐蔽地实现自
己的目的。这好比是潜伏下来的特务,目的是想通过某种方式不断得到有用信息。
4)  植入后门
在一次成功的攻击之后,为了以后的再次进入和控制目标主机,一般要放置一些后门程序。
由于网络主机系统经常升级,一些原来被利用突破系统的漏洞在系统升级以后就可能被修补,
而后门程序就可以不依赖于原来用于突破的漏洞,保持长期稳定的控制能力。后门可能是一
个隐藏的管理员账号、一个具有超级权限的服务进程,有时甚至是一个故意置入的系统漏洞。
好的后门程序在保证最高的系统权限的同时,必须不易被目标用户察觉。许多木马程序、远
程控制程序都可以作为后门程序植入,最新的一些后门采取可卸载内核模块(LKM)的办法,
动态地修改系统内核,一般情况下无法检测出来。功能强大的后门程序,可以利用被控主机
运行扫描、嗅探等技术突破整个网络。

5)  消除痕迹
作为一次完整的 Web 攻击,黑客在取得需要的战果以后,就要打扫战场了,也就是消除痕迹
。在信息收集、扫描、攻击阶段,即使采取了许多防护措施,也会留下直接或间接的攻击痕迹。
攻击痕迹可能会在目标主机的管理员进行例行检查时暴露出来,进一步的安全检查则可能导致
攻击行为的完全暴露,甚至发现植入的后门程序;攻击痕迹也可能使富有经验的安全调试员反
向跟踪到真正的攻击源头,同时,攻击痕迹是攻击技术和手段的直接反映。 消除痕迹是一项细
心的工作,系统的审计日志、Web 的访问记录、防火墙的监控日志、攻击留下的残余线索都必
须认真清理。对于一些必须留下的后门程序,需要采取进程掩藏、文件隐藏、核心文件替换、
程序加密等多种手段避免被发现。

Web 漏洞攻击分类
认证攻击
1  暴力破解
暴力破解是一个不断自动猜解一个人的用户名,密码,信用卡号码或密钥的过程。
2  不充分认证
不充分认证是网站允许一个攻击者在没有进行合适认证的情况下访问敏感内容。
3  弱密码恢复验证
弱密码恢复验证是,当一个网站允许攻击者非法获取,改变或恢复其他用户的密码。
授权攻击
4  凭据/会话预测
凭据/会话的预测是一个劫持或假冒一个网站用户的方法。
5  不充分授权
不充分授权是一个网站允许访问本应有访问控制的限制的敏感内容或功能。
6  不充分会话过期
不充分会话过期是当一个网站允许攻击者能够重新使用旧的会话的证书或授权会话 ID。
7  会话固定
会话固定是一种强制使用用户的会话 ID 的一个显式值的攻击技术。  
客户端攻击
8  内容欺骗
内容欺骗攻击技术是用来使用户误认为在一个网站上出现的某些内容用户是合法的,而不是从外部
来源。
9  跨站点脚本
跨站点脚本(XSS)攻击是一种让网站强制加载攻击者提供的可执行代码,在用户的浏览器端执行
代码的攻击技术。  
命令执行
10  缓冲区溢出
缓冲区溢出攻击,是通过覆盖某些内存地址的来改变应用程序的执行流程。
11  格式化字符串攻击
格式化字符串攻击改变使用字符串格式化功能,访问其他内存空间应用程序的流程。
12  LDAP 注入
LDAP 注入攻击是一种利用用户提交的 LDAP 语句来攻击网站的方法。
13  操作系统命令
操作系统命令的攻击手法是通过构造的输入,让操作系统执行命令。
14  SQL 注入
SQL 注入攻击技术是使用用户构造 SQL 语句来利用的网站的漏洞。
15  SSL 注入
SSL 注入(服务器端包含)是一个服务器端利用技术,允许攻击者发送攻击代码到一个 Web 应用程
序,稍后由 Web 服务器在本地执行代码。
16  XPath 注入
XPath 注入是一种攻击技术,让网站执行从用户提交的 XPath 查询输入。  
信息揭露
17  目录索引
自动目录列表/索引是一个 Web 服务器的功能,如果在默认页面不存在的情况下,能够列出所有的
文件目录。
18  信息泄漏        

信息泄漏是网站泄露了敏感数据,例如,开发人员的对代码的注释或错误消息,这可能有助于攻击
者利用系统。

19  路径遍历
路径遍历攻击的技术力量访问文件,目录和命令,可能位于根目录以外的 Web 文档根目录。
20  可预测的资源位置
可预测的资源位置是一种攻击的技术,用以发现隐藏的网站内容和功能。  
逻辑攻击
21  功能滥用
功能滥用是一种攻击技术,它使用一个网站本身的特性和功能,消费,诈骗,或绕
过访问控制机制。
22  拒绝服务
拒绝服务(DoS)一种攻击技术,目的是是阻止网站为正常用户提供服务的活动。
23  不充分的反自动化
不充分的反自动化,是一个网站允许攻击者使用工具自动化的工具完成某一个过程,但这一过程本
应由手工完成。
24  不充分的过程验证
不充分的过程验证是,当一个网站允许攻击者绕过或规避应用程序的本来的控制流程。  





作者: always_fly    时间: 2018-3-6 15:41
渗透测试平台说明
Windows 平台
一般需要渗透测试人员自己定制检测工具,例如,Paros 和 BurpSuit 是较为综合性的安全检测工具,
可以从总体上对网站的安全性进行检测,当然这两个工具对 SQL 注入漏洞和 XSS 漏洞具有一定的检
测效果,像啊 D、NBSI、Pangolin 等工具,主要用来检测 SQL 注入漏洞。
Linux 平台
大部分测试平台是安全组织和安全爱好者发布的基于 Linux 系统的 LiveCD。一般来说,在这些 LiveC
D 中集成了许多渗透测试工具,大部 LIveCD 集成的测试工具十分相似,对安全测试人员来说,可以
根据自己的测试需求搭建自己的测试平台。

在进行 Web 渗透测试的过程中,往往需要在真实的网络世界中,寻找不同的测试样本。在本地搭建
实验平台,是学习与研究 Web 漏洞检测的一种方法,但在真实的网络世界中寻找测试样本也是 Web
安全测试必经的一个步骤,这就如同士兵平时努力训练,总是要在一些实战演习中,才能检验训练效
果。

鉴于目前有许多网站被挂马,具有病毒等特点,所以可以考虑安装虚拟机,在虚拟机环境中进行安全
测试,从而减少本地计算机受危害的几率。

SQL 注入漏洞分析
是一种数据库攻击手段,也是 Web应用程序漏洞存在的一种表现形式,它的实际意义就是利用某
些数据库的外部接口把用户数据插入到实际的数据库操作语言中,从而达到入侵数据库乃至操作
系统的目的。
Web 程序员在编写 Web 系统时对 Web 的安全性考虑不够,对用户输入的数据没有进行有限的验
证及过滤,从而会引发 SQL 注入漏洞。如果我们的系统出现 SQL注入漏洞,那么攻击者通过构造
的特殊 SQL 语句就可以查看、插入、删除数据库的的数据,甚至可以执行主机的系统命令,从而
造成很大的危害。
为了理解 SQL 注入的概念,下面就讲解一些 SQL 注入方面的知识。 每当我们进入某个需要登录的
站点时,Web 应用程序通常都会向数据库发出
一个查询,检查用户身份是否有效。检查的方法可能就是在程序中构造一条 SQL查询语句,比如:
“Select * from Users where UserName = ‘” + username + “’ and PassWord = ‘” + password + “’”;
这里,username  和  password  是在登录界面上输入的用户名和口令。如果我们使用的实际用户名
为 Alice,口令为  123,那么 Web 应用发送给数据库服务器的SQL 语句为:
Select * from Users where UserName = ‘Alice’ and PassWord = ‘123’
应用程序期待数据返回一行与该用户相对应的数据。与其他编程语言相似,SQL 也使用字符来注释
掉代码。符号“--”为单行注释,表示让数据库服务器忽略掉该注释后的所有内容,这个符号十分有用,
下面就会看到它的特殊作用。如果我们不在  username  中输入 Alice,而是输入:
Alice’ or 1=1 --
现在要发送给数据库服务器的 SQL 语句就变为:
Select * from Users where UserName = ‘Alice’ or 1=1 -- ‘and PassWord = ‘123’
我们知道,1=1 的结果总是为真(true),由于 OR 运算符中两个操作数只要有一个为真,结果就为真,
因此上面的查询语句返回 Users 表的所有内容。尽管这些用户信息有可能并不显示给用户(Web 应
用程序有可能设计为仅检查指定用户表中是否存在相应纪录),但我们已经能够成功地登录到网站上了。

SQL注入之GET注入漏洞

GET 方式的注入漏洞一般存在于 URL 链接中的参数,例如本例中的参数key_city,它是与数据库
产生交互的地方。
http://www.***.com/main_weblist.asp?key_city=1
如果我们在参数 key_city=1 后引入非法字符单引号“’“,则链接接、变为:
http://www.***.com/main_weblist.asp?key_city=1’
在浏览器中访问上述链接后,一般结果如下:
Microsoft OLE DB Provider for ODBC Drivers  错误  '80040e14'  [Microsoft][ODBC Microsoft Access
Driver]  字符串的语法错误  在查询表达式 'web_key=1 and web_city=1''  中。  /main_weblist.asp
,行 129  
则说明参数存在漏洞,传递给服务器的数据,破坏了后台 SQL 语句的语法。

SQL注入之POST注入漏洞
POST 方式的注入漏洞一般存在用户输入的对话框、搜索框中,而不是在 URL链接上。对话框一般
也是与数据库产生交互的地方,与 GET 方式类似,对话框中用户的输入也会作为 SQL 语句的一部
分提交给后台程序处理。如果出现一些出错提示字符,说明此处也存在注入漏洞。

SQL注入之Cookie注入漏洞
由于 HTTP  协议是无状态的协议,所以引入了 Cookie 和 Session 机制区别不同的用户。  
服务器端程序读取客户端浏览器提交的数据时未进行分类处理和过滤。 例如,ID=Request(“ID”),
直接读取 ID 中的参数,未分类和过滤。 如果参数 ID 是通过 Cookie 传入进来,而且 ID 又存在与
数据库交互,那么此处就存在 Cookie 注入漏洞。

对于检测 SQL 注入漏洞来说,我们需要做的就是检查能够提交数据的地方,检查能够与服务器产
生交互的地方,对与服务器交互的每个参数进行检查、测试,查看服务器端的响应,从而观察是否
存在安全漏洞。

Paros 的检测流程
Paros  是基于爬虫的 Web 代理,设置代理后,浏览器发送的信息都会经过 Paros然后转交给远端
服务器。
进行网站的安全检测时,一般我们先用 Paros 进行整站爬取,获得链接的参数信息,然后再调用检
测模块,对选定的 URL 链接或整站进行安全检测。
通过 Paros  可以访问单个链接,也可以对所要检测的网站进行整站爬取。这样在进行安全扫描时,
既可以进行单个链接的扫描,也可以进行整站扫描。

使用字符串串接创建查询是导致 SQL 注入的根本原因。

XSS 漏洞分析
跨站脚本 (Cross Site Scripting)  攻击,为了不和层叠样式表  (Cascading Style  Sheets,  CSS)  的
缩写混淆。故将跨站脚本攻击缩写为 XSS。它允许恶意 Web 用户将代码植入到提供给其它用户
使用的页面中。比如这些代码包括 HTML 代码和客户端脚本。黑客界共识是:跨站脚本攻击是新
型的“缓冲区溢出攻击”,而 JavaScript是新型的“Shellcode”。


反射型的 XSS 漏洞
如果一个应用程序使用动态页面向用户显示错误消息,就可能会造成常见的XSS 漏洞。通常,该页
面会使用一个包含消息文本的参数,并在响应中将这个文本返回给用户。
提取用户提交的输入并将其插入到服务器响应的 HTML 代码中,这是 XSS 漏洞的一个显著特征。   
   如果应用程序没有对用户输入实施任何过滤或净化措施,那么它很容易受到
攻击。

由于利用这种漏洞需要构造一个包含嵌入式的 JavaScript 代码的请求,随后这些代码又被反射到
提出请求的用户端执行,因而它被称作反射型 XSS。攻击有效载荷分别通过一个单独的请求与响
应进行传送和执行。

存储型的 XSS 漏洞
如果一名用户提交的数据被保存在应用程序中(通常存储在一个后端数据库中),然而没有经适
当过滤或净化就显示给其他用户,此时就会出现这种漏洞。  

在支持终端用户交互的应用程序中,或者在具有管理权限的员工访问同一个应用程序中的用户记
录和数据的应用程序中,存储型的 XSS 漏洞很常见。例如,设想一个在线进行拍卖的应用程序场
景,它允许买家提出与某件商品有关的问题,然后由卖家回答。如果一名用户能够提出一个包含
嵌入式 JavaScript 的问题,而且应用程序并不过滤或净化这个 JavaScript,那么攻击者就可以提
出一个专门设计的问题,在任何查看该问题的用户(包括卖家和潜在的买家)的浏览器中执行任
意脚本。在这种情况下,攻击者就可让不知情的用户去竞标一件他不想要的商品;或者让一位卖
家接受他提出的低价,结束竞标。  

反射型与存储型 XSS 攻击在实施步骤上存在两个重要的区别,这也使得后者往往造成更大的安全
威胁。这两个区别是:
1)  在反射型 XSS 脚本攻击中,要利用一个漏洞,攻击者必须以某种方式诱使受害者访问他构造
的 URL 链接。而存储型 XSS 脚本攻击则没有这种要求。在应用程序中展开攻击后,攻击者只需要
等待受害者浏览已被攻破的页面或功能。通常,这个页面是一个正常用户将会主动访问的常规页面。
2)  如果受害者在遭受攻击时正在使用应用程序,攻击者就更容易实现其利用XSS 漏洞的目的。例
如,如果用户当前正在进行会话,那么攻击者就可能劫持这个会话。在反射型 XSS 攻击中,攻击
者可能会说服用户登录,然后单击他们提供的一个链接,从而制造这种情况。或者他可能会部署
一个永久性的有效载荷并等待用户登录。但是,在存储型 XSS 攻击中,攻击者能够保证,受害用
户在他实施攻击时已经在访问应用程序。因为攻击有效载荷被保存在用户自主访问的一个应用程序
页面中,所以,当有效载荷
执行时,任何攻击受害者都在使用应用程序。而且,如果上述页面位于应用程序通过验证的区域内
,那么那时攻击受害者此时一定已经登录。

基于 DOM 的 XSS 漏洞
在这种漏洞中,攻击者的 JavaScript 通过以下过程得以执行。
Ø  用户请求一个由攻击者构造的 URL,且其中包含嵌入的 JavaScript 代码。
Ø  服务器返回的响应中并不以任何形式包含攻击者的脚本代码。
Ø  当用户的浏览器处理这个响应时,上述脚本得以执行。

这是因为客户端的JavaScript代码可以访问浏览器的文本对象模型(Document Object Model,DO
M),因此它能够决定用于加载当前页面的  URL。由应用程序发布的一段脚本可以从 URL 中提取
数据,对这些数据进行处理,然后用它动态更新页面的内容。如果应用程序完成上述过程,那么它
就可能受到基于 DOM 的 XSS 攻击。
作者: 梦想家    时间: 2018-3-14 14:03
谢谢分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2