web安全测试概述

  • Post author:
  • Post category:其他


一、关于安全

1、安全问题的根源:

1)、分层思想,这个分层包括网络分层和软件分层等,分层可以将大的问题划分为不同的层次,层次与层次之间通过一定的接口标准进行信息交换,从而将一个大问题拆分开来由不同层次的模块去实现扩展。

· 从功能实现的角度看,分层是很方便高效的。

· 从系统安全的角度看,不同层次由不同的人去负责,每个人的眼光具有局限性,无法意识到其他层次的安全问题。

· 系统安全要保证完全的安全,任何一点的漏洞都有可能导致系统崩溃,所以要全面地考虑系统安全。

2)、只追求功能的实现,很多技术人员只追求功能的实现而不从安全的角度设计架构软件。

3)、最大的安全威胁是人,只要有人,就会或多或少出现纰漏,让不法分子有机可乘。

2、安全目标:安全人员在保护系统安全时要实现的目标。

1)、先于×××者发现和防止漏洞出现:

· ×××型安全:用×××的手段(×××测试)探测系统的漏洞,再去修补他。

· 防护型安全:将不必要的端口关闭,将系统的×××面降到最低。但这样周期长,投入多,效果不好,因为总有没有防护到的地方。

2)、在保护系统安全时要充分从×××型安全和防护型安全的角度去考虑。

二、×××测试

1、用×××的手段

*

系统,尝试绕过或打败安全防御机制,发现系统的弱点。

2、×××测试者应不断证明安全问题的存在,不能去破坏系统。

3、×××测试者就是白帽子,白帽子和黑帽子拥有相同的技能,只是用的地方不一样,一个用于守护,一个用于破坏。

· ×××测试和×××的区别在于是否取得目标公司的授权。

4、×××测试标准:简称PETS(详见:

http://www.pentest-standard.org

),他将×××测试的流程做了一个划分。

1)、前期交互阶段:和客户进行前期沟通。

· 确定×××测试的范围:将大系统划分为一个个子系统(包括系统内所有的设备系统软件)分别去×××测试。

· 确定测试方式:现场测试,远程测试,是否使用社会工程学的手段配合,是否进行直接的DDoS×××型的测试。

· 确定×××投入:花费多少时间,人力。

2)、情报搜集阶段:对目标系统进行信息搜集。

· 被动信息搜集(不与目标系统进行直接交互):邮箱地址,联系人,公司地址,DNS信息,服务器的IP,网站的域名,近期公司动态等。

· 主动信息搜集(对目标系统进行主动探测):主机发现,端口发现,服务发现等。

· 通过搜索引擎和扫描进行情报收集。

3)、威胁建模阶段:通过前期的情报搜集已经对系统有了大概的认识,然后分析情报选取效率最高(用时最短,威胁最大)的手段进行×××测试。

4)、漏洞分析阶段:根据情报分析漏洞。

· 目标服务器版本是否过低,是否有已经公开的漏洞。

· 对一些组件进行逆向分析,发现0day,编写具有针对性的×××脚本。

5)、××××××阶段:漏洞分析完毕后,对漏洞进行××××××,这时候会遇到各种安全防护机制,要想办法绕过防护机制,进入系统拿到权限。

6)、后×××测试阶段:拿到一台服务器的权限后,要继续利用这台服务器向内网×××,想办法控制更多的服务器造成更大的威胁。

7)、×××测试报告:×××人员将漏洞的发现利用到控制整个服务器的过程记录成报告,并附上漏洞的修补方法,提交给目标公司的领导层。

5、×××测试误区:扫描器就是一切。

· 扫描器只能找到技术型的漏洞,对于业务逻辑漏洞无能为力,业务逻辑漏洞需要×××测试人员根据公司的业务逻辑寻找。

Kali linux概述

一、关于kali linux

1、Kali的缘由:

image.png

2、kali linux介绍:

1)、基于Debian的Linux发行版本。

2)、前身是BackTrack(最后更新版本是5.23,之后停止更新),2013年3月发布。

3)、用于×××测试和安全审计。

4)、包含600+安全工具(将之分类,包含×××测试,逆向工程,电子取证等工具)。

5)、采用FHS标准的目录结构(所有linux系统都采用的目录结构,这也是kali取代BT的重要原因)。

6)、定制内核(定制的无线驱动的内核,方便进行无线×××)。

7)、支持ARM和手机平台(有ARM和手机平台的版本,可以在上面安装kali linux)。

8)、开源免费(由一个×××型安全组织Offensive Security Ltd进行开源维护)。

3、kali linux策略:

