1.WEB服务

WEB服务是通过万维网(www)超文本传输协议(HTTP)进行通信的客户端和服务器应用程序。
WEB服务可以看做是按需的代码,就像是我们调用函数一样,Web服务可以看做是使用某种协议和某些协议通过Internet调用函数或方法。

2.HTTP协议

网络是由若干节点和连接这些节点的链路构成,然后网络与网络之间所串连成的庞大网络叫做互联网,而HTTP(HyperText Transfer Protocol 超文本传输协议)是互联网上应用最为广泛的一种网络协议,它是由万维网协会(World Wide Web Consortium)制定发布。

HTTP 协议一共有五大特点:

1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
3.灵活:HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
4.无连接:
无连接的含义是限制每次连接只处理一个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
采用这种方式可以节省传输时间。
5.无状态:
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息(Cookie和Session孕育而生)

TCP/IP协议

HTTP是一个基于TCP/IP协议簇来传递数据,包含四层模型。
TCP/IP
数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层获得数据。

3.TCP连接

1.TCP包头信息

HTTP是一个基于TCP/IP协议簇来传递数据,所以这HTTP建立连接也就是建立TCP连接,TCP如何建立连接,一起来看看TCP包信息结构吧。
TCP头信息
TCP报文包=TCP头信息+TCP数据体,而在TCP头信息中包含了6种控制位,这六种标志位就代表着TCP连接的状态:

1.URG:
紧急数据(urgent data)—-这是一条紧急信息
2.ACK:
确认已收到
3.PSH:
提示接收端应用程序应该立即从tcp接收缓冲区中读走数据
4.RST:
表示要求对方重新建立连接
5.SYN:
表示请求建立一个连接
6.FIN:
表示通知对方本端要关闭连接了
建立连接过程

2.TCP建立连接的三次握手

三次握手
1.客户端发送位码为SYN=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机
客户端:我要连接服务端
2.服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包
服务器:同意连接
3.客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。
客户端:确认连接

问:为什么HTTP建立连接需要三次握手,不是两次或四次

答:三次是最少的安全次数,两次不安全,四次浪费资源

3.客户端请求

客户端与服务器连接上了之后,客户端就可以开始向服务器请求资源,就可以开始发送HTTP请求了。

(1)HTTP请求报文结构

结构图

(2)HTTP请求实例

请求实例
HTTP/1.1 定义的请求方法有8种:
GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT

4.服务端响应

服务器在收到客户端请求处理完需要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。

响应报文
问:在服务器响应完毕后,一次会话就结束了,请问这时候连接会断开吗?

答:
是否断开我们需要区分HTTP版本:
(1)在HTTP/1.0版本的时候,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP连接,这也被称为短连接。

(2)在HTTP1.0发布仅半年后(1997年1月),HTTP/1.1版本发布并带来一个新的功能:
在客户端与服务器完成一次请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接,这也被称为长连接。

注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。
现在浏览器在请求时请求头中都会携带一个参数:Connection:keep-alive,这表示浏览器要求与服务器建立长连接,而服务器也可以设置是否愿意建立长连接,如果是close,表示已关闭。

HTTP还有两个很大的缺点就是明文且不能保证完整性,所以目前会渐渐被HTTPS代替。

3.渗透测试基本流程

渗透测试流程
1.信息收集

第一步就是信息收集,我们根据网站URL可以查出一系列关于该网站的信息。通过URL我们可以查到该网站的IP、该网站操作系统、脚本语言、在该服务器上是否还有其他网站等等一些列的信息。更多的关于信息收集,我在另一篇文章中很详细的介绍了信息收集需要收集哪些信息,以及信息收集过程中需要用到的工具。

2.漏洞扫描

当我们收集到了足够多的信息之后,我们就要开始对网站进行漏洞扫描了。探测网站是否存在一些常见的Web漏洞。

3.漏洞利用

当我们探测到了该网站存在漏洞之后,我们就要对该漏洞进行利用了。不同的漏洞有不同的利用工具,很多时候,通过一个漏洞我们很难拿到网站的webshell,我们往往需要结合几个漏洞来拿webshell。

4.内网转发

当我们获取到了网站的Webshell之后,如果我们想获取该主机的有关信息,我们可以将该主机的webshell换成MSF的shell。直接生成一个木马,然后在菜刀中执行该木马,我们就能接收到一个MSF类型的shell了。如果我们还想进一步的探测内网主机的信息的话,我们就需要进行内网转发了。我们是不能直接和内网的主机通信的,所以我们就需要借助获取到的webshell网站的服务器和内网主机进行通信。

5.内网渗透

当我们在获取了外网服务器的权限,进入该系统后,我们要想尽办法从该服务器上查找到我们想要的信息。

6.权限维持

在拿到目标主机的权限后,很有可能当时我们并不能获取到想要的东西,需要进行长期的潜伏,特别是在内网渗透中,需要进行长期的信息收集。这时,权限维持就很重要了。我们需要维持住获得的现有权限。

7.痕迹清除

完全清除入侵痕迹是不可能的!主要是增加管理员发现入侵者的时间成本和人力成本。

8.撰写报告

撰写渗透测试报告,明确的写出哪里存在漏洞,以及漏洞修补的方法。以便于网站管理员根据我们的渗透测试报告修补这些漏洞和风险。

最后修改:2022 年 03 月 19 日 08 : 30 PM
如果觉得这篇文章不错,不妨赏我碎银几两。