惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
月光博客
月光博客
T
Tailwind CSS Blog
小众软件
小众软件
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
B
Blog RSS Feed
博客园 - 司徒正美
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
博客园 - Franky
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - yesry

程序员专用IM新版本发布,诸多创新非模仿 VC的强大 + ExtJS的漂亮 + (MySQL+SQlite)数据库 + JavaScript的动态语言的灵活 通过桥接器,Java调用任何DLL 学生的福音:做错之题管理 Google 和 baidu 搜索结果二次加工 键鼠模拟的妙用 汉编卷土重来? 用贾樟柯访谈评《疯狂的程序员》 Widgets 引擎的设计和实现 Duceland Widgets Engine 例子一 作为软件从业员面对番茄事件的尴尬立场 招聘Windows API 熟悉人 招IE插件精通人 VC调用 JavaScript 难题:如何使当前程序的对象进入脚本 PHP能参与桌面项目吗?适合吗?——C#客户端 嵌入 PHP 一例 互联网公司老板的十大谎言之解——时间成本和竞争成本 我在外资公司的2个月 让大家见识一下新一代分析源代码生成流程图的东东吧 如何进行界面和业务逻辑分开的原型化开发
史上最不安全的浏览器——Dangerous Browser
yesry · 2008-09-10 · via 博客园 - yesry

