渗透测试-CS架构客户端

网络架构模式

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架构)客户端渗透测试指南

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的用法和具体通信过程,进阶学习可参考以下文章:

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配置手册

发布了117 篇原创文章 · 获赞 85 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览