转自:http://www.51testing.com/html/97/n-202197.html
● 探测性用户账户测试 法
众所周知,在系统中往往会有默认账户或者很容易被猜到的常用账户,而且往往很多用户会使用默认的密码,同样,有些应用系统的测试账户研发人员有时也会忘记删除。这个问题事实上是一个漏洞,而这种漏洞往往是由于以下原因造成的:
◇ 没有经验的IT工程师,他们往往不会更改安装的架构组件的缺省密码;
◇ 编程人员在应用中留有后门以便测试,但在发布时忘记删除;
◇ 系统的管理员和用户采用了很简单的密码;
◇ 系统有内嵌的,无法删除的内部用户名和密码;
◇ ……
对于注入Cisco路由器或WebLogic等,他们都有一些默认的用户名和密码,我们可以直接尝试,对于一些我们根本不了解的应用,我们可以做如下尝试:
◇ 尝试以下系统管理员的常用账号——"admin", "administrator", "root", "system", "guest", "operator", "super","qa", "test ", "test1", "testing",针对用户名和密码组合尝试,也可以尝试诸如"password", "pass123", "password123", "admin",或guest"这些密码。如果这些都无法成功,我们可以写一些脚本来尝试类似的用户名和密码组合。
◇ 管理员的密码有时会与系统名字相关,如我们测试的应用系统叫“Obscurity”,那么可以尝试用户名/密码组合Obscurity/obscurity。
◇ 利用注册页面我们也可以猜测用户名和密码的格式和长度。
◇ 尝试上述提到的所有用户名和空密码。
◇ 查看页面的源文件,尝试找到所有引用到用户名和密码的信息,比如"If username='admin' then starturl=/admin.asp else /index.asp"
◇ 寻找那些源文件中注释中可能含有的用户名和密码信息;
◇ ……
● 强力测试(暴力测试)
任何一种技术,在不同的人手里运用所达到的效果是不同的,正如暴力测试,也叫暴力破解,安全服务人员和测试人员利用这种技术来验证是否存在漏洞,而攻击者则利用其来寻找漏洞。
Web应用系统通常会有一些用户认证方式,这些方式包括证书、指纹、一次性令牌等等,但更多的,往往是用户名和密码的组合,这就使得暴力破解成为可能。
在对Web应用系统做暴力测试时,首先我们需要了解的是系统的认证机制,通常Web系统会采用以下两种机制:
◇ HTTP认证——包含基本存取认证和数字存取认证。
◇ 基于HTML表单的认证。
我们下面对这些认证方式做一下简单介绍:
基本存取认证
基本存取认证假设假定用户会以用户名和密码的组合来表明自己的身份,当用户浏览器使用这种机制访问站点时,web服务器将会返回一个包含 “WWW-Authenticate”头的401响应,且包含了一个“Basic”值,以及被保护的域名(例如,WWW-Authenticate: Basic realm=”wwwProtectedSite”)客户端会弹出一个需要用户输入该域用户名和密码的提示框。然后,客户端浏览器返回给服务器一个响应, 响应包含“Authorization”头,还包含“Basic”值以及连接了用户名,冒号,密码的基于64位的编码(例 如,Authorization: Basic b3dhc3A6cGFzc3dvcmQ=),但可惜的是,这个回复只要被攻击者监听到就很容易被解码。
我们来看一下这个过程:
1. 客户端发送一个标准的HTTP请求
GET /members/docs/file.pdf HTTP/1.1 Host: target |
2. web服务器定位到访问的这个资源是在一个受保护的目录;
3. 服务器发送一个HTTP 401的认证请求;
HTTP/1.1 401 Authorization Required Date: Sat, 04 Nov 2006 12:52:40 GMT WWW-Authenticate: Basic realm="User Realm" Content-Length: 401 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 |
4. 浏览器弹出要求输入用户名和密码的数据窗口;
5. 用户输入用户名和密码后,包含以下数据后再次提交;
GET /members/docs/file.pdf HTTP/1.1 Host: target Authorization: Basic b3dhc3A6cGFzc3dvcmQ= |
6. 服务器把客户信息和存储的信息进行比较;
7. 如果身份验证正确,服务器发回被请求的内容,如果失败,服务器将会返回HTTP。