浏览器市场一向强调安全性。但是安全往往与功能强大是矛盾的。Dangerous Browser 功能强大,但也是最不安全的。Dangerous Browser 可以运行PHP脚本,可以创建标准的 PHP5 内置对象;它可以在后门运行强化后的Javascript,这样的Javascript 可以创建 FileSystemObject 和 OpenTextFile,CreateTextFile 访问本地文件,甚至它可以调用任何 Windows API,去创建标准的 Windows 窗口,完成只有客户端程序才能完成的功能。(下载:本浏览器源码

一、界面

 

二、主要脚本代码

1 PHP 代码 主要功能:创建一个 VCL 的 TForm,在该 Form 中添加一个按钮,为 Form 添加OnClick响应代码,响应效果是使 Caption  的文字为 "Clicking a VCL TForm",为按钮的OnClick响应代码的效果也是改变内容为"Clicking a VCL TButton" 。

class first_class{
    
var $name="php file class";
    
function setName( $n ){
        
$this->name = $n;
    }
    
function sayHello(){
        
print "my name is $this->name<BR>";
    }
}
function OnFormClick($sender) {
    
$sender->Caption="Clicking a VCL TForm";
}
function OnButtonClick($sender) {
    
$sender->Caption="Clicking a VCL TButton";
}
$ds=new dsRE();//call VCL
$ds->UsingClass("TForm");
$form=new TForm(null);
$ds->RegistMethod("OnFormClick",$form,"OnClick");$ds->UsingClass("TButton");
$button=new TButton($form);
$ds->RegistMethod("OnButtonClick",$button,"OnClick");
$button->Left=20;
$button->Top=30;
$button->Width=200;
$button->Parent=$form;
$button->Caption="Button1";$form->Show();
$form->Caption="I am a VCL TForm";$ds->Share($form,"Form1");
$ds->Share($button,"Button1");

2 后门 Javascript 代码 主要功能:调用 Windows API 创建一个标准的 Window,在该 Window 的回调中响应 WM_CREATE 事件调用 MessageBox显示这个窗口的 Window Name。

os_api=new shared_dobject("OSAPI");

function GetWindowText(hWnd)
{
 param
=new dobject("ApiParams");
 
 dvm.Write2Cpp(
"DEBUG",hWnd);
 
 param.AppendHandlePointer(hWnd);
 param.AllocAsciiStringBuffer(
260);
 param.AppendUnsignedLong(
260);
 os_api.CallOSAPI(
null,"GetWindowTextA",param);
 
 ret
=param.ReadAsciiString(4);
 param.Destroy();
 
 
return ret;
}

function MessageBox(hWnd,lpText,lpCaption,uType)
{
 param
=new dobject("ApiParams");
 
 param.AppendHandlePointer(hWnd);
 param.AppendAsciiString(lpText);
 param.AppendAsciiString(lpCaption);
 param.AppendUnsignedLong(uType);
 
return os_api.CallOSAPI(null,"MessageBoxA",param);
 
 param.Destroy();  
}


function MyWndProc(hWnd, message, wParam, lParam)
{
 WM_CREATE
=0x0001;
 
if(message==WM_CREATE)
 
{
  MB_OK
=0x00000000;
  t
=GetWindowText(hWnd);
  MessageBox(hWnd,t,
"Javasript message box!",MB_OK);
 }

 
return 0;
}


function RegisterClassEx(lpwcx)
{
 
return os_api.CallOSAPI(null,"RegisterClassExA",lpwcx);
}


function MyRegisterClassEx()
{
 callback_param
=new dobject("ApiParams");
 callback_param.AppendHandlePointer(0);
 callback_param.AppendUnsignedLong(
0);
 callback_param.AppendUnsignedLong(
0);
 callback_param.AppendUnsignedLong(
0);
 
 js_callback
=new dobject("JavaScriptCallback","MyWndProc");
 stdcall_callback
=os_api.ApplyCallbackFunction(js_callback,callback_param);
 
 param
=new dobject("ApiParams");
 
 
/*
 typedef struct {
    UINT cbSize;
    UINT style;
    WNDPROC lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
    HICON hIconSm;
 } WNDCLASSEX, *PWNDCLASSEX;
 
*/

 
 param.AppendUnsignedInt(
48);//sizeof(WNDCLASSEX)==48;
 param.AppendUnsignedInt(3);//CS_HREDRAW | CS_VREDRAW;
 param.AppendHandlePointer(stdcall_callback);
 param.AppendSignedInt(
0);
 param.AppendSignedInt(
0);
 param.AppendHandlePointer(dvm.GetAppHInstance());
 param.AppendHandlePointer(
0);
 param.AppendHandlePointer(
0x00010011);
 param.AppendUnsignedLong(
0x00000006);//(COLOR_WINDOW+1);
 param.AppendAsciiString("menu");
 param.AppendAsciiString(
"JavaScriptCallApiWindowClass");
 param.AppendHandlePointer(
0);
 
 lpwcx
=new dobject("ApiParams");
 lpwcx.AppendStructurePointer(param);

 RegisterClassEx(lpwcx);
 
 param.Destroy();
 lpwcx.Destroy();
}


function CreateWindow(lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam)
{
 
/*
  HWND
  WINAPI
  CreateWindowExA(
    DWORD dwExStyle,
    LPCSTR lpClassName,
    LPCSTR lpWindowName,
    DWORD dwStyle,
    int X,
    int Y,
    int nWidth,
    int nHeight,
    HWND hWndParent,
    HMENU hMenu,
    HINSTANCE hInstance,
    LPVOID lpParam);
 
*/

 param
=new dobject("ApiParams");
 param.AppendSignedLong(
0);
 param.AppendAsciiString(lpClassName);
 param.AppendAsciiString(lpWindowName);
 param.AppendSignedLong(dwStyle);
 param.AppendSignedLong(x);
 param.AppendSignedLong(y);
 param.AppendSignedLong(nWidth);
 param.AppendSignedLong(nHeight);
 param.AppendHandlePointer(hWndParent);
 param.AppendHandlePointer(hMenu);
 param.AppendHandlePointer(hInstance);
 param.AppendHandlePointer(lpParam);

 
return os_api.CallOSAPI(null,"CreateWindowExA",param);
}


//function MyCreateWindow(){

  MyRegisterClassEx();

  hWnd 
= CreateWindow("JavaScriptCallApiWindowClass",
      
"Javascript call api window",
      
0x00cf0000,        // WS_OVERLAPPEDWINDOW
      250,
      
200,
      
250,
      
180,
      
nullnull
      dvm.GetAppHInstance(),
      
null);

  param
=new dobject("ApiParams");
  param.AppendHandlePointer(hWnd);
  param.AppendUnsignedLong(
0x00000001);//SW_SHOWNORMAL
  os_api.CallOSAPI(null,"ShowWindow",param);
  param.Destroy();
//}

三、不安全性何在

1 PHP 5.0 脚本和Javascrip运行基于 msscript.ocx 的后门,都有操作本地文件的权限能力,也有创建任意COM对象权限能力,还能访问网络。

2 可以调用任意 Windows API,可以做客户端能做的任何事情。

【后记】

可以把 Dangerous Browser 视作支持脚本和内嵌IE内核的客户端,运行服务器发送过来的 PHP, Javascript,而且这些脚本可以调用任何 Windows API 以及相仿的DLL,使客户端软件更“软”。例如BT客户端,网游客户端,邮件客户端等等,都可以借助这种构想完成随时更新的复杂业务,更为迅速地实现可能存在的赢利模式。

【诚聘翻译】翻译本文及浏览器内显示的文本为e文,联系