网络架构模式

B/S和C/S都是随着互联网的发展而出现的一种网络结构模式,而其用的非常广泛,在我们生活中都很常见。那它们到底是什么呢?接下来就详细的介绍一下B/S和C/S。

B/S架构

B是英文单词“Browser”的首字母,即浏览器的意思;S是英文单词“Server”的首字母,即服务器的意思。B/S就是“Browser/Server”的缩写,即“浏览器/服务器”模式。

B/S结构是随着互联网的发展,web出现后兴起的一种网络结构模式。这种模式统一了客户端,让核心的业务处理在服务端完成。你只需要在自己电脑或手机上安装一个浏览器,就可以通过web Server与数据库进行数据交互。

这下是不是明白了“B/S”结构是什么了呢?大家是不是每天都在使用这种结构呢?在手机或电脑上用浏览器上百度搜索、看新闻等就是在使用“B/S”结构进行数据交互。

B/S架构的优点:

  • 客户端无需安装,有Web浏览器即可;
  • BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强;
  • BS架构无需升级多个客户端,升级服务器即可。

B/S架构的缺点:

  • 表现要达到CS程序的程度需要花费不少精力;
  • 在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题;
  • 客户端服务器端的交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的(在Ajax风行后此问题得到了一定程度的缓解)。

C/S架构

C是英文单词“Client”的首字母,即客户端的意思,C/S就是“Client/Server”的缩写,即“客户端/服务器”模式。

C/S结构是一种软件系统体系结构,也是生活中很常见的。比如我们手机或电脑中安装的微信、QQ、腾讯视频、酷狗音乐等应用程序就是C/S结构。

C/S 架构也可以看做是胖客户端架构。因为客户端需要实现绝大多数的业务逻辑和界面展示。这种架构中,作为客户端的部分需要承受很大的压力,因为显示逻辑和事务处理都包含在其中,通过与数据库的交互(通常是SQL或存储过程的实现)来达到持久化数据,以此满足实际项目的需要。

C/S 架构的优点:

  • C/S架构的界面和操作可以很丰富;
  • 安全性能可以很容易保证,实现多层认证也不难;
  • 由于只有一层交互,因此响应速度较快。

C/S 架构的优缺点:

  • 适用面窄,通常用于局域网中;
  • 用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户;
  • 维护成本高,发生一次升级,则所有客户端的程序都需要改变。

PC客户端抓包

渗透测试遇到的抓包场景大致可分为三类:

  1. PC端浏览器网页抓包:Web站点这个简单,在浏览器设置代理,并通过BurpSuite、Fiddler即可抓包;
  2. 手机APP/小程序抓包:APP抓包和PC上Web站点抓包方式差不多,但手机端要和PC在同一个局域网,并在手机Wifi设置代理;
  3. PC客户端(C/S)抓包 :即抓windows平台下客户端的包,如PC版腾讯视频,C/S程序抓包可以借助Proxifer+Fiddler。

显然,本文的重点是讲述PC客户端抓包。

Proxifier代理

针对PC客户端(C/S架构)的渗透测试,相比于B/S架构,它所使用到的通讯协议有多种,如TCP、HTTP(S)、TDS等。如何实现PC客户端抓包呢,常使用的工具有Wireshark、iptool、WSExplorer、Proxifier+Fiddler等。

Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链(Proxifier下载地址)。

由于一般的C/S客户端不能设置代理,所以我们Fiddler检测不到数据,我们可以通过Proxifer来实现把所有的请求抓发给Fiddler,这样我们就可以在Fiddler分析客户端请求。

Proxifer的设置

下载完打开,配置很简单,如下几步即可:

1、打开软件,依次选择,配置文件–>高级–>HTTP代理服务器–>启用HTTP代理服务器支持(Proxifier默认是关闭HTTP协议的,需要手动开启);

2、设置代理服务器和Fiddler代理设置匹配,配置文件–>代理服务器->添加。
3、设置代理规则:默认的Default规则可忽略,点击添加规则并打开系统中Fiddler的应用程序文件目录选择Fiddler.exe,目标主机和目标端口选择“任意” 。

Fiddler 抓包

Fiddler也要经过简单的设置:

1、打开Fiddler->Tools->Options->HTTPS,然后全勾上,注意要选择“从所有进程”;

2、连接->Fiddler监听端口:8888 ,注意这个端口要和Proxifier的代理端口保持一致。

3、设置完毕,在Proxifer可以看到通讯过程及协议;

4、在Fiddler获取PC端“腾讯视频”客户端的请求的具体数据:
5、电脑上所有的C/S客户端都可以通过此方法抓到包。但是这时候Proxifer打开的时候浏览器会连接不了网络,可以通过设置代理规则,添加浏览器执行程序文件,确认后即可上网,如下图所示:

