Web安全-Kali安装、LAMP环境配置、火狐配置及burp证书、burpsuit、http协议
----------------------------------------------------------------------------------------
下载安装地址:www.kali.org
这里选择虚拟机版本,下载相应的种子文件,然后使用迅雷进行下载
下载完后解压至指定文件夹目录,然后使用虚拟机打开即可
打开虚拟机之后开始进行虚拟机硬件配置
配置完成之后打开虚拟机,选择我已复制该虚拟机
打开虚拟机之后使用默认账号密码登陆进虚拟机
默认账号密码都是kali
进入虚拟机之后打开终端命令行进行root密码的修改,并登录root账户
sudo passwd root
###修改密码之后###
su - root
然后对kali虚拟机进行中文语言的设置
#切换至root之后输入以下命令
dpkg-reconfigure locales
然后回车确认,选中下图中的红色标识处,再点击回车,开始安装中文语言包
出现以下状态则代表中文语言更改成功,然后重启即可
kali开启ssh服务
#1、配置ssh参数
vim /etc/ssh/sshd_config
将#PubkeyAuthentication yes的注释去掉
将#PermitRootLogin prohibit-passwd 注释去掉并修改为 PermitRootLogin yes
#修改完成之后保存退出
#2、启动ssh服务
systemctl start ssh
#3、查看ssh服务状态
systemctl status ssh
#4、设置系统自动启动ssh
update-rc.d ssh enable
#enable改为disabled则为关闭自动启动
#5、查看开放端口
netstat -lnt
kali虚拟机网卡设置
kali虚拟机网络配置文件在 /etc/network/interfaces 文件里
vim /etc/network/interfaces
outo etho
iface eth0 inet static
address 192.168.1.188
netmask 255.255.255.0
gateway 192.168.1.1
配置完ip之后需要重启网络服务+重启网卡
systemctl restart networking
ifup eth0 #重要
配置DNS地址在 /etc/resolv.conf
L=Linux、A=Apache、M=Mysql、P=php
Kali虚拟机默认已经将AMP环境都配置好了,可以查看相关版本信息
1、配置Mysql相关
Kali虚拟机需要配置Mysql之后才可以进行使用
#root模式下
mysql_secure_installation #开始进行mysql初始化
Enter current password for root (enter for none): #输入root(mysql)的密码,默认没有,直接回车
Switch to unix_socket authentication [Y/n] #是否切换到unix套接字身份验证,建议n
Change the root password? [Y/n] #是否设置root密码
Remove anonymous users? [Y/n] #是否删除匿名用户?(就是空用户),建议yes
Disallow root login remotely? [Y/n] #是否不允许远程root登录,建议n
Remove test database and access to it? [Y/n] #是否删除test数据库,建议yes
Reload privilege tables now? [Y/n] #是否立即刷新权限,建议yes
2、配置mysql用户远程连接
mysql -u root -p #进入数据库
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; #%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接
flush privileges; #刷新权限,命令立即生效
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; #查询创建用户
然后打开相关配置文件修改,将bind-address=127.0.0.1修改为0.0.0.0
vim /etc/mysql/mariadb.conf.d/50-server.cnf
然后重启mysql服务即可
systemctl restart mysql
3、apache相关信息
systemctl restart apache2
apache的网站根目录为: /var/www/html
我们可以再次文件路径下创建test.php查看apache是否可用
#test.php文件内容
<?php
phpinfo( );
?>
然后打开127.0.0.1以及127.0.0.1/test.php查看
4、php是一种语言,不是一种服务,所以不需要去启动php,安装好php之后就可以直接使用
5、Kali默认配置了python以及java的环境
1、火狐中文设置
2、burpsuit证书配置
① 打开burpsuit配置监听端口
② 火狐浏览器配置代理
③ 浏览器下载证书
火狐浏览器打开http://burp/,开始下载证书
④ 浏览器导入证书
Burp Suite是以拦截代理的工作方式,拦截所有通过代理的网络流量,如客户端的请求数据、服务器端的返回信息等
Dashboard(仪表盘)——用于显示Burp Suite工作信息
Target(目标)——显示目标目录结构的的一个功能
Proxy(代理)——拦截HTTPIS的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流
Intruder(入侵)——一个定制的高度可配置的工具,对web应用程序进行自动化攻击,如:枚举标识符,收集有用的数据,以及使用fuzzing 技术探测常规漏洞
Repeater(中继器)——一个靠手动操作来触发单独的HTTP请求,并分析应用程序响应的工具
Sequencer(会话)——用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具
Decoder(解码器)——进行手动执行或对应用程序数据者智能解码编码的工具
Comparer(对比)——通常是通过一些相关的请求和响应得到两项数据的一个可视化的“差异"
Extender(扩展)——可以让你加载Burp Suite的扩展,使用你自己的或第三方代码来扩展BurpSuit的功能
Project options(设置)——对Burp Suite的一些设置
User options(设置)——对Burp Suite的一些设置
1、Proxy模块
Proxy代理模块作为BurpSuite的核心功能,拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流(请求和响应)
1> lntercept
① Forward:用于发送数据。当把所需要的HTTP请求编辑完成后,手动发送数据
② Drop:将该请求包丢弃
③ Intercept is off/on:拦截开关。当处于off状态下时,会自动转发所拦截的所有请求、当处于on状态下时,会将所有拦截所有符合规则的请求并将它显示出来等待编辑或其他操作
④ Action:将请求发送到其它模块进行交互
2> Intruder模块
用于自动对Web应用程序自定义的攻击
它可以用来自动执行测试过程中可能出现的所有类型的任务。例如:目录爆破,注入,密码爆破等
① Target
用于配置目标服务器进行攻击的详细信息
② Positions
设置Payloads的插入点以及攻击类型(攻击模式)
Sniper:狙击手模式
对标记变量依次进行爆破
特点:不管添加多少个标记位,只有一个字典。
Battering ram:攻城锤模式
可对多个变量同时破解
特点:一个字典对应多个标记位。
Pitchfork:草叉模式
每一个变量对应一个字典
特点:爆破次数取决于变量少的字典。
Cluster bomb:集束炸弹模式
组合爆破,每个变量对应一个字典,并交集爆破
特点:爆破次数为字典 1 * 字典 2
这里举例Sniper狙击手模式的实现步骤
如上图,使用$ $标记起来的成为标记变量,爆破的时候就是不断更换标记变量的值
我们现在只需要爆破admin的密码,所以我们只需要标记passwd值即可,上述操作为取消掉其他的变量标记
标记完成之后需要配置字典
③ Payloads
配置Positions设置的标记位的字典
4> Repeater模块
重放功能,在这个模块里可以修改请求包再重新请求
1、统一资源定位符URL
我们常说的网址,包含了用于查找资源的足够的信息,而一个完整的URL包含下面几部分:
2、Http消息结构解析
无论是请求还是响应,都包括http头部和正文信息
http头部:请求头部、响应头部
正文:请求正文、响应正文
请求方法
#方法:描述
GET:请求指定的页面信息,并返回实体主体
HEAD:类似于geti请求,只不过返回的响应中没有具体的内容,用于获取报头
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT:从客户端向服务器传送的数据取代指定的文档的内容
DELETE:请求服务器删除指定的页面
CONNECT:HITP/1.1协议中预留给能够将连接改为管道方式的代理服务器OPTIONS:允许客户端查看服务器的性能
TRACE:回显服务嚣收到的请求,主要用于测试或诊断
请求头部
允许客户端传递关于自身的信息和希望的响应形式
空行
表示请求头结束,请求正文(请求体)开始
请求数据
GET方法提交数据时,数据参数会做为 URL 的一部分放在文件路径后面发送给服务器,被称为查询字符串
POST方法发送的数据在请求体中
服务端响应消息
无论是请求还是响应,都包括http头部和正文信息
http头部:请求头部、响应头部
正文:请求正文、响应正文
服务端响应消息:状态码
200 OK:客户端请求成功
302:url 跳转
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Unauthorized:请求未经授权
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在,eg:输入了错误的 URL
500 Internal Server Error:服务器发生不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
空行
表示响应头结束,响应正文开始
返回数据
服务器返回的资源内容
Cookie特点
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存 Cookie 和硬盘 Cookie
内存Cookie 由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的
硬盘Cookie 保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘 Cookie不会被删除,其存在时间是长期的
首先当我们访问某个网站时,服务器首先根据浏览器的编号生成一个cookie 返回给客户端。客户端下次再访问时就会将自己本地的 cookie 加上 url 访问地址一同给服务器。服务器读出来以此来辨别用户的状态。
Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的
Session 是一种服务器端的机制, Session 对象用来存储特定用户会话所需的信息
Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中
Session工作原理
当用户访问到一个服务器,如果服务器启用Session ,服务器就要为该用户创建一个 SESSION并生成一个与此 SESSION 相关的 SESSION ID ,这个 SESSION ID 是唯一的、不重复的、不容易找到规律的字符串
这个 SESSION ID 将被在本次响应中返回到客户端保存,而保存这个SESSION ID 的正是 COOKIE ,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器
区别
1、存放位置不同
Cookie保存在客户端, Session 保存在服务端。 Session 对应的 sessionid 保存在 cookie 中
2、存取方式的不同
Cookie中只能保管 ASCII 字符串,假如需要存取 Unicode 字符或者二进制数据,需求先进行编码
Session中能够存取任何类型的数据
3、安全性不同
Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie 中的内容
Session 存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险