渗透测试流程以及相关工具

微信搜索我吃你家米了关注公众号

在这里插入图片描述

友链

参考书籍

靶机 提取码rr06

前期信息搜集阶段

httrack

拷贝目标网站静态资源,本地浏览,避免在对方网站上留下过多的指纹

google-hacking

theHarvester

目标邮箱以及子域名搜集工具

NETCRAFT

一个网站,可以直接在该网站上输入目标网址,之后该网站会给出目标网址的详细信息

从目标的DNS获取信息

dig尝试区域传送

dig @192.168.1.23example.com et AXFR

192.168.1.23example.com,IP为DNS服务器的IP,后面紧跟目标的域名

fierce 针对DNS服务器进行子域名爆破

如果区域传送失败,可以使用fierce针对目标DNS服务器进行子域名爆破操作

./fierce.pl -dns trustedsec.com

在Debian发行版上可直接安装

apt-get install fierce

从目标的邮件服务器搜集信息(该方式可能已经过时

向目标邮箱发送包含有可执行文件的邮件,这样会导致目标邮箱服务器发送邮件拒收消息,从而可以获取到目标邮服的相关信息

metagoofil 元数据提取工具

./metagoofil.py -d syngress.com -t pdf,doc,xls,pptx -n 20
-o files ef results.html

-d 指定目标域名

-t 指定搜集的文档类型

-n 指定每种文档类型搜集的数量上限

-o 指定报告生成位置

threatagent 信息搜集集成工具(网站已经挂了

该工具集成了多种信息搜集方式

社工

信息聚合

FOCA

SearchDiggity

Maltego

Swiss Army Knife Internet Tool

扫描

nmap

最常用的扫描参数,禁ping并扫描所有端口

nmap -sT -p- -Pn 192.168.18.132

-p-表示扫描所有端口

-sT表示向目标的端口建立完整的TCP连接,也就是说会完成三次握手的过程。

-s后面的字母用于指示nmap使用什么类型的扫描方式,T表示使用TCP扫描

最后的参数是我们要扫描的目标,如果我们需要批量扫描,**且目标的IP并非连续的,**那么可以将目标按行分割放进一个txt文件中,然后使用-iL选项来指定我们用于存放目标的文件,或者我们需要扫描一个网段,则我们可以直接以192.168.12.0/24的形式来表示192.168.12.0这个C段,或者我们不想扫描整个网段,而只是该网段内的一部分主机,那么我们可以以192.168.122.12-123的形式来指示nmap扫描192.168.12.12至192.168.12.123之间的这些主机,包括192.168.12.12192.168.12.123

使用nmap的SYN扫描

SYN扫描方式是nmap的默认扫描方式

SYN扫描相比TCP扫描更受欢迎,一方面它比TCP扫描要快,另一方面,相较于TCP扫描,SYN扫描不容易引起目标服务的崩溃,SYN扫描比TCP扫描快的原因是,TCP完成了三次握手,而SYN扫描只完成了前两次握手过程,在前两次握手阶段,SYN扫描和TCP扫描是一样的,不同的地方是,当服务端向我们发送完SYN/ACK包之后,TCP扫描会再向服务端发送一个ACK包,而SYN扫描直接发送了一个RST包,重置了连接,服务端接收到RST包后,会忽略我们之前发送给的它的包,并直接丢弃与我们建立的连接,这样一来,SYN扫描就比TCP扫描少发送了很多包,因为SYN扫描不需要再进行TCP的四次挥手来断开TCP连接。

这里有一个形象的比喻,SYN扫描就像是给某个人打电话,当对方接起电话说了一句HELLO之后,我们二话不说直接就把电话挂掉了,并且此时我们依然是可以确认对方是存活的,因为他接起了电话。

SYN扫描的另一个优势是,相对于TCP扫描,它更安静,因为SYN扫描并没有建立一个完整的TCP连接,这对于大部分的应用来说,这种连接活动是不会被记录到应用的日志中的,但是我们要注意的是,现在的一些防火墙和IDS(入侵检测系统)都会将SYN扫描记录下来的。

指定nmap使用SYN扫描的方式就是不指定任何扫描方式,因为SYN扫描是默认方式,如果你非得使用-s选项进行指定,那么你应该这样写:
nmap -sS -p- -Pn 192.168.18.132

S表示SYN扫描方式

使用nmap实施UDP扫描

新手pentester最容易忽视的就是他们从来不进行UDP扫描,不进行UDP扫描,就像你看书只是看了一个梗概,你了解了故事的大致内容,却忽视了一些细节。

刚刚我们将TCP比作打电话,那么UDP就像是往一个邮箱里投递一个邮件,他只负责将数据包送过去,至于最后你到底收没收到邮箱里的信件,他是不关心的,也就是说发信者不会收到任何来自接收者的反馈,发信者无法保证自己写的信的确是交付到了收信人那里

不要小瞧了UDP,并不是所有的服务都是使用TCP的,比如最常见的DHCP、DNS、SNMP(简单网络管理协议)以及TFTP使用的就是UDP协议,对于PenTester而言,最重要的一个品质就是缜密的思维,如果你因为没有进行UDP端口扫描而错过了一个漏洞,那可真是有够尴尬的。

执行UDP扫描的命令如下:

nmap -sU 192.168.18.132

和上面一样,我们依然使用-s选项来指定扫描方式,与上面不同的地方是没有了-p--Pn选项,这里的原因是UDP扫描非常慢,我们需要通过ping检查存活主机并缩小扫描端口的数量来尽可能地加快扫描进度。

上面我们说过,发信者不会受到任何反馈,那么nmap是如何确定对方的UDP端口是否处于开放状态的呢?

在一些很少见得到场景下,UDP服务可能会向发送者返回一个响应包,在这种情况下nmap会直接将该端口标记为open

上面我们提到过,很多pentester都会忽略UDP扫描,其中很大的一部分原因是nmap无法给出一个确切的答案来表示对方的UDP端口是否处于开启或者关闭状态,基本上显示的端口状态都是filtered,扫描了一堆目标,结果都显示的是一样的,全部是filtered,这样不免会令人有些失望,不过,我们还是有一线生机的,我们可以添加**-sV**选项,该选项会告知我们对方端口上运行的服务的版本信息,如果我们能得到版本信息,那么说明该端口就是出于开放状态的,指定了版本扫描之后,nmap就会向对方的UDP端口发送精心构造过的数据包,这些数据包可以有效地让对方服务向我们发送数据包,命令如下:

nmap -sUV 172.16.45.135

说课这么多,总结下来就是一句话,如果我们想使用UDP扫描,就必须加上版本扫描,不然我们几乎无法确定对方的UDP端口是否处于开放状态。

使用nmap执行XMAS扫描

XMAS的名字来源于,TCP包中的FINPSHURG标志位都被设置为了1,英语中有个俗语是lit up like a Christmas tree

He checked the instrument panel; suddenly the board lit up like a Christmas tree. 

她检查了仪表板;突然控制面板像圣诞树一样亮了。

就是说这些标志位像圣诞树上的灯一样都亮了起来,XMAS就是Christmas,很明显,这种包是不正常的,因为SYN或者ACK标志位没有被设置为1,但是我们可以利用这种数据包来判断对方端口的状态。

根据TCP的RFC文档,如果一个关闭的端口接收到了一个TCP包,该包的ACK、SYN、RST这三个标志位全部都没有被设置,就像我们上面说的XMAS tree包一样,那么该端口将会向我们发回来一个RST包,如果我们收到了RST包,那么我们就可以判断出该端口是处于关闭状态的,如果该端口是处于开启状态,那么将会直接忽略我们发送那个过去的Xmax tree包,也就是说,这种扫描方式会把没反应的端口判断为开启状态,由于防火墙的存在,所以我们看到的结果是下面这样子的
在这里插入图片描述

nmap没办法保证该端口是被过滤了还是真正是开启状态

只有完全按照TCP的RFC文档实现的操作系统,我们才能使用Xmas tree扫描方式,就现在的主流操作系统而言,这一招只对unix和linux有用

nmap -sX -p- -Pn 192.168.18.132

X表示采用空扫描

使用nmap执行NULL扫描

NULL扫描和Xmas tree扫描方式恰恰相反,NULL扫描发送的包中没有任何标志位被设置,完全就是空的

目标系统对NULL扫描和Xmas tree扫描的响应方式是一致的,关闭端口发送RST响应,开启端口没反应

对于上面这两种扫描方式,只有当目标操作系统按照TCP的RFC100%实现的才是有作用的

刚才我使用这种扫描方式扫描了一下百度,全部都是filtered,看来是直接把所有包都给我直接忽略了,可能是检测到了nmap数据包的特征,因为我单独指定关闭的端口(telnet检测关闭的端口)进行扫描,返回结果依然是open | filtered

上面这两种扫描方式的优点在于,我们之前使用的TCP扫描,很容易被防火墙过滤掉,防火墙会拦截进来的SYN包,这样一来我们的扫描方式就无效了,因为TCP连接将无法建立(读到这里我有点迷,无法建立TCP连接,那他自己正常的服务还怎么用啊),使用Xmas tree、NULL扫描可以绕过这种限制,因为我们没有建立TCP连接(而且就算我们扫出来了开放的端口,如果建立不了TCP连接,又有啥用

空扫描的命令行

nmap -sN -p- -Pn 192.168.18.132

nmap nse脚本引擎

可以说NSE脚本是nmap的一个很强大的扩展,他使得nmap拥有了诸如漏洞扫描、后门检测、高级网络探测甚至是漏洞利用的功能

NSE脚本根据其功能进行了分类,其中涵盖了爆破、认证、广播、默认密码、发现、DOS、漏洞利用等等功能

NSE文档

nmap --script banner 192.168.18.132

banner脚本会将对方端口发送过来的任何信息都直接打印到终端中,类似于telnet的输出

漏洞扫描脚本

nmap --script vuln 192.168.18.132

nmap的一些额外选项

-T 该选项用于设置nmap的扫描速度
降低扫描速度可以帮助我们避免被发现

速度越快,nmap扫描的精准度就会随之下降

-O选项用于探测目标操作系统类型,扫描操作系统类型有时候是很有用的,如果你知道对方的操作系统是linux,那么你就不必再使用针对windows的漏洞去扫描这台主机了

漏洞扫描

NESSUS

OPENVAS

第二个是开源的,第一个是收费的,免费版只支持扫描16个IP,非常有限。

漏洞利用

美杜莎 (Medusa)密码爆破

相似工具,九头蛇(海德拉)HYDRA

medusa主要用于在线爆破服务密码(ssh、telnet、rlogin)

我们可以结合前期信息搜集到的用户名,邮箱地址等做成字典,然后再结合我们平常积累的密码字典进行爆破

但是现在的很多服务都具有密码错误次数限制措施,错的太多的话,我们的攻击ip可能会被blocked

Medusa的特点是同时进行多组用户名和密码的爆破尝试,Medusa可以爆破各种服务,包括web表单

kali中自带的字典:/usr/share/wordlists以及/usr/share/john/password.lst

对于密码字典,大并非总是好,像JhonTheRipper这种离线密码破解工具,每秒可以处理上百万的密码,但是Medusa和Hydra就不行,因为他们需要和目标服务进行交互,所花的时间可能是我们根本无法接受的。

对于Medusa这种工具,最好使用精简版的字典

光有密码字典是不够的,我们还需要准备好用户名字典,用户名可以从我们前期搜集到的邮箱的@前缀组成。

美杜莎用法:

medusa -h target_ip -u username -P path_to_password_dictionary -M authentication_service_to_attack

-u指定单个用户名
-U指定用户名列表

-p指定单个密码
-P用于指定密码列表

-M指定我们想要爆破的服务

一个例子

medusa -h 192.168.18.132 -u ownedb -P /usr/share/john/password.lst -M ssh

METASPLOIT

开源漏洞利用框架

注意,她只是一个框架,具有非常强大的扩展性

她负责指定开发标准,开发者们按照这个标准去开发出各种payload和拓展

JTR John The Ripper

安装johntheripper

有着密码破解之王的称号

我们做黑客的是不可能绕过密码破解这个话题的

JTR的强大之处,在于它可以离线破解hash

因为现在大部分的系统都不会直接以明文形式存储用户的密码

其实JTR破解哈希的方式很简单

尝试各种明文,将其使用同样的hash算法进行hash,然年比较和我们获取到的hash是否相同,相同则说明该明文就是从目标系统获取到的hash对应的明文

本地密码破解

我们以windows的本地hash为例

参看这篇文章

linux的密码破解

/etc/shadow和/etc/passwd

将这两个文件使用jtr的unshadow命令结合生成hash文件

msfadmin@metasploitable:~$ unshadow /etc/passwd /etc/shadow > /tmp/linux_hashes.txt
The program 'unshadow' is currently not installed.  You can install it by typing:
sudo apt-get install john
-bash: unshadow: command not found

前提是你攻击的linux主机上已经安装了JTR,这一点基本上是不可能的

如果你直接拥有root权限,那么你就可以直接使用shadow中的文件结合jtr进行破解
下面是我们在metasploitabel靶机中做的实验

123就是我们从靶机中拷贝出来的/etc/shadow

C:\Users\19856\Desktop\john-1.9.0-jumbo-1-win64\run>john.exe --wordlist=password.lst 123
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-opencl"
Use the "--format=md5crypt-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 7 password hashes with 7 different salts (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
msfadmin         (msfadmin)
123456789        (klog)
batman           (sys)
service          (service)
4g 0:00:00:00 DONE (2020-02-14 13:32) 65.57g/s 58147p/s 224803c/s 224803C/s mobydick..sss
Use the "--show" option to display all of the cracked passwords reliably
Session completed

查看破解出来的密码

C:\Users\19856\Desktop\john-1.9.0-jumbo-1-win64\run>john --show 123
sys:batman:14742:0:99999:7:::
klog:123456789:14742:0:99999:7:::
msfadmin:msfadmin:14684:0:99999:7:::
service:service:14715:0:99999:7:::

4 password hashes cracked, 3 left

密码重置 building and wrecking ball

感觉这个没啥卵用,因为需要对目标机器有物理访问权限

这个密码重置操作主要是通过kali linux的live CD完成的

kali上面有一个这个工具chntpw

chntpw ei /mnt/sda1/WINDOWS/system32/config/SAM

使用kali live模式,挂载Windows的SAM文件所在的磁盘(fdisk -l查看),然后执行上述命令

wireshark 网络嗅探

另一种获得远程主机权限的技术手段就是网络嗅探

所谓网络嗅探就是在网络中捕捉网络数据包并查看其中的内容的过程

在现在的网络环境中,仍然不乏有直接不加密就传输数据的应用

一般情况下,我们的网卡都是非混杂模式的,非混杂模式下的网卡只会接受目的地址是自己的网络数据包,只有网络接口卡(NIC)检测到目的地址是指向自己的时候,才会将数据包发送给CPU进行处理,对于目的地址和自己不符合的则会直接丢弃

做一个形象的比喻,非混杂模式下的网卡就像是影院的售票员,他只会把来自己电影院看电影的人的票给收走

相反的,混杂模式会将所有达到自己主机的数据包接受下来,所有的数据包都会被发送给CPU进行处理,不管该数据包是不是发送给自己的

进行网络嗅探,我们就必须把网卡设置成混杂模式

你可能会好奇,混杂模式下的网卡是怎么接收到目的地不是自己的网络数据包的,其实这里有两种情况,一种是广播数据包,另一种是设备是通过集线器连接起来的,学过网络设备的人都知道,集线器是不会分割冲突域

MACOF

不用米也能做饭

上面我们介绍了集线器和交换机的区别,就是交换机可以分割广播域,而集线器是不可以的,那么我们有没有什么办法可以让交换机表现得像集线器呢?答案就是使用一个叫做MACOF的工具

交换机和集线器最大的区别就是,交换机会把MAC地址注册到相应的端口上,它拥有自动学习机制

交换机会在自己的内存中保存一份MAC地址表,上面存储着端口编号和MAC地址的对应关系

通过使用伪造的MAC地址来干扰交换机的的MAC表,会使得交换机无法决定正确的数据包走向

交换机的机制是,如果找不到正确的MAC地址和端口对应关系,则会直接选择广播数据包

这样一来,交换机就回归到了集线器的工作模式

其实这种实验我们自己在家里都能做,普通的家用无线路由器都是一个wan口,四个lan口,这四个lan口其实就是隐藏在无线路由器中的交换机的四个lan口

但是有种交换机的机制和上面的正好相反,如果找不到正确的对应关系,他会选择直接丢弃数据包
但是这样容易造成内网得到拒绝服务,所以这样的交换机依然存在漏洞

kali中自带macof工具

macof -i eth0 -s 192.168.18.130 -d 192.168.18.2

-i指定网卡
-s指定该网卡对应的IP
-d就是我们的目标交换机的IP

macof的缺点就是他会发送成千上万的网络数据包,很容易被检测出来

wireshark诞生于1998,由Gerald Combs开发

ARMITAGE 没啥用,就是metasploit的图形化形式,集成了一些工具

彩虹表相关工具

上面有演示视频,使用GTX680(1536核),爆破长度8以内的NTLM hash,只需几分钟

每秒测试16,000,000个明文字符串对应的hash

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页