九零登录

[【通过】] ettercap之mysql中间人攻击

[复制链接]
发表于 2017-5-26 15:16:03 | 显示全部楼层 |阅读模式
本帖最后由 evi1ox 于 2017-5-31 14:34 编辑

ettercap之mysql中间人攻击[一]
0x01 工具
系统:kali linux
数据库:mysql | mssql
中间人:ettercap
0x02 起因
执行select @@version; 用wireshark抓包截取明文
获取结果:
http://oq4ris5sp.bkt.clouddn.com/wireshark2.png
http://oq4ris5sp.bkt.clouddn.com/wireshark2.png
数据库的执行语句和执行结果都明文进行传输,那么在内网是不是可以直接arp抓包获取客户端登陆的密码
(客户端登陆的请求可不止有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/SQLmitm_2017-0520.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_2017-0520.png
可以看到product表里面有三个字段。构造一个基本的查询语句(方便对比)
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_2017-05_-20.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_2017-05_-20.png
找到ProductName为“ProductZero”的数据。服务器只返回一个匹配的条目。然后启动sqlmitm.py脚本来构造恶意攻击语句。
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_1.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_1.png
如上图所示,脚本使用的是我指定的select代替别的select来查询,这样就说明无论从数据库查询什么。服务器都会执行我构造的SELECT * FROM Products WHERE ProductName = ‘Productone’这段语句。
http://oq4ris5sp.bkt.clouddn.com/SQLmitm2.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm2.png
Mysql Attack
和mssql一样。创建个简单的数据库
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_4.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_4.png
在输出中我们看到脚本匹配了SELECT,并替换成了SELECT * FROM Products WHERE ProductID = 2
Oracle Attack
我们先查看数据库
同理 Postgresql也是一样的。
继续深入
以上都是一些简单的查询语句,那么这样怎么运用到实际的内网里呢??一条命令一条命令攻击。而且多条命令执行错误也会让管理员起疑心吧。是否可以创建mysql账户。那我们直接管理数据库。
首先我们创建数据库用户。
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_9.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_9.png
创建一个名为『anitian』的用户,并允许从任何地方登录。密码是hacked。运行mitm脚本后,返回MySQL客户端并执行其他的SELECT查询。
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_10.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_10.png
接下来,我们必须向anitian提升权限。这个就不多说了。没权限连select查询都是拒绝的,我们赋予anitian对所有数据库的操作权限。
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_12.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_12.png
没有返回任何错误,很有可能命令成功执行了。最后我们刷新MySQL服务器权限。
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_13.png
http://oq4ris5sp.bkt.clouddn.com/SQLmitm_13.png
运行最后一个SELECT查询////管理员估计想哭了吧。执行这么多语句都是query ok

防护
一、这个脚本仅限于没有加密的数据连接,这样的话可以使用无效证书中断加密。因此,避免SQL MITM攻击的最简单方法是要求对所有SQL流量和证书验证进行加密。
二、要始终遵循最低特权原则。远程帐户应仅限于访问。管理员必须做一些非常严格的控制

评分

参与人数 2酒票 +6 收起 理由
Maple + 1 感谢分享
管理05 + 5 欢迎加入90!

查看全部评分

发表于 2017-5-26 16:58:41 | 显示全部楼层
对这类的文章一直都挺感兴趣
发表于 2017-5-26 19:58:03 | 显示全部楼层
如果权限大,直接加个mysql帐号进去可以么?
 楼主| 发表于 2017-5-26 20:22:50 | 显示全部楼层

RE: ettercap之mysql中间人攻击

本帖最后由 evi1ox 于 2017-5-26 20:31 编辑
80uncle 发表于 2017-5-26 19:58
如果权限大,直接加个mysql帐号进去可以么?


是的,但是有2个问题。一是运维用的是低权限的账户来管理数据库,二是成功几率跟管理的意识水平挂钩的。连续多次的命令没有正确回显,估计管理想哭。也会察觉出问题。
 楼主| 发表于 2017-5-26 23:41:28 | 显示全部楼层

RE: ettercap之mysql中间人攻击

Joseph 发表于 2017-5-26 16:58
对这类的文章一直都挺感兴趣

表哥。请问下90有官方微信公众号吗
发表于 2017-5-27 09:16:00 | 显示全部楼层

RE: ettercap之mysql中间人攻击

evi1ox 发表于 2017-5-26 23:41
表哥。请问下90有官方微信公众号吗

没有啊!90是无90收入经营0.0,如果再搞公众号就更废精神
发表于 2017-5-27 19:15:16 | 显示全部楼层
win系统下有没有什么工具
 楼主| 发表于 2017-5-28 21:35:03 | 显示全部楼层

RE: ettercap之mysql中间人攻击

playwind 发表于 2017-5-27 19:15
win系统下有没有什么工具

暂时没有尝试过。都是在linux下测试的 。
发表于 2017-5-30 05:11:39 | 显示全部楼层
感谢分享,思路清晰,没想到这一查, 学习了!
发表于 2017-5-30 16:18:17 | 显示全部楼层
好厉害!!
发表于 2017-6-1 23:27:01 | 显示全部楼层
逗,你居然也来了
下次加上学习的链接地址。。。

九零

GMT+8, 2026-10-22 13:20

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表