1)、root用户策略:其他linux平台一般遵循权限最低原则,平常使用普通用户工作,必要时才登陆root用户。但是kali中的安全工具大部分都需要root权限才能使用,而且kali linux使用者要有能力放心的使用root用户,所以一般使用root用户工作。

2)、网络服务策略:kali中的所有网络服务默认关闭,也无自动启动脚本,重启后需要手动开启。

· 如果想要自启动某服务,可以使用命令设置。

3)、更新升级策略:kali是基于debian的再开发,debian的所有更新都会同步到kali上。同时安全工具的更新也会同步到kali上。

4、关于本课程:

image.png

Kali linux安装

一、硬盘安装

1、下载iso安装镜像文件。

·

https://www.kali.org/downloads/

· mini版本是最小化版本的kali安装镜像,里面不包含任何安全工具,需要自己安装。

2、验证hash值:排除下载过程中造成的文件损失导致的故障。

· 计算方法:下载一个计算文件sha256sum的工具,再计算iso文件的sha256sum值,将之与官网上给出的sha256sum值比对,相同则下载无损。

image.png

3、制作启动光盘或启动U盘:

1)、制作启动光盘:需要光盘刻录机和光盘介质。

2)、制作启动U盘:使用unetbootin软件将iso文件抽取拷贝到U盘中(U盘应大于4G)。

4、设置BIOS启动顺序:重启电脑设置BIOS启动顺序,让电脑通过U盘启动。

5、启动安装:设置好BIOS启动顺序后,电脑会进入kali linux的安装界面。

image.png

1)、Live(amd64):电脑启动U盘中的系统,不安装。这种属于体验模式(U盘只读),不能安装软件包,也不能升级更新操作系统。

2)、Live(amd64 failsafe):

3)、Live(forensic mode):启动取证模式,可以进行计算机犯罪或电子取证的操作。

4)、Live USB Persistence:启动持久USB中的Live光盘,对U盘内的操作系统可读可写。

5)、Live USB Encrypted Persistence:启动持久加密USB中的Live光盘,对U盘内的操作系统可读可写且操作加密。

· 4、5相当于拥有了一个移动的kali linux操作系统,不需要安装,即插即用。

6)、Install:命令行安装kali。

7)、Graphical install:图形化安装kali。

二、Docker安装

1、在官网上下载一个docker的image文件,再在上面开启容器运行。

image.png

· 可以远程连上Docker,进入里面的容器。

三、基于virtualbox的虚拟机安装

1、下载virtualbox及其扩展功能包,并在全局设定中导入扩展包。

2、创建虚拟机:

1)、新建虚拟电脑。

image.png

2)、设置内存大小,根据自己内存的情况设置,在此设置4096MB内存。

3)、现在创建虚拟硬盘。

4)、设置虚拟硬盘文件类型为VDI。(如果以后要将虚拟硬盘文件用vm虚拟机启动,虚拟硬盘文件类型选择vmdk)

5)、动态分配空间。

6)、设置虚拟硬盘文件的位置和大小,100GB。

7)、虚拟机创建成功。

3、设置虚拟机:

1)、设置核数。

2)、虚拟机不用启用声音。

3)、启用网卡的网络连接,连接方式为NAT模式。

4)、为虚拟机插入iso镜像文件。

image.png

4、启动虚拟机。

5、图形化界面安装kali linux:

1)、设置语言(汉语 or 英语)。

2)、设置主机名(MyKali)。

3)、设置域名(跳过)。

4)、设置root密码(000000)。

5)、磁盘分区:使用整个磁盘——>将/home、/var、/tmp都分别放在单独的分区——>将改动写入磁盘。

6)、安装系统。

7)、更新软件包。

8)、将GRUB启动引导安装到硬盘的MBR上。

6、安装tools(安装虚拟机增强功能):

1)、需要先安装linux内核的头文件,apt-get install linux-headers-$(uname -r)

2)、将光盘中的VBoxLinuxAdditions.run移到桌面,在桌面打开terminal,赋予这个文件执行权限(chmod +x file),再执行该文件(./file)。

3)、安装成功,重启系统。

7、注意:

1)、如果觉得手动安装系统麻烦,可以下载官网配好的虚拟硬盘文件,用VMware虚拟机的硬盘文件在virtualbox中创建虚拟机:创建虚拟硬盘文件时选择使用已有的虚拟硬盘文件——>选择下载的虚拟硬盘文件中的第一个。这样即可直接进入配置好了的kali linux系统,默认root密码是toor。

2)、apt-get update:下载系统中所有软件包最新版本的索引文件,下载好后再用apt-get upgrade将软件包根据索引文件进行升级。

