浏览器安全与MSAA
对于互联网应用而言,安全是一个不可忽视的问题。特别是电子商务类应用,更是重中之重。由于目前国内电子商务发展越来越迅猛,很多***开始把注意力转到它上面来。这些***往往有一个很重要的特点就是具有明显的经济利益性目的。
根据分析和研究表明,这类***通常并没有使用很高深的技术手段,主要原因就是浏览器自身的脆弱性。从OS角度来说,浏览器是一个很普通的应用程序,没有任何保护措施。***可以很方便的通过某些方式来篡改浏览器数据。
比较常见的一种就是利用MSAA技术来直接修改浏览器页面,这种修改只发生在内存中,这就是说即使我们查看当前页面源码,也不会发现任何异常。而实际上页面已经被修改了。值得关注的是,目前大部分安全防护软件都不会监视这块的应用。
MSAA是基于COM的技术,一般的调用模式首先是向浏览器窗口发送WM_HTML_GETOBJECT消息,然后通过MSAA的特有API即ObjectFromLresult()来取得对应页面的IHTMLDocument2接口。为了方便,一般顺便也一起获取IWebBrowser接口。剩下的工作就比较简单(但是很繁杂),查询MSDN文档来获取这两个接口所支持的操作即可。
下面演示一个DEMO,这个DEMO会将当前浏览器窗口中的百度首页的Logo换成Tomcat,如下图:
完整代码就不贴出了,关键性代码如下(C代码):
CComBSTR domain(100);
CComPtr<IHTMLElement> htmBody;
CComPtr<IDispatch> bodyChildren;
CComPtr<IHTMLElementCollection> imgColl;
CComQIPtr<IHTMLWindow2> htmWin;
CComVariant v;
dom->get_domain(&domain);
if(domain == L"www.baidu.com") {
MessageBox(NULL, L"target detected~\n now have a look...", L"msg", 0);
dom->get_body(&htmBody);
//Execute js
CComBSTR jsToExecute =
L"document.getElementById('lg').innerHTML=\
'<img src=\"http://tomcat.apache.org/p_w_picpaths/tomcat.gif\"\
width=\"270\" height=\"129\" usemap=\"#mp\"/>';";
dom->get_parentWindow(&htmWin);
hr = htmWin->execScript(jsToExecute, L"javascript", &v);
}
CComPtr<IHTMLElement> htmBody;
CComPtr<IDispatch> bodyChildren;
CComPtr<IHTMLElementCollection> imgColl;
CComQIPtr<IHTMLWindow2> htmWin;
CComVariant v;
dom->get_domain(&domain);
if(domain == L"www.baidu.com") {
MessageBox(NULL, L"target detected~\n now have a look...", L"msg", 0);
dom->get_body(&htmBody);
//Execute js
CComBSTR jsToExecute =
L"document.getElementById('lg').innerHTML=\
'<img src=\"http://tomcat.apache.org/p_w_picpaths/tomcat.gif\"\
width=\"270\" height=\"129\" usemap=\"#mp\"/>';";
dom->get_parentWindow(&htmWin);
hr = htmWin->execScript(jsToExecute, L"javascript", &v);
}
其中,dom是一个已经获取的
IHTMLDocument2接口。
请勿将以上代码用于非法用途。这段代码的execScript方法调用后可能返回非S_OK的奇怪结果,原因是ATL相关类库的问题。
通过这个DEMO可以看到,从某种程度上说互联网应用的安全是一个比较严峻的问题。我们无法改变浏览器脆弱的事实,能改变的是用户的安全防护意识。如何培养起这个意识,是每个互联网从业者都应该思考的问题。
©著作权归作者所有:来自51CTO博客作者kevx的原创作品,如需转载,请注明出处,否则将追究法律责任
0
收藏
推荐专栏更多
猜你喜欢
我的友情链接
velocity 区间运算符导致生产环境OOM
Java线程:线程的调度-休眠
我们不得不面对的中年职场危机
职场终极密籍--记我的职业生涯
用光影魔术手制作一寸照片(8张一寸)
我的IT职场生涯: 毕业4年,月薪过万
Linux关闭休眠和屏保模式
年薪从0到10万-我的IT职场经验总结
Windows7删除休眠文件hiberfil.sys节省大量C盘空间
致IT同仁 — IT人士常犯的17个职场错误
“跳槽加薪”现象,无奈的职场规则
Redis实战之限制操作频率
Django+Vue实现WebSocket连接
Restful接口开发测试指南
前端程序员面试套路
Google Authenticator TOTP原理详解(以Python为例)
Django解决扩展用户表时,后台Admin显示密码为明文的问题
jHipster开发中对配置文件.yo-ce.json分析
AJAX入门学习-2:基于JS的AJAX实现(以Django为例)
扫一扫,领取大礼包
转载于:https://blog.51cto.com/spinlock/569038
Ctrl+Enter 发布
发布
取消