关于PC客户端(CS架构)的渗透测试,更多内容可以参考博文:PC客户端(CS架构)客户端渗透测试指南。

TNS协议抓包

在某次测试中,遇到某C/S架构的PC客户端没有服务器……直接与Oracle数据库主机进行通信和数据交互,所有业务逻辑的实现均有客户端代码实现(此处只为分析C/S抓包,对其安全性就不吐槽了……)。

客户端与数据库之间的通信协议是TNS协议(Transparent Network Substrate) 。TNS协议是ORACLE服务端和客户端通讯的协议。TNS协议传输可以使用TCP/IP协议、使用SSL的TCP/IP协议、命名管道和IPC协议传输,其中TCP/IP协议传输是使用明文传送。

1、下图为WireSharK抓到的客户端与Oracle数据库建立连接的数据包:
2、下图为进行业务操作时的请求数据包:

Socket通信

很多PC客户端应用程序是使用Socket与服务端进行通信的,那么什么是Socket呢?

OSI模型

如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大。OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层,从下到上分别是接口层、网络层、传输层和应用层,这就是大名鼎鼎的 TCP/IP 模型

这个网络模型究竟是干什么呢?简而言之就是进行数据封装的。

我们平常使用的程序(或者说软件)一般都是通过应用层来访问网络的,程序产生的数据会一层一层地往下传输,直到最后的网络接口层,就通过网线发送到互联网上去了。数据每往下走一层,就会被这一层的协议增加一层包装,等到发送到互联网上时,已经比原始数据多了四层包装。整个数据封装的过程就像俄罗斯套娃。

当另一台计算机接收到数据包时,会从网络接口层再一层一层往上传输,每传输一层就拆开一层包装,直到最后的应用层,就得到了最原始的数据,这才是程序要使用的数据。

给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这一层,我已经处理过了。给数据拆包装的过程正好相反,就是去掉数据头部的标志,让它逐渐现出原形。

你看,在互联网上传输一份数据是多么地复杂啊,而我们却感受不到,这就是网络模型的厉害之处。我们只需要在代码中调用一个函数,就能让下面的所有网络层为我们工作。

我们所说的 socket 编程,是站在传输层的基础上,所以可以使用 TCP/UDP协议,但是不能干「访问网页」这样的事情,因为访问网页所需要的 http 协议位于应用层。

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:

“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。

网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。socket是对端口通信开发的工具,它要更底层一些。

Socket定位

我们提到,socket层只是在TCP/UDP传输层上做的一个抽象接口层,因此一个socket连接可以基于TCP连接,也有可能基于UDP。基于TCP协议的socket连接同样需要通过三次握手建立连接,是可靠的;基于UDP协议的socket连接不需要建立连接的过程,不过对方能不能收到都会发送过去,是不可靠的,大多数的即时通讯IM都是后者。

HTTP连接与Socket连接的区别

  1. HTTP是短连接,Socket(基于TCP协议的)是长连接。尽管HTTP1.1开始支持持久连接,但仍无法保证始终连接。而Socket连接一旦建立TCP三次握手,除非一方主动断开,否则连接状态一直保持。
  2. HTTP连接,服务端无法主动发消息,Socket连接,双方请求的发送无先后限制。这点就比较重要了,因为它将决定二者分别适合应用在什么场景下。HTTP采用“请求-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接双方类似peer2peer的关系,一方随时可以向另一方喊话。

什么时候该用HTTP,什么时候该用socket?

  1. 用HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。
  2. 用Socket的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等。

【总结】此处为了便于理解Socket的地位和用途,并未详细介绍Socket的用法和具体通信过程,进阶学习可参考以下文章:

  • Socket系统教程
  • Socket技术详解
  • Java通信一:Socket通信原理简单理解
  • Java通信二:利用Socket实现聊天室功能

Socket扩展

WebSocket

WebSocket是HTML5标准中提供的用来提供客户端(浏览器)与服务器之间的全双工的通信方式。传统的HTTP协议仅仅提供单向的通信,即客户端主动请求服务器(HTTP Request),服务器受到请求后发送响应(HTTP Response)。在传统的HTTP协议下,需要利用轮询机制或者利用flash和javascript来模拟双向通信,但效率较低,并且需要服务器有较好的支持。而WebSocket协议彻底解决了双向通信的问题,可以更好的节省服务器资源和带宽并达到实时通讯。我们可以采用WebSocket协议来开发一些WEB应用时(诸如WEB在线聊天,主要是客户端和服务器端用WebSocket来交换数据或者消息的一些WEB应用)。

