架构师的成长之路初片~kill扫描
云盘链接:https://pan.baidu.com/s/1W0T0PNC7t4s23xGa_7MbMg 提取码:lyoe
1)基本用法
基本用法:
# nmap [扫描类型] [选项] <扫描目标 ...>
#常用的扫描类型
# -sS,TCP SYN扫描(半开)
# -sT,TCP 连接扫描(全开)
# -sU,UDP扫描
# -sP,ICMP扫描
# -A,目标系统全面分析
2)检查192.168.4.11主机是否可以ping通
[root@prometheus ~]# yum -y install nmap //(如果没有nmap工具,可以安装)
[root@prometheus ~]# nmap -sP 192.168.4.11
[root@prometheus ~]# nmap -sP -n 192.168.4.11
(-n 无需进行DNS解析)
3)检查192.168.4.0/24网段内哪些主机可以ping通
[root@prometheus ~]# nmap -sP -n 192.168.4.0/24
4)检查目标主机所开启的TCP服务(如果不指定端口,将扫描所有端口)
[root@prometheus ~]# nmap -sT -n 192.168.4.11
[root@prometheus ~]# nmap -sT -n 192.168.4.0/25
5)检查192.168.4.0/24网段内哪些主机开启了FTP、SSH服务(-p 指定端口)
[root@prometheus ~]# nmap -sT -n -p 21-22 192.168.4.11
....
PORT STATE SERVICE
21/tcp closed ftp
22/tcp open ssh
[root@prometheus ~]# nmap -sT -n -p 80 192.168.4.11
[root@prometheus ~]# nmap -sT -n -p 21,22,80,3306 192.168.4.11
[root@prometheus ~]# nmap -n -p 80 192.168.4.11
(默认使用的扫描类型为-sT)
6)检查目标主机所开启的UDP服务
[root@prometheus ~]# nmap -sU 192.168.4.11 //指定-sU扫描UDP(花费时间较长)
[root@prometheus ~]# nmap -sU -n -p 80 192.168.4.11
7)全面分析目标主机192.168.4.11和192.168.4.10的操作系统信息
[root@prometheus ~]# nmap -A -n 192.168.4.11
[root@prometheus ~]# nmap -A -n 192.168.4.11,10
二:使用nmap执行脚本扫描
nmap提功了强大的脚本引擎NSE,增强nmap的扫描能力。
相关脚本存放目录:/usr/share/nmap/scripts/
1)准备一台Vsftpd服务器(192.168.4.11主机操作)
[root@node1 ~]# yum -y install vsftpd
[root@node1 ~]# systemctl restart vsftpd
[root@node1 ~]# useradd tom
[root@node1 ~]# echo 123 | passwd --stdin tom
2)FTP相关扫描脚本
#匿名访问扫描
[root@prometheus ~]# nmap --script=ftp-anon.nse 192.168.4.11 -p 21
[root@prometheus ~]# nmap --script-help=ftp-anon.nse //查看脚本的帮助信息
#扫描ftp软件相关信息(如版本号,是否有带宽限制,超时时间等)
[root@localhost scripts]# nmap --script=ftp-syst.nse 192.168.4.11 -p 21
......
No Session bandwidth limit
[root@localhost scripts]# echo "anon_max_rate=500000" >> /etc/vsftpd/vsftpd.conf //带宽限制
[root@localhost scripts]# systemctl restart vsftpd
[root@localhost scripts]# nmap --script=ftp-syst.nse 192.168.4.11 -p 21 //(此次输出内容是有贷款限速的提示。)
#后门扫描
[root@localhost scripts]#nmap --script=ftp-vsftpd-backdoor.nse 172.40.50.120 -p 21
#暴力破解密码
[root@prometheus ~]# cat /tmp/user.list
haha
xixi
lele
lihan
tom
luofei
[root@prometheus ~]# cat /tmp/pass.list
123456
qwert
asdf
zxcv
123
[root@prometheus ~]# nmap --script=ftp-brute.nse --script-args userdb=/tmp/user.list,passdb=/tmp/pass.list 192.168.4.11 -p 21
3)SSH相关扫描(在kali主机操作)
$ cat /tmp/a
aa
haha
$ cat /tmp/b
123
456
$nmap --script=ssh-brute.nse --script-args userdb=/tmp/a,passdb=/tmp/b 192.168.4.11 -p 22
[目标主机]# tail /var/log/secure #查看日志
4)HTTP相关扫描(kali主机操作)4.11主机中要使用httpd网站服务。
#请求方法扫描(如get,post,header等)
[root@prometheus ~]# nmap -n --script=http-methods.nse 192.168.4.11 -p 80
SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
6)暴力破解密码(kali主机操作) KVM的同学,给Kali主机配置好IP(192.168.4.40),并且修改配置文件,即可实现从真机远程连接Kali主机。 $ sudo echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config //允许密码登录 $ sudo echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config //允许密码认证登录 $ sudo /etc/init.d/ssh restart [root@localhost ~]# ssh kali@192.168.4.40
_____解傻瓜式密码________ $ sudo john --single /etc/shadow // #破解傻瓜式密码 [sudo] kali 的密码: //输入kali用户的密码(kali) $ sudo john --show /etc/shadow //#显示破解的密码 kali:kali:18597:0:99999:7::: ———字典暴力破解——— $ sudo john /etc/shadow 字典暴力破解(随时ctrl+c终止) $ sudo john --show /etc/shadow //#显示破解的密码 kali:kali:18597:0:99999:7::: ————自定义密码本破解—————— $ sudo useradd haha $ sudo passwd haha $ cat /tmp/pass.txt //自己编写密码本 123 456 asv haha kali $ sudo john --wordlist=/tmp/pass.txt /etc/shadow //#使用自定义密码本破解 $ sudo john --show /etc/shadow //#显示破解的密码
三、tcpdump分析
[root@prometheus ~]#yum -y install tcpdump
-i,指定监控的网络接口(默认监听第一个网卡)
-A,转换为 ACSII 码,以方便阅读
[root@prometheus ~]# tcpdump -i ens160 -A //抓取en160网卡的数据包(不想抓取可以按ctrl+c结束。)
-w,将数据包信息保存到指定文件
-r,从指定文件读取数据包信息
[root@prometheus ~]# tcpdump -i ens160 -A
[root@prometheus ~]# tcpdump -A -r a.txt
使用tcpdump分析FTP访问中的明文交换信息
prometheus主机:192.168.4.10
node1主机:192.168.4.11
[root@node1 ~]# yum -y install vsftpd
[root@node1 ~]# systemctl restart vsftpd
(要确保node1主机上的防火墙是关闭的。)
[root@node1 ~]# useradd tom
[root@node1 ~]# echo 123 | passwd --stdin tom
[root@prometheus ~]# tcpdump -i ens160 -A host 192.168.4.11 and tcp port 21
另开一个终端
[root@prometheus ~]# ftp 192.168.4.11 //模拟客户端进行登录,输入用户名和密码。
[root@prometheus ~]# tcpdump -A -r a.cap | grep -E 'USER|PASS'
Wireshark:是一个网络包分析软件。(带有图形)
二、优化Nginx服务的安全配置
1) 修改版本信息,并隐藏具体的版本号
默认Nginx会显示版本信息以及具体的版本号,这些信息给攻击者带来了便利性,便于他们找到具体版本的漏洞。(浏览器中按F12,可以进入开发者模式。点击网络,访问网址,可以看到请求的内容。)
如果需要屏蔽版本号信息,执行如下操作,可以隐藏版本号。
搭建好Nginx服务,并启动: [root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf … … http{ server_tokens off; #在http下面手动添加这么一行 … … } [root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload [root@node1 ~]# echo 123 > /usr/local/nginx/html/index.html [root@prometheus ~]# curl -I http://192.168.4.11 #查看服务器响应的头部信息
2) 限制并发量
DDOS攻击者会发送大量的并发连接,占用服务器资源(包括连接数、带宽等),这样会导致正常用户处于等待或无法访问服务器的状态。
Nginx提供了一个ngx_http_limit_req_module模块(该模块默认已经安装),可以有效降低DDOS攻击的风险,操作方法如下:
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf … … http{ … … limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name localhost; limit_req zone=one burst=5; } } #备注说明: #limit_req_zone语法格式如下: #limit_req_zone key zone=name:size rate=rate; #上面案例中是将客户端IP信息存储名称为one的共享内存,内存空间为10M #1M可以存储8千个IP信息,10M可以存储8万个主机连接的状态,容量可以根据需要任意调整 #每秒中仅接受1个请求,多余的放入漏斗 #漏斗超过5个则报错 [root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload 客户端使用ab测试软件测试效果: [root@prometheus ~]# ab -c 100 -n 100 http://192.168.4.5/
3) 拒绝非法的请求
[root@prometheus ~]# curl http://192.168.4.11 //不加任何选项,看到的是网页内容 [root@prometheus ~]# curl -I http://192.168.4.11 //-I 看数据包的头部信息 [root@prometheus ~]# curl -i http://192.168.4.11 //既有数据包的头部信息又有网页的内容。 [root@prometheus ~]# curl -i -X HEAD http://192.168.4.11 //只有数据包的头部信息(HEAD请求) [root@prometheus ~]# curl -i -X GET http://192.168.4.11 //既有数据包的头部信息又有网页的内容(GET请求)
通过如下设置可以让Nginx拒绝非法的请求方法:
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf http{ server { listen 80; #这里,!符号表示对正则取反,~符号是正则匹配符号 #如果用户使用非GET或POST方法访问网站,则retrun返回错误信息 if ($request_method !~ ^(GET|POST)$ ) { return 444; } } } [root@node1 ~]# /usr/local/nginx/sbin/nginx -s reload
测试
[root@prometheus ~]# curl -i -X GET http://192.168.4.11 //正常 [root@prometheus ~]# curl -i -X HEAD http://192.168.4.11 //失败