3)、dmesg:查看系统变化。

四、持久加密USB的方式使用kali

1、Live USB Encrypted Persistence这种模式下启动kali要输入保护密码,U盘相当于是一个移动kali linux系统,可读可写,并且写的内容是加密的。

· 将U盘的其余空间进行磁盘级别的加密,并将系统文件目录都转移到加密空间中,且之后对系统的更改都会写入到加密空间中。

· LUKS(linux unifield key setup):Linux磁盘分区加密规范,以前不同的软件开发者对磁盘加密有各自的算法,彼此不兼容,国际标准组织将磁盘加密技术做了一个规范,实现了Linux中磁盘磁盘加密技术的统一。(windows系统也可使用LUKS进行磁盘加密,但是想要查看加密磁盘需要下载DoxBox)

· LUKS进行Linux的磁盘加密是通过dm-crypt和cryptsetup实现的:dm-crypt是后端组件,用于加密解密磁盘数据。cryptsetup是前端组件,是一个命令行工具,用于发出对磁盘进行加密解密的指令。

· 加密技术有文件级别的加密和磁盘级别的加密:

文件级别的加密只是基于操作系统对文件进行加密,可以将文件从磁盘中读出来或取得系统的管理员权限从而打开文件。

磁盘级别的加密会对磁盘中的数据进行加密,要想查看得要有证书或秘钥,更安全。(windows的磁盘加密软件bitlocker)

2、linux系统下制作启动U盘:

1)、将插入的U盘映射到虚拟机中。

2)、将kali linux中的iso文件用unetbootin抽取拷贝到U盘中。

3)、或者使用块复制将iso文件抽取拷贝到U盘中:先卸载删除U盘中的分区(使用工具GParted),再将iso文件抽取拷贝到U盘(dd if=kali-linux-2018.2-amd64.iso of=/dev/sdb bs=1M)。

· if指定输入文件,of指定输出文件,bs指定一次复制的块的大小。

· dd复制iso文件看不到进度,使用命令:watch -n 5 killall -USR1 dd,每五秒输出一次dd复制的进度。

3、为U盘创建额外分区,使用LUKS加密分区,打开并格式化加密分区并设置卷标,挂载加密分区,添加配置文件persistence.conf。

· 创建额外分区使用工具parted:

· print devices:查看现在系统中插入的设备情况。

· select /dev/sdb:选中设备,对其分区。

· print:查看当前设备分区情况。

· mkpart primary 3063(起始位置) 7063(终止位置):给设备新建了一个约4G的主分区。

· 使用LUKS加密分区:

· cryptsetup –verbose –verify-passphrase luksFormat /dev/sdb3:对设备的第三分区进行磁盘加密。

· 输入磁盘加密的保护密码。

· 格式化加密分区并设置卷标:

· cryptsetup luksOpen /dev/sdb3 usb:打开加密分区,将他挂载到/dev/mapper/usb目录下,要输入保护密码。

· mkfs.ext4 /dev/mapper/usb:对加密分区进行格式化。

· e2label /dev/mapper/usb persistence:为加密分区设置卷标,卷标名为persistence。

· 挂载加密分区:

· mount /dev/mapper/usb /mnt/usb/:将设备挂载到/mnt/usb目录下,linux访问一个设备要将其挂载到一个目录中,访问这个目录就是在访问这个设备。

· 添加配置文件:

· echo “/ union” > /mnt/usb/persistence.conf:这个配置文件将在usb以持久加密模式启动系统时被读取,以确认这个分区就是要存放加密信息的分区。

4、卸载设备,关闭加密分区:umount /dev/mapper/usb & cryptsetup luksClose /dev/mapper/usb。

5、U盘配置成功,以后可以用这个U盘打开持久加密的kali linux系统了。

Kali linux环境

一、kali linux目录结构

1、系统界面设置工具:gnome-tweaks

2、监视网络流量的工具:nethogs

3、目录结构(使用FHS目录结构):文件根据自己的类型放在对应的目录下。

1)、/bin:存放所有用户都可以使用的程序目录。

2)、/boot:存放系统内核及引导程序的目录。

3)、/dev:存放设备文件的目录。

4)、/etc:存放配置文件的目录。

5)、/home:其他用户家目录所在的目录。

6)、/lib:存放库文件的目录。

7)、/lib64:存放64位库文件的目录。

8)、/live-build:build自己kali版本时使用的目录。

9)、/live+found:系统崩溃退出时存放丢失文件的目录。

10)、/media:默认挂载外接存储的目录。

11)、/mnt:以前的默认挂载外接存储的目录。

