各种软件的安装

Python2.7.13

image-20211208181654844

以上省略安装过程,直接看结果就好啦

因为我们接下来要用sqlmap,需要python的支撑

sqlmap

接下来的sqlmap安装后,在cmd里试试看能否运行

image-20211208182315114

然后发现是可以哒

网站基础知识

访问过程

访问域名-->显示一个IP-->进组成入服务器-->出现网站-->进入浏览器

基础组成

image-20211208191252290

1.div+css(层叠样式表):页面的布局

2.html(超文本标记语言):定义页面的内容

3.javascript(js脚本语言):处理页面的动作

网站分类

静态

1.是最基本的,也是最容易创建的。 它不需要服务器端处理,只需要客户端。 客户端技术是HTML,CSS和JavaScript

2.无任何内容存储(databases、columns什么的),除了网站的实际页面;没有用户、评论、博客帖子或任何交互性

3.每增加、删除、修改一个页面,都必须重新对服务器的文件进行一次下载上传

  1. 后缀多为html htm shtml

动态

1.使用PHP等语言与存储在数据库中的信息进行交互

2.不仅需要Web托管,还必须创建数据库或服务器

3.后缀多为php asp aspx jsp

区别

如果用户可以与它进行交互,那么它就是一个动态网站。

因此,我们可能访问的大多数网站都是动态网站,无论是知乎,豆瓣,还是 Facebook ,用户都可以与网站进行交互

HTTP协议

请求—URL

URL的各部分组成:

例:http://www.baidu.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。

在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在”HTTP”后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。

一个URL中,也可以使用IP地址作为域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

image-20211208202152431

(小声bb:其实好多信息都可以在抓包里看到的)

image-20211208202700796

改成POST请求也就是多了一个请求正文

GET请求和POST请求更直观的就是接下来的两张图

GET请求

image-20211208203047873

POST请求

image-20211208203450847

注意一下POST后面是有个小空格哒

如果自己要输入请求,要记得跟消息报头之间要有一个空行

GET   请求获取Request-URI所标识的资源**                                          //在搜索框里输入要查的东西抓包出来一般都是get

POST   在Request-URI所标识的资源后附加新的数据                                    //一般都用这两个

HEAD   请求获取由Request-URI所标识的资源的响应消息报头                             //一般做扫描器的时候用,速度比较快

PUT   请求服务器存储一个资源,并用Request-URI作为其标识

DELETE  请求服务器删除Request-URI所标识的资源

TRACE  请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求                         //下面这几个看看就ok了

响应—burpsuit

组成如图:

image-20211208204412751

就是我们平常抓包,send to repeater之后在Response里显示出来的那一块数据

常见的状态代码

状态描述 说明

200 OK // 客户端请求成功

302 Redirection //请求重定向 (A 找 B 借钱,B 通知 A 找C 借钱 , A找C 借钱) A 客户端 B、C服务器

304 //服务器端资源没有改动,通知客户端查找本地缓存

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒接提供服务

[www.moonsec.com/xx/](http://www.moonsec.com/xx/) 403       xx是新建的文件夹,啥也没有

404 Not Found //客户端访问资源(文件)不存在

500 Internal Server Error //服务器发生不可预期的错误    语法有问题

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

image-20211209205732643

端口协议

如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:2^16)个

在本地 web 开发调试过程中, 我们可能都碰到过端口, 比如或许是/最著名的 8080 端口, 一般我们会这样去访问本地的 web 程序:

localhost:8080

你可以通过 Chrome 的开发人员调试工具看到端口值

image-20211209212726857

缺省端口

  • 如果是 http 协议, 就使用 80 端口
  • 如果是 https 协议, 就使用 443 端口

另外, 如果你胡乱地输入一个比如 9527, http://xiaogd.net:9527, 自然也是无法访问的, 毕竟管理员的服务器上根本没有在 9527 端口上进行监听.

还有,即便管理员有在 9527 端口上监听, 提供的也未必是 web 服务, 使用的协议可能既不是 http, 也不是 https

TCP端口

中文名:传输控制协议
协议说明:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。

举例:打电话,需要双方都接通,才能进行对话

特点:效率低,数据传输比较安全


即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等

三次握手

第一次握手:客户端要和服务端进行通信,首先要告知服务端(电脑)一声,遂发出一个SYN=1的连接请求信号

第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,“我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。

第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”

