DAY 17 Web 框架安全分析
本文最后更新于 918 天前,其中的信息可能已经有所发展或是发生改变。

一:前言:

300集每集平均一小时的WEB渗透测试已经过去差不多四分之一了,对于计算机网络和web 的工作机制的了解也更深入了,接下来记录一些 web的工作机制,2021年3月20日 23:37:43

 

二:web 工作机制:

 

 

输入网址后:

1.先访问本地缓存

2.若无,则访问host文件

3.若也无,再通过ARP找到对应的MAC地址

4.通过DNS服务器寻址(通过DHCP获取DNS服务器)找到IP

5.通过网关

6.路由

7.到达对方主机

8.访问80 443

9.三次握手

10.建立链接

11.发送HTTP 数据包

12.HTTP响应(如果访问html文件,直接发送,如果为PHP文件,则对PHP文件进行解析,得到PHP运行结果)

web 容器

web容器,也叫web 服务器,主要提供web服务,也就是常说的HTTP服务。
常见的web容器有:Apache/IIS/Nginx等。

静态的网页
静态的网页,都是一些.html
文件,是纯文本文件。这些文件中包含html 代码。
HTML (HyperText Markup Language,超文本标记语言),在浏览器中解释运行。

 

中间件服务器

以上这种,只能单向地给用户展示信息。随着web的发展,信息要双向流动,产生了交互的需求,也就是动态网页的

概念;所谓动态就是利用flash、Php、asp、Java等技术在网页中嵌入一些可运行的脚本,用户浏览器在解释页面时,遇到脚本就启动运行它。

脚本的使用让web服务模式有了“双向交流”的能力,web服务模式也可以象传统软件一样进行各种事务处理,如编辑文件、利息计算、提交表单等,web架构的适用面大大扩展。

这些脚本可以嵌入在页面中,如JS等。也可以以文件的形式单独存放在web服务器的目录里,如.asp、.php、jsp文件等。这样功能性的脚本越
来越多,形成常用的工具包,单独管理,web业务开发时,直接使用就可以了,这就是中间件服务器,它实际上是web服务器处理能力的扩展。

 

数据库的出现

静态网页与脚本都是事前设计好的,一般不经常改动,但网站上很多内容需要经常的更新,如新闻、博客文章、互动游戏等,这些变动的数据放在静态的程序中显然不适合,传统的办法是数据与程序分离,采用专业的数据库。
web开发者在web服务器后边增加了一个数据库服务器,这些经常变化的数据存进数据库,可以随时更新。当用户请求页面时,脚本根据用户请求的页
面,涉及到动态数据的地方,利用SQL数据库语言,从数据中读取最新的数拒,生成“完整”页面,最后送给用户。

URL:统—资源定位符(网址),用来告诉web容器,浏览器所请求资源(文件)的路径。

URL编码:URL 中允许出现的字符是有限制的,URL 中path开始允许直接出现A一Za-z0-9
半角减号(-)、下划线句点(.)、波浪号(~)。其他字符均会被百分号编码。

HTTP报文分析

什么是HTTP报文呢? 就相当于我给服务器写了一封信,服务器给我们回信

报文分析工具

1.F12
2. wireshark
3. fiddler
…….

web应用的所有通信的消息都要遵守HTTP 协议的规范和要求。

*HTTP 工作模式
*REQUEST
请求报文,利用抓包工具,在访问时,得到如下

GET /phpftest/get .php HTTP/1.1Host 172.16.132.161  (请求行)

(下面全是请求头)

HOST :172.x.x.x
User-Agent Mozilla/5.0 (Windows NT 6.1;Win64;x64, rv.69.0) Gecko/20100101 Firefox/69.0

Accept texthtml,applicationxhtml+xml,applicationxml;q=0.9.*r;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW q=0.7.,zh-HK;q=0.5,en-US;q=0.3,en,q=0.2

Accept-Encoding: gzip, deflate
Referer: http:/172.16.132.161/phptest/Connection: close
Upgrade-Insecure-Requests: 1

Cache-Control: max-age=0

 

HTTP请求由请求行、请求头、请求正文三个部分组成。

1.请求行: 方法,资源路径,协议/版本
方法:GET

2.请求头:

由上数据,一般包含很多内容

资源路径:/php/test/get. php

协议/版本:HTTP/1.1

主要字段:

Host:主要用于指定被请求资源的Internet主机和端口号
User-Agent:浏览器指纹(即浏览器的版本等)
Referer:包含一个URL,代表当前URL的上一个URL

Cookie:记录请求者的身份认证信息
Accept-Charset:用于指定客户端接收的字符集