12)、/opt:存放一些应用程序的目录。

13)、/proc:是系统启动时临时生成的目录,是内存的映射,用于存放系统的运行配置参数。

14)、/root:root用户的家目录。

15)、/sbin:存放管理员才有权限使用的程序目录。

16)、/selinux:linux的安全机制目录。

17)、/tmp:存放临时文件的目录。

18)、/usr:存放用户自己安装的软件目录,里面自成框架。

19)、/var:存放经常变化的文件目录,例如邮件日志等。

二、kali linux常用命令

1、linux是基于命令行的,图形化桌面环境有gnome、KDE等。

· linux的命令行解释器是bash。

2、常用的bash命令:

1)、ls:显示当前目录的所有文件,蓝色表示目录,白色表示文件,绿色表示可执行文件,红色表示压缩包文件。

· 常用参数有-lhra,–sort=size/time。

2)、cd:切换目录。

3)、pwd:查看当前目录路径。

4)、cat:查看文件内容,会将文件内容全部打印。

5)、more:查看文件内容,一次只显示一部分内容,会在左下角显示已显示内容的百分比。

6)、less:查看文件内容,一次只显示一部分内容。

7)、tail:从尾部显示文件内容。

· 常用参数有-n,

· 常和watch配合使用:watch -n 2 tail -20 /var/log/messages(每两秒检查一次日志,有变化则更新)

8)、cp:复制文件。

· 复制目录加-r。

9)、rm:删除文件。

· 删除目录加-r。

10)、top:监视系统性能的命令。

· 可以kill pid来删除指定id的进程。

11)、ps:查看系统进程信息。

· ps -ef:查看系统进程信息,包含开启的命令、pid、ppid等。

· ps aux:查看系统进程信息,包含开启的命令、pid、cpu使用率、内存使用率。

12)、grep:过滤文本内容(按行过滤)。

13)、ifconfig:查看网卡信息。

· 临时修改网卡的mac地址:ifconfig eth0 down(关闭网卡)—>macchanger -m 00:11:11:11:11:11 eth0—>ifconfig eth0 up

14)、netstat:查看系统的网络情况。

· netstat -pantu:查看和系统建立tcp/udp连接的情况。

15)、uniq:将相同的行合并。

16)、mount:查看系统挂载情况。

· mount -o loop kali.iso /media/cdrom:将外部设备或网络文件夹挂载到/media/cdrom目录下。

17)、dmesg:查看系统最新日志,和tail /var/log/messages显示一样。

18)、find:查找文件或目录的位置。

· find / -name “nmap”:从根目录开始查找名为nmap的文件或目录。

· find / -iname “nmap”:从根目录开始查找名为nmap的文件或目录,不区分大小写。

· find / -name “nmap” -exec cp {} /tmp/ \;:从根目录开始查找名为nmap的文件或目录,并将之复制到/tmp/目录下。

19)、whereis:查找软件的位置,范围有限。

· whereis -b nmap:查找二进制格式的nmap的位置。

· 通过apt-get等包管理工具安装软件的路径都会放入本地的一个数据库中,whereis就是通过这个数据库查找软件的位置。

· 如果才安装了软件,需要更新数据库:updatedb,就可以用whereis查到了。

· 如果软件是通过源码安装,软件的路径不会写进数据库中,通过whereis查不到。

20)、echo:打印一行文本。

· -n表示打印文本不换行。

21)、vi:linux中的文本编辑器。

命令模式:dd表示删除一行,o表示在光标位置插入空行(后面的行下移),u表示撤回上一步编辑,y表示复制当前行,p表示将复制的行粘贴到光标所在行(后面的行下移),i表示进入编辑模式,/表示查找指定文本内容,:wq表示保存退出,:q表示不保存退出,:q!表示强制退出,:wq!表示强制保存退出。

三、关于shell脚本

1、一次执行多条命令的符号:

1)、|:将前面命令的输出作为后面命令的输入。

2)、&:依次执行前后的命令。

3)、&&:先执行前面的命令,执行成功了才执行后面的命令。

4)、||:前面的命令执行失败才执行后面的命令。

2、shell脚本编写:

1)、打印输入内容:

!/bin/bash #该脚本使用/bin/bash解释器执行

echo -n “IP: ” #打印文本不换行

read ip #用参数ip接收输入数据

echo “Your ip is: $ip” #打印文本

2)、打印99乘法表:

image.png

3)、检测某一网段能够ping的IP:

image.png

4)、检测文件中的ip地址下面的端口是否开启:

这里写图片描述



版权声明:本文为anquanniu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。