我不明白这段代码:
function ms(){ var plc=unescape('". unescape( '\x43\x43\x43\x43\n.............\xEF'. $URL).CollectGarbage(); if (mf)return(0); mf=1; var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38); var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs; for(i=0;i在上面的函数中,我似乎无法弄清楚变量类型,或者弄清楚它对
hsta
变量做了什么,以及它分配给它的内容:var hsta=0x0c0c0c0c,hbs=0x100000,pl=plc.length*2,sss=hbs-(pl+0x38); var ss=gss(addr(hsta),sss),hb=(hsta-hbs)/hbs; for(i=0;i我也无法弄清楚这个功能:
function fb(){ try { var obj=null; obj=cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}'); if(obj){ ms(); var buf = addr(0x0c0c0c0c); while (buf.length < 400) buf += buf; buf = buf.substring(0,400); obj.ExtractIptc = buf; obj.ExtractExif = buf; } } catch(e){} return 0; }以下代码是什么意思?
cobj('{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}')
这是一个什么样的变量?
var buf = addr(0x0c0c0c0c); buf = buf.substring(0,400); obj.ExtractIptc = buf; obj.ExtractExif = buf;最重要的是,该代码片段试图做什么?
这里有一些更多的功能:
function hex(num,width){ var digits='0123456789ABCDEF'; var hex=digits.substr(num&0xF,1); while(num>0xF){ num=num>>>4; hex=digits.substr(num&0xF,1)+hex; } var width=(width?width:0); while(hex.length>16)&0xFFFF,4)); } 任何指导将不胜感激.
1> Wadih M...:这是一个javascript代码片段,试图利用与Facebook相关的安全漏洞,更具体地说是它的图像上传器客户端ActiveX控件.
该
cobj
部分尝试创建一个ClassID对象,该对象{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
恰好是一个ActiveX照片上传器控件.ExtractIptc和ExtractExif函数属于该特定的ActiveX控件.代码的核心实际上是内存地址操作,移位,使用掩码来分离高位和低位.例如,
hex((addr>>16)&0xFFFF,4))
取一个地址,将它向右移16位,清除下部并将其转换为十六进制数.要真正理解大部分代码,您应该拥有正确的调试工具.谷歌搜索
{5C6698D9-7BE4-4122-8EC5-291D84DBD4A0}
ClassID给出了一些你应该研究的有趣结果:http://www.kb.cert.org/vuls/id/776931
http://seclists.org/fulldisclosure/2008/Feb/0023.html
http://securitytracker.com/alerts/2008/Feb/1019297.html
请注意,这不是PHP.这是javascript.
更多细节...
cobj可能被翻译成CreateObject()调用.每个已注册的ActiveX控件都有自己的类ID,并且它们具有该表单
{0000000000-0000-0000-0000-000000000000}
.如果要引用已注册的库并创建它的实例,可以使用其名称或类ID.ActiveX控件本身应该是计算机上的.OCX或.DLL文件.如果您可以找到此文件并对其进行调试,您将获得有关ExtractIptc和ExtractExif函数的最详细信息.同样,这两个函数在以特定方式调用时似乎存在漏洞,而这正是该脚本试图利用的漏洞.
该
var hsta=0x0c0c0c0c
部分定义了一个变量hsta,等于十六进制数0c0c0c0c.这和写作一样var hsta = 202116108
.在计算机工程中,处理十六进制地址比处理十进制数更容易,因为计算机内存中的地址和数据是二进制的,可以直接表示为十六进制数.关于十六进制的更多细节:http://en.wikipedia.org/wiki/Hexadecimal.变量名称hsta似乎是匈牙利表示法(第一个字母表示变量类型 - h表示十六进制).因此,我认为它意味着十六进制起始地址(hsta).按照同样的思路,我的猜测
pl
就是有效载荷和plc
均值有效载荷代码.有效负载代码是计算机在漏洞利用成功时将执行的代码,这是您在脚本开头看到的内容
(\x43\x43\x43\x43\n....\xEF)
.它被编码为特定CPU架构和操作系统的shell代码.这意味着代码已经编译,独立,并且可以直接通过管道传输到CPU.如果你解码这个,你可能会发现一些接近机器代码的东西.这可能没什么好处的.该
hex(num,width)
函数将十进制数转换为十六进制数.我已经单独测试了这个函数,并在输入1000时它返回了3E8.如果得到的十六进制数大于指定值,则宽度变量仅用于退出脚本.关于这部分:
var buf = addr(0x0c0c0c0c); buf = buf.substring(0,400); obj.ExtractIptc = buf; obj.ExtractExif = buf;buf变量是一个缓冲区.缓冲区只不过是内存中的数据.它可以作为字符串接口,如此代码所示.我的猜测是,从0x0c0c0c0c内存中的任何内容创建一个400字节的缓冲区,然后输入两个函数.
这里缺少几个函数定义.即,hav()函数.
对...你可以看到他的用户名也不是无辜的.