WebSocket协议支持两种模式,ws模式和wss模式,类似HTTP模式和HTTPS模式。ws模式用于普通WebSocket通信,默认用80端口;wss模式用于SSL/TLS加密的WebSocket通信,默认用443端口。wss模式下的WebSocket协议的数据经过TLS加密,安全性大大增加。

Remote APP

RemoteApp 是微软在Windows Server 2008 之后,在其系统中集成的一项服务功能,使用户可以通过远程桌面访问远端的桌面与程序,客户端本机无须安装系统与应用程序的情况下也能正常使用远端发布的各种的桌面与应用

【解读】

实际上,RemoteApp是Windows 终端服务的“改进”,以前的终端服务,默认是发布整个桌面“包括开始菜单、资源管理器等等”,即使用户只需要运行终端服务器上的一个程序,也是发布整个桌面(可以修改设置,只运行一个指定的程序)。而在Windows Server 2008中,Microsoft将终端服务进行了扩展,该服务提供了更多、更有实际意义的功能。

由于是采用RDP协议访问终端服务器并使用终端服务器提供的应用程序,所以,该种方式对工作站的要求比较低:因为所有的程序都运行在服务器端,工作站端只是显示服务器运行的程序的结果,并将用户的键盘、鼠标输入反馈到服务器端执行相应的操作,服务器端将运行结果显示在工作站上。所以,这种方式可以用来升级工作站。本人测试这一产品的目的,也是想用来升级学校两个配置比较低的机房,以用来运行VS2008、AutoCAD 2005等大型软件。

作为终端服务的改进,RemoteApp可以很好的与用户工作站的本地磁盘、打印机进行交互。在使用RemoteApp,可以直接访问用户的磁盘并可以使用用户的打印机,而不像以前的终端服务那样,需要在终端服务器与客户端都安装打印驱动程序。

【区别】

RemoteApp的前身是终端服务器(Windows远程桌面)。终端服务技术是一项应用广泛的成熟技术,客户机可以连接到终端服务器,在终端服务器上执行应用程序,然后把执行结果回传到客户机。这样一来,当客户机受到某些条件制约而无法在本机部署某些应用程序时,就可以借助终端服务器来运行程序,运算部分在服务器完成,客户机只是负责输入输出。有了终端服务技术之后,很多配置老旧的计算机重新获得了生机,应该说终端服务技术在提高计算机硬件利用率方面发挥了很大作用。

【缺陷】

终端服务技术在应用过程中也暴露出了一些有待改进的缺点。例如,用户在客户机上连接到终端服务器后会得到一个服务器桌面,对熟悉客户端操作系统的用户来说,服务器桌面并非一个最佳选择;更糟糕的是,初级用户往往需要在本地的宿主桌面和远程的终端服务器桌面之间进行切换。他们需要在终端服务器桌面上运行应用程序,但同时也需要在宿主桌面上收发电子邮件,浏览网页。如果用户同时需要连接到多个终端服务器,情况就更加复杂了,没有经验的用户在多个终端服务器桌面和宿主桌面之间切换时往往会感到手忙脚乱,出错的概率大增。还有,当用户在外网时,想连接到终端服务器一般都要先通过VPN接入内网。但用户出差在外地时,有些互联网访问点可能并没有开启PPTP或L2TP的通讯端口,导致用户无法通过VPN连接到终端服务器,影响正常的业务使用。

【改进】

RemoteApp针对终端服务技术进行了改进。在RemoteApp中,用户在客户机上运行远程服务器上的应用程序时,不再需要得到整个服务器桌面,只需要看到应用程序运行的窗口!RemoteApp中的应用程序和客户端桌面实现了集成,在任务栏中有自己的条目,运行在自己的窗口中,看起来就像客户机的本地程序一样。如果把RemoteApp和TS Gateway结合起来,用户就可以通过443端口访问到RemoteApp中的应用程序,而无需事先建立VPN连接。漫游用户和移动用户是RemoteApp的最大受益者,因为他们无论在哪台计算机上登录,都会惊喜地发现所需要的应用程序已经"安装"好了,可以直接运行。除了上述优点,和终端服务技术相比,RemoteApp显著地降低了网络资源的消耗,因为RemoteApp只需要显示应用程序的运行窗口就可以了,不再需要完整地显示整个终端服务器的桌面。

关于Remote APP的部署和使用步骤,请参考:RemoteApp配置手册。

