欢迎光临
梦想从学习开始!

Web渗透测试攻略(1)| 小熊测试

本文主要介绍 Web渗透测试攻略(1)| 小熊测试,小熊希望对大家的学习或者工作具有一定的参考学习价值,在测试领域有所提升和发展。

  介绍

  这份文档主要介绍渗透测试所需要的知识.PentesterLab准备将测试的基本知识和最常见的漏洞总结到一张CD中.

  关于这份文档

  遵守的条约

  PentersterLab出品的渗透攻略遵守Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License条约.要得到这个条约的说明,请猛戳http://creativecommons.org/licenses/by-nc-nd/3.0/.

  文档的一些说明

  后期将提供一些相关的作业,还有参考链接以供大家深入学习

  web应用程序

  系统启动后,可以用ifconfig命令获取当前的ip地址:

  $ ifconfig eth0

  eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56

  inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0

  inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link

  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

  RX packets:88 errors:0 dropped:0 overruns:0 frame:0

  TX packets:77 errors:0 dropped:0 overruns:0 carrier:0

  collisions:0 txqueuelen:1000

  RX bytes:10300 (10.0 KiB) TX bytes:10243 (10.0 KiB)

  Interrupt:11 Base address:0x8000

  这个例子中,ip地址就是10.0.2.15.

  在整个训练中,我们用来模拟受害机器的主机名叫vulneralble.你可以用ip地址来代替主机名,或者你可以在host文件中添加主机名和对应的ip地址.

  windows下,host文件位于

  C:WindowsSystem32Driversetchosts Unix/Linux和Mac OS X下,host文件位于

  /etc/hosts 提示:ip重启机器后,ip地址会改变,也许你需要在host文件中做一些对应的更新.

  访问web程序后,可以看到下面的页面