Content-Type:用于向接收方指示实体的介质类型(数据类型)

Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示

Last-Modified:用于指示资源的最后修改时间和日期

(1):GET

GET是最常用的方法,通常用于请求服务器发送的某个资源。

(2):POST
POST方法可以向服务器提交参数以及表单,包括文件流等

(3):HEAD
与GET 方法类似,但在服务器响应中只返回首部。
(4):PUT
与GET从服务器读取文档相反,PUT 方法会向服务器写入文档。

(5):TRACE
回显浏览器的请求。

(6):OPTIONS
OPTIONS方法请求web服务器告知其支持的各种功能。

(7):DELETE
DELETE方法请求服务器删除请求URL所指定的资源。

 

响应报文

例子如下—-

HTTP/1.1 200 OK
Date: Sun,29 Sep 2019 08:43:35 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45X一Powered-By : PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/html

array(0) {
}

响应报文由状态(响应)行、响应头、响应正文三部分组成。
1.状态行:协议/版本,状态代码,描述短语
协议/版本:HTTP/1.1
状态代码:200
描述短语:0K

2.响应报头
第二行开始到第一个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。
3.响应正文
服务器返回资源的内容,即浏览器接收到的HTML 代码

状态代码
100~199
信息性状态码

200~299成功状态码

300~399重定向状态码

400~499
客户端错误状态码
500~599
服务器错误状态码

响应报文主要字段

Server 服务器指纹
Set-Cookie  向浏览器端设置Cookie
Last-Modified  服务器通过这个头信息告诉浏览器,资源的最后修改时间
Content-Length  请求正文的长度Location重定向目标页面

Refresh:服务器通过Refresh头告诉浏览器定时刷新浏览器

 

Cookie 与Session机制

Cookie

对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是’example.com’ ) 。

secure
设置这个Cookie是否仅仅通过安全的HTTPS 连接传给客户端。设置成TRUE时,只有安全连接存在时才会设置Cookie

如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类Cookie(通过$_SERVER[“HTTPS”]判断)。

httponly

设置成TRUE,Cookie  仅可通过HTTP协议访问。这意思就是Cookie无法通过类似JavaScript这样的脚本语言访问。要有效减少XSS
攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。PHP 5.2.0中添加。TRUE或FALSE

*Session机制

Session 机制需要借助Cookie来实现。但是二者有明显区别: Cookie
机制将用户的身份认证信息存储在浏览器端;Session机制是将身份认证信息放在服务器端。Session
机制从一定程度上解决了Cookie所面临的窃取与欺骗的风险。当然窃取的是Cookie信息,欺骗的是服务器。二者合一称为固定会话攻击。

同源策略

同源策略是禁止JavaScript
进行跨域访问的安全策略。它也是浏览器沙盒环境所提供的一项制约。
浏览器可以同时处理多个网站的内容,其典型方法为使用标签页或iframe等。

 

同源策略的条件

URL 的主机 (FQDN:Fully Qualified Domain Name  全称域名)一致

Schema—致(在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas 和schemata都可以作为复数形式。模式中包含了schema对象,可以是(table)、(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相互之间的关系,来源

端口号一致

同源策略的保护对象不仅仅是iframe内的文档。比如,实现Ajax时所使用的XMLHttpRequest对象能够访问的 URL
也受到了同源策略的限制。

例如:

<html>
<head>
<title>跨frame 的读取试验</title><meta charset= 'utf-8'>
</ head>
<body>
<iframe name="iframe1" width="300" height="80"src="http :// localhost/sop/iframe. html "     
>    //定义iframe框架
</iframe>
<input type="button" onclick="go() " value="密码"> <script>   
function go (){
try i
var x = iframe1.document.forml.passwd.value;document.getElementById ( ' out ' ) .innerHTML= x;catch (e)
{
alert (e.message) ;
}
}
</ script>
 //JS代码用于输出form表单的值
<span id="out"></ span></ body>
</ html>

//
<html>
<head>
<meta charset='utf-8'></ head>
<body>
<form name="form1">ifxame 的内层Ⅰ
密码<input type="text" name="pas.swd" value="pa</ form>
</ body></ html>

 

 

 

在指定的src地址中,JS可以代码可以读取输入的password,但是如果跨域访问(即不同域名)是不允许的

 

评论

  1. 万倪达
    Windows Chrome
    2年前
    2021-5-27 22:46:27

    内容有错字

    • xiaoyu 博主
      Windows Chrome
      2年前
      2021-5-29 19:53:50

      真的吗~~~

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