渗透测试-CS架构客户端相关推荐

  1. Qt CS架构 客户端代码编写技巧 QTcpSocket

    QT网络编程解说 QTcpSocket网络编程细节 这里是更新版本的 Qt 网络编程解说 QT网络编程解说 很多人在编写网络代码的时候,客户端代码编写的功能总不能胜任所需要的功能能力,现在我将编写网络 ...

  2. Kali Linux 渗透测试 博客记录

    本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的<Kali Linux 渗透测试>课程 文章为长时间连载,内容具有连续性,禁止转载! --- ...

  3. 渗透测试C客户端(C-S架构)checklist

    0x00 前言 本项目主要针对pc客户端(cs架构)渗透测试,结合自身测试经验和网络资料形成checklist,如有任何问题,欢迎联系,期待大家贡献更多的技巧和案例. 0x01 概述 PC客户端,有丰 ...

  4. C/S客户端渗透测试(一)客户端渗透环境配置

    目前,虽然C/S客户端不如Web应用程序常见,但是在银行及某些企业也经常能够遇到C/S架构的渗透测试.本系列文章将带大家搭建CS客户端渗透测试环境并介绍一些常用工具的使用. C/S客户端介绍: 服务器 ...

  5. 渗透测试神器CS(4.0)的使用

    CS CS简介 CS功能 安装CS CS的基本使用 深入标题介绍 Beacon Commands 基础操作演示 CS简介 CS 是Cobalt Strike的简称,是一款渗透测试神器,常被业界人称为C ...

  6. 网络安全学习(渗透测试方法论,web架构安全分析,信息收集)

    目录 一.渗透测试方法论 渗透测试种类 *黑盒测试 *白盒测试 *脆弱性评估与渗透测试 二.安全测试方法论 *开放式 Web 应用程序安全项目(Open Web Aplication Security ...

  7. BS和CS架构,软件开发的瀑布模型,快速原型模型、螺旋模型、敏捷开发、软件测试分类,测试的分类和理解

    1.BS和CS架构 1.1  BS:浏览器与服务器结构 优点:客户端无需安装,有web浏览器即可 缺点:在速度和安全性上需要花费巨大的设计成本 1.2  CS:客户机与服务器结构 优点:CS架构的页面 ...

  8. 渗透测试工具(一) CS

    1.渗透测试工具 一.CobaltStrike 简称CS. 能够基于分布式的结构形态,实现单人或者团队的工作开展.易于上手.(对windows操作系统有很好的支持,但是对Linux系统来说,需要添加额 ...

  9. 【218】CS架构和BS架构以及数据放在服务端和客户端的利与弊?

    ♣ 题目部分(原文见公众号:python宝) python宝 https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NjI ...

最新文章

  1. iOS提示气泡,带动画
  2. 安装中文VS2008 SP1之后 智能提示是英文的解决办法
  3. 手撕 MySQL 事务,发生了什么?
  4. Java编写基于netty的RPC框架
  5. lru调度算法例题_嵌入式必会!C语言最常用的贪心算法就这么被攻略了
  6. emlog独立会员中心模板源码 UserEmlog Ver:1.0
  7. webview加载页面有2秒白屏_iOS WKWebview 白屏检测实现
  8. 无障碍的 Web 环境应该如何打造?
  9. oracle 建表id自增长_oracle建表设置主键自增
  10. HLW8032做220V电量采集方案测试
  11. 【数据结构Python描述】自底向上构建二叉堆实现及其O(n)时间复杂度分析
  12. 【读书笔记】金字塔原理-演绎推理和归纳推理
  13. 老师用计算机教我们画画拼音,《汉语拼音13 ang eng ing ong》第三课时教学设计...
  14. 怎样把音频文件转换成mp3格式?
  15. MySQL学习---作业(1)
  16. java 后台将英文名 转换成中文名
  17. 我学会了用计算机作文,我学会了作文(15篇)
  18. 【Audio】声临其境——杜比音效介绍
  19. HTML资源未找到,加载资源失败:服务器响应状态为404(未找到)
  20. 关于R语言中文公开课

热门文章

  1. 塑料回收标志相关知识
  2. office在线预览 word在线预览 .net在线预览 文件在线浏览接口
  3. 水果店开业活动策划,水果店开业怎么搞活动
  4. miui11升级鸿蒙,这就是MIUI 11的升级机型名单?还挺给力!
  5. 单位篮球比赛结束,感想很多
  6. Cohort Analysis组群分析(1)
  7. 当小内存遇上大量数据,你该怎么解决这个问题?
  8. Tiny4412 LCD驱动(DRM+设备树)
  9. 在Unity中创建基于Node节点的编辑器 (二) 窗口序列化
  10. python数据分析师 前景_数据分析师的前景怎么样? 本人是程序员,最近对数据分析有兴趣……...