您现在正在阅读的是由小熊分享邦为您整理的 Web渗透测试攻略(1)| 小熊测试
  Web

  很多公司可能都有开放了web服务,并且,很多应用程序现在都有了web版本.由此,

  web安全的重要性不言而喻.

  web安全模型

  web安全模型的精髓很简单:不要相信客户提交的数据.服务端得到的大部分信息都是客户端提交的.我们最好过滤和转义用户提交的数据.

  web安全风险

  web应用程序带来的风险和其他类型的程序带来的是一样的:

  ·                    信息泄漏

  ·                    形象损失

  ·                    信息丢失

  ·                    经济损失

  web技术

  构架

  大多数的web程序以来三个组件:

  · 客户端:大部分情况下是浏览器

  ·用来接受客户端请求的web服务器.

  一个应用程序服务器会处理这个请求,这种情况下,web服务器就只是把请求传递给了应用程序服务器.

  · 用来存放信息的存储后端:通常是数据库.

  这些组件的不同行为可能暴露出弱点和安全问题.

  客户端技术

  每天被用到的客户端技术大部分就是HTML,JavaScript,Flash…通过浏览器(谷歌,火狐IE等)连接服务端.不过,web程序的客户端也可能是一段连接web服务的脚本而已.

  服务端技术

  在服务端就有很多的技术会被用到,即使这些技术都容易收到攻击.

  这些技术可以细分为下面几种

  ·                    web服务器

  如Apache,lighttpd,Nginx,IIS…

  ·                    应用程序服务器

  如Tomcat,Jboss,Oracle Application server

  ·                    编程语言

  入PHP, Java, Ruby, Python, ASP,C#, …编程语言也可以被用到一些框架中,如Ruby-on-Rails,.Net MVC,Django.

  存储后端

  存储后端可以和web服务器位于同一机器上,也可以位于不同机器上.

  一些存储后端的例子:

  ·                    文件存储

  ·                    关系数据库

  比如Mysql,Oracle, SQL Server, PostgreSQL.

  ·                    其他的数据库

  比如MongoDB, CouchDB.

  ·                    目录

  比如openLDAP或者活动目录 .

  一个应用程序可以使用多种存储的方法.比如说,一些程序用LDAP来存用户名和密码,同时用Oracle来存用户的其他信息.

  HTTP协议

  HTTP是整个web的基础,想要web测试,那对这个协议有一个深入的了解是很重要的.熟悉HTTP规范有助于挖掘漏洞.

  一次客户端和服务端的会话

  HTTP是一个客户端和一个服务端之间的会话.客户端,假设是浏览器,就会发送请求给服务端,然后服务端对这个请求返回一个响应.HTTP是文本协议,所以对于我们人类来说很容易读懂.一般情况下,web服务监听的端口都是TCP/80.当你在浏览器地址栏上输入http://pentesterlab.com/并回车时,实际上是在连接到pentesterlab.com对应的ip的80端口.大多数的请求发生在浏览网页的时候.浏览器发送一个由下列元素组成的请求:

  ·                    HTTP方法

  这个让服务器理解浏览器进行的是什么操作

  ·                    资源

  说明客户端想访问服务器上的是什么

  ·                    版本信息

  说明服务器使用的是哪个版本的HTTP协议

  ·                    各种各样的头部信息

  这些信息告诉了服务器浏览器的名字和版本,用户偏爱的语言(如英语,德语,法语…)..

  ·                    请求主体

  根据HTTP方法不同而有不同的解释

  一个例子,打开http://vulnerable/index.php会产生下面的HTTP请求

  GET /index.php HTTP/1.1

  Host: vulnerable

  User-Agent: Mozilla Firefox

  请求

  方法

  有很多的HTTP方法:

  ·                    GET方法

  得到网页内容,浏览器最常用的方法

  ·                    POST方法

  POST方法,被用来发送内容较多的数据,常被用在很多表单和文件上传中.

  ·                    HEAD方法

  HEAD方法和GET方法很类似,唯一的区别就是server返回的响应.HEAD方法得到的响应只包含头部,而没有实体.web蜘蛛检查一个页面有没有更改的时候常用到这个方法,这样蜘蛛就不需要下载整个页面的内容了.

  还有许多其他的HTTP方法:PUT,DELETE,PATCH,TRACE,OPTIONS,CONNECT…

  参数

  请求还有一个很重要的部分就是参数.当客户端访问下面的页面http://vulnerable/article.php?id=1&name=2

  时,下面的请求会被发送到web服务器:

  POST请求非常相似,但是实际的参数是包含在请求实体中的.如下面的表单:

  

  […]

  

  

  Username:

  Password:

  

  

  

  

  这份HTML代码对应下面的登录表单:  

  如果表单的值是下面这样的

  username是’admin’

  password是’Password123′.

  那表单提交后,下面的请求就会被发送到服务器:

  POST /login.php HTTP/1.1

  Host: vulnerable

  User-Agent: Mozilla Firefox

  Content-Length: 35

  username=admin&password=Password123

  如果   GET /login.php?username=admin&password=Password123 HTTP/1.1

  Host: vulnerable

  User-Agent: Mozilla Firefox

  如果form标签包含属性enctype=”multipart/form-data”,发送的请求是下面这样的.

  POST /upload/example1.php HTTP/1.1

  Host: vulnerable

  Content-Length: 305

  User-Agent: Mozilla/5.0 […] AppleWebKit

  Content-Type: multipart/form-data; boundary=—-

  WebKitFormBoundaryfLW6oGspQZKVxZjA

  ——WebKitFormBoundaryfLW6oGspQZKVxZjA

  Content-Disposition: form-data; name=”image”; filename=”myfile.html”

  Content-Type: text/html

  My file

  ——WebKitFormBoundaryfLW6oGspQZKVxZjA

  Content-Disposition: form-data; name=”send”

  Send file

  ——WebKitFormBoundaryfLW6oGspQZKVxZjA–

  我们可以看出在请求头部中Content-type很特殊:Content-Type:

  multipart/form-data; boundary=—-WebKitFormBoundaryfLW6oGspQZKVxZjA.

  “WebKit”出现在基于webkit内核的浏览器中,其他内核的浏览器会用一个随机的字符串替代.这个字符串在好几个地方都出现了.最后一行中那个字符串后面还跟了个–字符串.当你上传一个文件时,浏览器会发送下面的东西.

  文件名:myfile.html

  参数名:image

  文件类型:text/html

  文件内容:my file

  也可以把数组当作参数传送过去(或者hash加密参数,只要服务端能够解析出来).你也可以用/index.php?id[1]=0来编码包含值0的数组.

  这种编码经常被一些组建用来对对象映射的自动请求.比如说,下面的请求:user[name]=louis&user[group]=1会被映射到一个User对象,这个User对象有一个属性name值为louis,还有一个group属性值为1.自动映射有时候会被攻击.通过发送别的属性值,如果程序没有保护这个属性,也许你可以改变那个对象的属性.在我们先前的例子中,你可以增加一个user[admin]=1到请求中,看下你能否得到admin权限.以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小熊分享邦(www.xxfxb.com),希望大家能坚持软件测试之路,谢谢。

赞(0) 打赏
未经允许不得转载:小熊分享邦 » Web渗透测试攻略(1)| 小熊测试

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