具体来说,握手是合作的意思,也就是为了保证安全的情况下建立连接的过程,那三次握手的作用我说一下:第一次握手,客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。第二次握手,服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。第三次握手,客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。最后三次握手成功了就可以正常安全的传输接收数据了!

四次挥手

第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。

第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。

第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK)

而四次挥手顾名思义就是服务器和客户端双方安全的撤出合作关系的过程,也就是取消连接的过程!第一次挥手,客户端停止发送数据,发送网络包,告知服务器我要和你断开连接,之后进入了一个类似等待的状态。第二次挥手,服务器收到断开连接请求包之后,也返回一个包,也进入等待状态,并询问确认断开连接吗?第三次挥手,客户端接收到服务器端的确认指令之后,告知并请求服务器端可以释放断开连接了,于是发送了一个网络包,并再次进入等待(等待一段时间会自动关闭),等待服务器真正的断开释放连接。第四次挥手,服务器端接收到客户端传来的网络包指令,于是发送了释放连接最后的数据包,发送完后服务器进入了关闭状态。这时,服务器端的三次握手和四次挥手才算正真的完成了!

客户端发送 ACK 之后不直接关闭,而是要等一段时间才关闭。这其中的原因就是,要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文。至于 TIME_WAIT 持续的时间至少是一个报文的来回时间。一般会设置一个计时,如果过了这个计时没有再次收到 FIN 报文,则代表对方成功就是 ACK 报文,此时处于 CLOSED 状态。
image-20211210165957395


UDP端口

中文名:数据报协议
协议说明:UDP是一种面向无连接的传输层通信协议。

举例:发短信,不需要双方建立连接,But,数据报的大小应限制在64k以内

特点:效率高,数据传输不安全,容易丢包

小question:为啥客户端发送 ACK 之后不直接关闭,而是要等一段时间才关闭?
这其中的原因就是,要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文。至于 TIME_WAIT 持续的时间至少是一个报文的来回时间。一般会设置一个计时,如果过了这个计时没有再次收到 FIN 报文,则代表对方成功就是 ACK 报文,此时处于 CLOSED 状态。

状态

1、LISTENING状态
  FTP服务启动后首先处于侦听(LISTENING)状态。

2、ESTABLISHED状态
  ESTABLISHED的意思是建立连接。表示两台机器正在通信。

3、CLOSE_WAIT

*对方主动关闭连接或者网络异常导致连接中断*,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

4、TIME_WAIT

*我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT*。**TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

渗透编码

这些编码都可以在Burpsuit里面的Decoder里面转化编码前和编码后的亚子,不太重要都有工具的,don't care

页面编码

在网页设置网页编码 在<head></head>中加入设置特定html标签

<meta charset="utf-8" />

如果没有设置编码就会使用默认这样页面的编码就会变成utf-8 ,如果没有设置编码就会使用默认的编码,而浏览器默认编码与之不同就会出现乱码。

常用的有三种格式分别是 utf-8(一般都是这个)、gbk(中文)、gbk2312(中文)

Ascll编码

就是高中学的那个哇

image-20211210185316847

HTML编码

不能用''<>'',不然浏览器会以为是标签的,比如<head></head>这样子的

这两篇是整理了大部分网站常用到的特殊符号,可以参考:

(5条消息) HTML特殊字符编码对照表 —— (一)_grootbaby-CSDN博客_html符号代码对照表

(5条消息) HTML特殊字符编码对照表 —— (二)_grootbaby-CSDN博客

URL编码

同样采用GB2312编码,但是在每个字节前加上了%

例如:单引号字符的ASCII码为0x27,其URL编码的表示方式为%27

JS编码

http://www.jb51.net/tools/zhuanhuan.htm 这个网页可以对这些进行转换

Unicode编码

hex编码

这种编码常用于数据库中 转码过后要加上0x

例:a的hex码是61 如果在数据库使用要加上0x61

image-20211210191711271

base64编码

一般用于传输数据

image-20211210192000875

json编码

要记住格式

序列化

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。

a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}            //是个字符串,转换方式

<?php 

$stooges = array('Moe','Larry','Curly');

$new = serialize($stooges);

print_r($new);

echo "<br />";

print_r(unserialize($new));

?>

ut7编码

UTF-7 (7-位元 Unicode 转换格式(Unicode Transformation Format,简写成 UTF))是一种可变长度字符编码方式, 用以将 Unicode 字符以 ASCII 编码的字符串来呈现,可以应用在电子邮件传输之类的应用。

moonsec +AG0AbwBv-n+AHM-e+AGM-