SQLMap 源码阅读
0x01 前言
因为代码功底太差,所以想尝试阅读 sqlmap 源码一下,并且自己用 golang 重构,到后面会进行 ysoserial 的改写;以及 xray 的重构,当然那个应该会很多参考 cel-go 项目。
0x02 环境准备
sqlmap 的项目地址:https://github.com/sqlmapproject/sqlmap用 pycharm 打断点调试,因为 vscode 用来调试比较麻烦。
因为要动调,所以需要一个 sql 注入的靶场,这里直接选用的是 sql-labs,用 docker 起
docker pull acgpiano/sqli-labs
docker run -dt --name sqli-lab -p [PORT]:80 acgpiano/sqli-labs:latest
最后还需要重新配置一下数据库,然后才能以 sqli-labs 为靶场进行测试。
这里也挂一下 sqlmap 对应的一些基础操作 ———— https://www.cnblogs.com/hongfei/p/3872156.html
直接在 pycharm 的 Debug 下进行调试,设置参数如下,开始调试
-u "http://81.68.120.14:3333/Less-1/?id=1" -technique=E --dbs
0x03 sqlmap 源码阅读
在开始之前我们有必要确认一下 sqlmap 运行的流程图,很重要!这样有助于我们进一步分析源码。
1. 初始化
在 sqlmap.py 的 main 函数下断点,开始调试
在没有对 URL 进行发包/探测的时候 sqlmap 会先对一些环境、依赖、变量来做一些初始化的处理
往下,通过 cmdLineParser() 获取参数,cmdLineParser() 通过 argparse 库进行 CLI 的打印与获取,类似的一个小项目我之前也有接触过 https://github.com/Drun1baby/EasyScan
往下 initOptions(cmdLineOptions) 解析命令行参数
init 函数: 初始化
在 init() 函数中通过调用各种函数进行参数的设置、payload 的加载等,有兴趣的师傅可以点进去阅读一下。
其中这三个相对比较重要,是用来加载 payload 的 ———— loadBoundaries()、loadPayloads()、_loadQueries(),
loadBoundaries() // 加载闭合符集合
loadPayloads() // 加载 payload 集合
_loadQueries() // 加载查询语句,在检测到注入点之后后续进行数据库库名字段名爆破会用到的语句
下个断先点调试一下 loadBoundaries() 函数
首先,会去加载 paths.BOUNDARIES_XML,也就是 data/xml/boundaries.xml
接着进入解析 XML 文件的部分,跟进 parseXmlNode(root)
最终添加到 conf 对象的 tests 属性里
loadPayloads() 函数与 _loadQueries() 函数大体上也是如此,都是做了解析 xml 文件的工作,再将内容保存到 conf 对象的 tests 属性里。像 loadPayloads() 函数,最后在 conf.tests 里面可以很清晰的看到 payloads
此时我们还可以看一下 conf 是什么
conf 属性中主要存储了一些目标的相关信息(hostname、path、请求参数等等)以及一些配置信息,init 加载的 payload、请求头 header、cookie 等
init() 函数执行完毕后,就会来到 start() 函数进行项目的正式运行。
初始化功能点小结
简单概括一下初始化部分的代码做了什么事
获取命令行参数并处理
初始化全局变量 conf 以及 kb
获取并解析几个 xml 文件,完成闭合工作、payloads 加载工作
设置 HTTP 相关配置,如 HTTP Header,UA,Session 等
2. URL 处理
f8 下来,先到的是 threadData = getCurrentThreadData(),继续往下走,到 result = f(*args, **kwargs) 代码块,跟进一下
代码逻辑此时来到了 /lib/controller/controller.py 下,往下走,是不会进到 conf.direct 和 conf.hashFile 中的,会直接进入到 kb.targets.add() 的代码逻辑里面。
此处的 kb 变量的作用是共享一些对象,其实本质上是保存了注入时的一些参数。kb.targets 添加了我们输入的参数,如图
往下看,大体上是做了一些类似类似打印日志、赋值、添加 HTTP Header 等工作,这一部分代码我们就不看了,直接看最关键的这一部分代码 parseTargetUrl()。
跟进
一开始先进行了这一判断
if re.search(r"://\[.+\]", conf.url) and not socket.has_ipv6
判断 http:// 的开头形式是否正确,以及 socket 是否为 ipv6 协议,如果为 ipv6 协议,那么 sqlmap 并不支持。
接着判断
if not re.search(r"^(http|ws)s?://", conf.url, re.I):
判断是 http 开头还是 https 开头,又或者是否是 ws/wss 开头,如果没有这些开头,则就从端口判断,这里我认为或许可以加上 80 与 8080 端口。
继续往下看,进行了 url 的拆分、host 的拆分,并将这些内容保存到 conf 里面的对应属性,后续也是一些基础的判断与赋值,这里不再赘述。
总而言之是在对 URL 进行剖析与拆解,最后这些东西都是放到 conf 里面的
3. 如果这个网站已经被注入过,生成注入检测的payload
核心代码在 controller.py 的第 434 行,需跟进;此处我们可以设置对 kb.injections 的变量监测。先跟进 setupTargetEnv() 函数
setupTargetEnv() 函数调用了如下图所示的七个函数
我们跟进最主要的 _resumeHashDBValues() 函数,首先调用了 hashDBRetrieve() 函数,设置检索
出来,到第 476 行,这一次又调用了 hashDBRetrieve() 函数,传参是 HASHDB_KEYS.KB_INJECTIONS,意思就是以 KB_INJECTIONS 作为 KEY 进行检索。跟进发现函数先将需要注入的 URL 信息放到了 _这个变量中,并将基础信息用 | 符号隔开。
跟进 retrieve() 函数,这个函数做了生成 payload 的工作,具体是怎么生成的我们继续往下看
第 95 行,这里很重要,执行了 SQL 语句,并通过 Hash 加密,加密方式是 base64Pickle 序列化
最终反序列化解密 Payload,说实话这里没看懂是怎么生成的,看上去仅仅是执行了一个 SQL 语句,后面看其他师傅的文章的时候并没有把这一段单独拉出来说,payloads 其实都放在 xml 当中。
接着再循环一次,生成一个 payload
在生成完所有 payload 之后会先对目标进行一次探测,如果 Connection refused 则返回 False
这里生成的 payload 只是很基础的一部分,并非是
4. WAF 检测
解析完 URL 之后对目标进行探测,往下看,位置是 controller.py 的第 439 行,第 448 行有 checkWaf() 的函数,很明显就是要做 WAF 检测的功能。
先会判断这一目标是否存在 WAF,如果存在 WAF 的话,会进行字符的相关 fuzz,当然此处建议对一个存在 WAF 的目标进行测试。值得注意的是,如果这个目标你已经探测过存在 waf,且已知 waf 归属厂商的情况下,就不会走到 payload 那一段代码逻辑当中去,相关的业务代码在 hashDBRetrieve() 下,此处不再展开,比较容易。
如果存在 WAF,则会生成用于 fuzz 的 payload,这个 payload 是基于这个 NMAP 的 http-waf-detect.nse ———— https://seclists.org/nmap-dev/2011/q2/att-1005/http-waf-detect.nse
设置 payload 类似于 "9283 AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#",如果没有 WAF,页面不会变化,如果有 WAF,因为 payload 中有很多敏感字符,大多数时候页面都会发生改变。
接下来的 conf.identifyWaf 代表 sqlmap 的参数 --identify-waf,如果指定了此参数,就会进入 identifyWaf() 函数,主要检测的 waf 都在 sqlmap 的 waf 目录下。不过新版的 sqlmap 已经将这一参数的功能自动放到里面了,无需再指定参数
这里的 payload 先经过处理后赋值给 value,再将 value 作为参数传入 queryPage() 请求中,跟进
在经过很长一段的数据处理与判断代码后,我们到第 1531 行,如图,跟进;getPage() 函数的作用是获取界面的一些信息,如 url,ua,host 等,通过输出比对 payload,为判断 waf 类型提供信息。
获取基本信息
这些基础信息最后都会保存在 response 系列的 message 当中
getPage() 函数中调用了 processResponse() 函数做响应结果的处理,跟进
往下看,到 401 行开始,后续的代码进行了 Waf 的识别
跟进 identYwaf.non_blind_check(),是通过正则表达式来对页面进行匹配,对应的规则在 thirdparty/identywaf/data.json 中
同时 sqlmap 不光通过规则库来进行判断,也会通过页面相似度来判断是否存在 waf/ips
如果相似度小于设定的 0.5 那么就判定为有 waf 拦截
WAF 注入总结
总结一下就是两点,一种方法是通过正则匹配的检测,另外一种方法是根据页面相似度来检测,我自己应该很难写出来 waf 检测的东西;届时再做尝试。
5. 注入检测之启发式注入
从 checkWaf() 函数里面出来,先到第 457 行,检测网站是否稳定(因为有些网站一测试可能就炸了)对应此 info
[INFO] testing if the target URL content is stable
继续往下走到第 471 行,会先判断参数是否可以注入,这里与命令的参数 —— --level 挂钩
在前文环境准备的时候我们采用的方式是报错注入,如果不这么做,直接指定参数 --dbs,无法进入到启发式注入里面。我们接着看代码,往下直到第 581 行,调用的 heuristicCheckSqlInjection() 函数,意思是启发性注入。
启发式注入做了哪些工作
1、数据库版本的识别2、绝对路径获取3、XSS 的测试
数据库版本的识别
首先会从 HEURISTIC_CHECK_ALPHABET 中随机抽取10个字符出现构造 Payload,当然里面的都不是些普通的字符,而且些特殊字符,当我们进行 SQL 注入测试的时候会很习惯的在参数后面加个分号啊什么的,又或者是其他一些特殊的字符,出现运气好的话有可能会暴出数据的相关错误信息,而那个时候我们就可以根据所暴出的相关错误信息去猜测当前目标的数据库是什么。
并且最后生成的这个 payload 是能够闭合的
实际找个网站测试,如图,这就是报出的 SQL 数据库错误
判断在 lib/request/connect.py 的 1532 行
接着跟进 processResponse() 函数,这里和 waf 对比用的同一种方式,不再详细说明
其中 processResponse() 会调用到 ./lib/parse/html.py 中的 htmlParser() 函数,这一个函数就是根据不同的数据库指纹去识别当前的数据库究竟是什么。
最终实现这一功能的其实是 HTMLHandler 这个类,errors.xml 文件内容如图
这一配置文件的比较简单,其实也就是一些对应数据库的正则。sqlmap 在解析 errors.xml 的时候,然后根据 regexp 中的正则去匹配当前的页面信息然后去确定当前的数据库。这一步和 WAF 比对类似。
到此 sqlmap 就可以确定数据的版本了,从而选择对应的测试 Payload,后续我们会看到这是根据莫索引将 payloads 排序,然后选取对应数据库信息的 payloads 进行测试。减少 sqlmap 的扫描时间。
最后这个 DBMS 探测对应的是这一段信息
获取绝对路径与 XSS 探测
相比指纹识别,获取绝对路径的功能模块相对简单,利用正则匹配寻找出绝对路径。
XSS 的探测也比较简单,这里就不作代码分析了
6. 注入检测之正式注入
从启发式注入里面出来,到第 592 行,进行正式的注入检测,跟进
到第 130 行,获取所有的 payload,后续会根据数据库的信息构建索引,将符合索引的 payload 拿去攻击
往下走,先判断有没有做数据库信息的获取,如果有则跳过,如果没有就先进行上一步的启发式注入
接着根据通过报错得到的数据库信息建立索引,将对应最有效的 payload 拿出来。这些 payloads 会进行 while 循环
第 370 行,通过 cleanupPayload() 函数对 payload 进行处理,主要功能其实是做了 payload 的标签替换
最后替换过的 payload 长这样
"AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT('qbpxq',(SELECT (ELT(9125=9125,1))),'qxkvq','x'))s), 8446744073709551610, 8446744073709551610)))"
在 sqlmap 中将payload 分为了三部分,上面生成的 fstpayload 就是中间那部分
prefix + payload + suffix
prefix 和 suffix 就是对应的,闭合前面的结合以及注释后面的结构,这两个属性主要是从 boundary 中进行获取的,boundary 就是前面加载的 boundaries.xml 配置文件,用来闭合的,所以这里作为了 prefix 和 suffix
最后的拼接
并分别对 prefix 和 suffix 进行 clean,然后进行组合,组合之后的 payload 就是 reqPayload,然后进行请求
发出请求最终还是通过 request.queryPage() 来实现的
请求完毕的结果经过 queryPage() 函数来获取界面,但是页面结果是由 kb.chars.start 和 kb.chars.stop 包裹着的
当第一次的注入不成功的时候,会不断变更 prefix,suffix,当 prefix 和 suffix 都变更完毕但还是无法注入时,才会变更 payload,取出另一个 payload 出来,直至 injectable 变量为 true,同时 output=1
并且 injectable=true
7. 爆数据库等操作
经过上一步正式注入的判断,得到的 injectable=true 参数,才能进行下一步的爆数据库操作.
爆库阶段主要是先经过四个函数处理数据后,再调用 action() 函数,跟进。
这里已爆库为例,先看 --dbs 参数有关的这一块,核心函数是 getDbs()
先根据后台数据库信息,输出日志
第 133 行,queries 就是存放之前初始化 queries.xml 的变量
首先通过 count(schema_name) 来获取数据库的个数,然后再通过 limit num,1 来依次获取数据库名,从 queries 变量中获取语句之后就会传递到 getValue 函数
跟进,前面做了一些基础的设置和 payload 的处理与赋值,比如第 401 行的 cleanQuery() 函数,将语句转换为大写,这里我就不跟进了。直接看关键语句,第 451 行,errorUse() 函数
在 errorUse() 中首先通过正则将 payload 中的各个部分都进行了获取 ,保存到了对应的 field 当中,最终经过一系列处理,取出了 payload 中的 schema_name
跳出 getFields() 函数,往下,将 expression 的值经过 replace 操作,赋值给了 countedExpression,最终得到的值是 'SELECT COUNT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA'
第 337 行,跟进 _oneShotErrorUse() 函数,在这一个函数中,sqlmap 对目标网站发包,使用的 payload 为 countedExpression,目的是探测数据库个数(count)
具体业务发包在这里
最后将结果传入 extractRegexResult() 函数中进行正则提取
多线程的方式进行注入,而 runThreads() 函数调用了 errorThread() 函数,最终的注入业务还是由 errorThread() 函数来完成的
跟进一下 _errorFields() 函数,将每一个表进行 while 循环操作,再通过 limitQuery() 函数设置最后的 Limit 语句
最后成功 --dbs
sqlmap 流程分析结束
0x04 小结
sqlmap 的流程分析需要非常重视这张图,当感觉代码看不下去的时候看一下这张图可以事半功倍。
在审计开始之前也可以看一下 utils 文件夹下的 python 文件,总体来说流程并不难,看正则的时候其实挺吃力的。
网络安全日报 2023年03月16日
1、通用汽车探索在汽车中使用ChatGPT
https://cybernews.com/tech/general-motors-explores-chatgpt-cars/ 通用汽车正在探索ChatGPT的用途,作为其与微软更广泛合作的一部分,一位公司高管告诉路透社。“ChatGPT将出现在一切领域,”通用汽车副总裁斯科特米勒上周在接受采访时表示。
2、据称LockBit在暗网上出售60GB德意志银行数据
https://cybernews.com/news/deutsche-bank-data-offered-up-on-dark-web/ 一名不知名的黑客提供了敏感文件的缓存,据称这些文件是由臭名昭著的LockBit勒索软件团伙从德意志银行窃取的。
3、两会热议健康码去留!主张其退出并删除数据或成代表委员共识
https://www.secrss.com/articles/52735 当疫情期间紧急应对的背景褪去,妥善处理健康码及背后大量数据或成为当务之急。
4、美媒:量子计算机将对网络安全构成重大威胁
https://www.secrss.com/articles/52729 美国防新闻网站1月20日发文称,五角大楼应该尽快在量子计算上采取行动,否则就会被竞争对手超越。文章认为,随着量子计算机不断发展,其对国防部的网络安全构成了重大威胁。
5、俄罗斯新冠疫苗 "机密 "信息遭遇泄露
https://cybernews.com/news/classified-documents-russian-sputnik-vaccine-online/ 黑客组织 KelvinSecurity 在网上共享了数百份文件,其中包含俄罗斯 Sputnik V 新冠肺炎疫苗开发的相关信息,其中一些文件甚至囊括了临床试验中已故参与者的姓名信息。
6、YoroTrooper组织针对独联体国家发起攻击
https://www.bleepingcomputer.com/news/security/yorotrooper-cyberspies-target-cis-energy-orgs-eu-embassies/ 至少从 2022 年 6 月开始,一个名为“YoroTrooper”的新攻击组织一直在开展网络间谍活动,目标是独立国家联合体 (CIS) 国家的政府和能源组织。根据 Cisco Talos 的说法,威胁行为者已经入侵了一个从事医疗保健的重要欧盟机构、世界知识产权组织 (WIPO) 和多个欧洲大使馆的账户。
7、ALPHV勒索组织声称已入侵了亚马逊Ring
https://www.hackread.com/amazons-ring-hacked-alphv-ransomware/ ALPHV 是一个以使用 BlackCat 恶意软件而闻名的勒索软件组织,它声称对亚马逊广受欢迎的安全摄像头公司Ring的攻击负责,并威胁要泄露他们的数据。亚马逊目前还没有得到勒索软件攻击的证据,但是,该公司正在就数据泄露问题调查第三方供应商。
8、航空航天企业Safran集团或因错误配置泄露敏感数据
https://cybernews.com/security/key-aerospace-player-leaks-sensitive-data/ 根据 Cyber news 的研究,顶级航空公司 Safran Group 由于系统配置错误而导致自身容易受到网络攻击,可能持续了一年多,这突显了大型航空公司对攻击者防御的脆弱性。这家总部位于法国的跨国航空公司是全球第八大航空航天供应商, 2022 年的收入超过 190 亿欧元,它与仅次于波音的全球第二大航空航天公司空中客车公司合作制造航空航天设备。
9、攻击者使用网络钓鱼工具包每天发送数百万封电子邮件
https://thehackernews.com/2023/03/microsoft-warns-of-large-scale-use-of.html 一个开源的中间人攻击 ( AiTM ) 网络钓鱼工具包因其能够实现大规模攻击而被大量用于网络犯罪。Microsoft Threat Intelligence 团队正在追踪开发工具包的威胁行为者,其名称为DEV-1101。AiTM网络钓鱼攻击通常能够规避多因子身份验证 (MFA) 保护,因此这类攻击成功率更高。
10、CrowdStrike 发现了有史以来第一个Dero 加密货币挖矿活动
https://securityaffairs.com/143520/cyber-crime/dero-crypto-mining-campaign.html CrowdStrike发现了首个针对Kubernetes基础设施的Dero加密货币挖矿活动。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
记一次运气非常好的服务器渗透经历
平平无奇的客服平台:
这个客服平台是有RCE的,如果上传到的不是oss服务器,存储在本地服务器的话,
在返回端口的url是存在st2。
root权限,由于是客服后台服务器,没有啥有用价值的信息。
直接替换私钥连服务器。
继续翻找有用的信息。
配置文件里也只有mongodb和redis的连接信息。
历史命令和登录ip历史是阿里云服务器。
扫下端口,8092有个目录遍历,好像是专门用来放项目的。
点开test看看:
下载过来解包看看:
这咋有个ip,root和密码,不会是那个开发人才留下的吧,泪目了家人们。
尝试连接,还真可以。
连接数据库看看,8w多受害者,佩服。
然后再回到之前扫出来的端口,
8094是有个web项目。
在数据库获取到后台url
配合数据库和登录日志获取到国内技术嫌疑人。
IP和经纬度是在国内。
总结一下,下班。
网络安全日报 2023年03月15日
1、LockBit 声称窃取了 Maximum Industries 系统中 SpaceX 机密数据
https://securityaffairs.com/143495/cyber-crime/lockbit-ransomware-gang-spacex-files.html LockBit 勒索软件组织声称从 Maximum Industries 的系统中窃取了属于 SpaceX 的机密数据。Maximum Industries 是一家提供零件生产和制造全方位服务的承包商。
2、Microsoft 周二补丁日修复了被积极利用的 Outlook 零日漏洞
https://securityaffairs.com/143486/security/microsoft-patch-tuesday-march-2023.html 2023年3月的微软补丁周二更新解决了74个漏洞,其中包括在勒索软件攻击中被利用的Windows零日漏洞。
3、Adobe 修复了被利用的ColdFusion高危漏洞
https://securityaffairs.com/143479/security/adobe-cold-fusion-exploited-bug.html Adobe 发布了 ColdFusion 2021 和 2018 版的安全更新,以解决一个严重漏洞,该漏洞被跟踪为 CVE-2023-26360(CVSS 分数 8.6),该漏洞在非常有限的攻击中被利用。
4、Microsoft SmartScreen 零日漏洞被利用来传播 Magniber 勒索软件
谷歌的威胁分析小组 (TAG) 表示,一个网络犯罪组织一直在利用 Microsoft SmartScreen 安全功能中的零日漏洞来传播 Magniber 勒索软件。该漏洞被追踪为CVE-2023-24880,至少从 1 月起就已被利用。
5、研究人员发布Makop勒索组织攻击武器分析
https://securityaffairs.com/143452/malware/dissecting-makop-ransomware.html 网络安全研究员 Luca Mella 分析了 Makop 勒索软件最近一次攻击活动中使用的攻击武器。Makop 勒索软件组织的武器库是一种混合型武器库:它既包含定制开发的工具,也包含从公共存储库中获取的现成软件。
6、研究披露针对巴西银行的安卓GoatRAT木马变种
https://blog.cyble.com/2023/03/14/goatrat-android-banking-trojan-variant-targeting-brazilian-banks/ 在过去的六个月中,包括 BrasDex、Xenomorph 和 PixPirate 在内的多个安卓银行木马已经整合了一个自动转账系统 (ATS) 框架,允许攻击者在受感染的设备上进行未经授权的转账汇款。Cyble Research & Intelligence Labs (CRIL) 捕获到一种新的利用 ATS 框架执行欺诈交易的GoatRAT银行木马。
7、医疗供应商Zoll Medical数据泄露影响100万人
https://www.securityweek.com/zoll-medical-data-breach-impacts-1-million-individuals/ 医疗技术供应商 Zoll Medical 通知大约 100 万人,表示他们的个人信息可能在最近的数据泄露事件中遭到泄露。Zoll 开发和销售用于高级急救护理的医疗设备和软件,包括心脏监测、氧疗、通气、数据管理等。该公司表示,数据泄露是在 1 月底发现的,当时他们发现其内部网络上存在异常活动。
8、GitHub 2FA 计划增加短信、账户锁定保障措施
https://www.techtarget.com/searchsoftwarequality/news/365532274/GitHub-2FA-plan-adds-SMS-account-lockout-safeguards GitHub 从周一开始实施帐户 2FA 要求,已在其分阶段推出计划中添加了 SMS 支持和新的帐户锁定预防功能。
9、西门子周二修复了 ICS 产品中的 100多个漏洞
https://www.securityweek.com/ics-patch-tuesday-siemens-schneider-electric-address-over-100-vulnerabilities 西门子和施耐德电气在其 2023 年 3 月补丁星期二安全公告中解决了 100 多个漏洞。
10、Fortinet FortiOS 软件中的漏洞被利用攻击政府实体和大型组织
https://securityaffairs.com/143458/hacking/attacks-fortinet-fortios.html 未知威胁参与者正在利用 Fortinet FortiOS 软件中的一个漏洞,该漏洞被跟踪为CVE-2022-41328,该漏洞可能允许特权攻击者通过精心设计的 CLI 命令读取和写入任意文件。CVE -2022-41328 漏洞(CVSS 评分:6.5)是 FortiOS 中的一个路径遍历问题,可导致任意代码执行。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年03月14日
1、De-Fi平台Euler 因闪电贷攻击损失近 2 亿美元
https://www.securityweek.com/euler-loses-nearly-200-million-to-flash-loan-attack/ 总部位于英国伦敦的 De-Fi 平台公司 Euler 因闪贷攻击损失了 1.96 亿美元。
2、FBI:2022年网络犯罪损失超过100亿美元。
https://www.securityweek.com/cybercrime-losses-exceeded-10-billion-in-2022-fbi/ 2022 年,FBI 收到超过 80 万起与网络犯罪相关的投诉,损失总额超过 100 亿美元。虽然投诉数量与 2021 年相比有所减少,但损失从 69 亿美元增加到 103 亿美元。在过去五年中,该机构共收到 326 万起投诉,造成 276 亿美元的损失。
3、新的“GoBruteforcer”僵尸网络以 Web 服务器为目标
https://www.securityweek.com/new-gobruteforcer-botnet-targets-web-servers/ 据 Palo Alto Networks 报道,最近发现的一个基于 Golang 的僵尸网络以运行 FTP、MySQL、phpMyAdmin 和 Postgres 服务的 Web 服务器为目标。
4、员工将公司机密数据发送给ChatGPT可能导致敏感数据泄露
https://securityaffairs.com/143394/security/company-data-chatgpt-risks.html 研究人员分析了来自不同行业的160万名工作人员使用ChatGPT的情况。他们报告称,5.6%的人在工作场所中使用过它,并且自推出以来有4.9%的人向ChatGPT提供了公司数据。 ChatGPT利用这些数据构建其知识库,但会公开分享基于此构建的信息。ChatGPT在工作场所的使用成为了一个严重问题,可能会导致敏感和机密数据泄露。因此,像JP Morgan和Verizon这样的公司出于对机密数据的担忧而封锁了该聊天机器人的访问。
5、大规模网络攻击劫持东亚网站重定向至成人和博彩网站
https://thehackernews.com/2023/03/large-scale-cyber-attack-hijacks-east.html 自2022年9月初以来,一场大规模恶意网络攻击已经劫持了数千个面向东亚受众的网站,将访问者重定向到成人主题内容。
6、假ChatGPT Chrome扩展程序劫持Facebook账户进行恶意广告推销
https://thehackernews.com/2023/03/fake-chatgpt-chrome-extension-hijacking.html 已发现假冒的 ChatGPT Chrome 浏览器扩展程序具有劫持 Facebook 帐户和创建流氓管理员帐户的功能。
7、AI生成的YouTube视频教程传播信息窃取恶意软件
https://thehackernews.com/2023/03/warning-ai-generated-youtube-video.html 威胁行为者越来越多地使用AI生成的YouTube视频传播各种窃取恶意软件,例如Raccoon、RedLine和Vidar。这些视频通过假装是有关如何下载破解版软件(如Photoshop、Premiere Pro、Autodesk 3ds Max、AutoCAD等)的教程来诱骗用户。
8、研究人员发现 Akuvox E11 智能对讲机存在十多个安全漏洞
https://thehackernews.com/2023/03/researchers-uncover-over-dozen-security.html 中国公司Akuvox制造的智能对讲机产品E11被披露了十多个安全漏洞。Claroty安全研究员Vera Mens在一篇技术文章中表示:“这些漏洞可能允许攻击者远程执行代码,以激活和控制设备的摄像头和麦克风,窃取视频和图像”。
9、Dark Pink APT组织利用KamiKakaBot攻击东南亚国家
https://thehackernews.com/2023/03/kamikakabot-malware-used-in-latest-dark.html Dark Pink高级持续威胁 (APT) 攻击者与一系列针对东南亚国家政府和军事实体的新攻击有关,该攻击使用名为 KamiKakaBot 的恶意软件。Dark Pink,也称为 Saaiwc,今年早些时候首次被 Group-IB 披露。该组织被怀疑来自亚太地区,并且至少从 2021 年年中开始活跃,并在 2022 年更为活跃。
10、以全球公司为目标的Medusa勒索软件团伙愈发活跃
https://www.freebuf.com/news/360208.html 据BleepingComputer消息,过去两年一向低调的勒索软件组织Medusa(美杜莎)近期开始变得活跃,目标针对全球范围内的多个企业组织,并索要数百万美元赎金。本月初,Medusa袭击了明尼阿波利斯公立学校 (MPS) ,索要100 万美元的赎金。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
网络安全日报 2023年03月13日
1、黑客从印度HDFC银行子公司泄露7300万条记录
https://www.hackread.com/hackers-india-hdfc-bank-data-leak/ 虽然HDFC Bank否认有任何数据泄露,但其子公司 HDB Financial Services 已确认正在调查一起与网络安全相关的事件。一名使用别名 Kernelware 的黑客泄露了属于 HDB Financial Services 的 7.5 GB 客户数据,HDB Financial Services 是印度最大的私人银行 HDFC Bank 的子公司。
2、报告称人工智能大幅提升了网络钓鱼攻击的复杂程度
https://www.helpnetsecurity.com/2023/03/08/sophistication-of-phishing-emails/ 根据 Egress 的数据,在过去 12 个月中,92% 的组织已成为成功的网络钓鱼攻击的受害者,而 91% 的组织承认经历过电子邮件数据丢失,99% 的网络安全领导者承认对电子邮件安全感到压力,98%的人对他们的安全电子邮件网关(SEG)感到失望,53%的人承认有太多网络钓鱼攻击绕过了它。
3、IceFire勒索软件针对Linux进行攻击
https://www.bleepingcomputer.com/news/security/icefire-ransomware-now-encrypts-both-linux-and-windows-systems/ 与 IceFire 勒索软件相关的威胁参与者现在使用新的专用加密器积极攻击全球 Linux 系统。执行时,IceFire 勒索软件会加密文件,将“.ifire”扩展名附加到文件名,然后通过删除自身二进制文件来掩盖其踪迹。IceFire 勒索软件在之前只专注于攻击 Windows 系统,之后扩大了 Linux 目标,与近年来也开始攻击 Linux 系统的其他勒索软件组织保持一
4、研究人员分析与Chaos有关的BlackSnake勒索软件
https://blog.cyble.com/2023/03/09/blacksnake-ransomware-emerges-from-chaos-ransomwares-shadow/ 最近,CRIL 发现了一种名为“BlackSnake”的新型勒索软件,它能够针对加密货币用户执行剪贴板替换操作。该变体最初是由研究人员@siri_urz发现的。它在2022年的网络犯罪论坛中被发现。分析表明 BlackSnake 勒索软件是根据 Chaos 勒索软件的源代码创建的。
5、最新Xenomorph安卓恶意软件可攻击400多家银行软件
https://securityaffairs.com/143316/malware/xenomorph-android-malware-v3.html 新版本的 Xenomorph Android 恶意软件包括一个新的自动转账系统框架,可针对 400 余家银行进行攻击。2022 年 2 月,ThreatFabric 的研究人员首次发现了Xenomorph恶意软件,最近发现的一种新变种Xenomorph.C可以针对主要来自西班牙、土耳其、波兰、美国、澳大利亚、加拿大、意大利、葡萄牙、法国、德国、阿联酋和印度的 400 多家银行和金融机构软件。
6、自去年11月以来Prometei僵尸网络已感染过万设备
https://securityaffairs.com/143343/hacking/prometei-botnet-v3.html 思科 Talos 研究人员报告称,自 2022 年 11 月以来, Prometei 僵尸网络已在全球感染了超过 10000 个系统。该僵尸网络具有模块化结构,并采用多种技术来感染系统和逃避检测。思科Talos专家于 2020 年 7 月首次观察到Prometei 僵尸网络,对上传到 VirusTotal 的样本进行深入调查后,专家们确定该僵尸网络可能最早从2016年5月开始就一直活跃。
7、第三方供应商黑客入侵后,AT&T 通知数百万客户数据泄露
https://securityaffairs.com/143303/data-breach/att-warns-data-breach.html AT&T 通知数百万客户,他们的一些信息在第三方供应商遭到黑客攻击后泄露。
8、执法部门查封了NetWire RAT销售网站并逮捕一人
https://securityaffairs.com/143325/cyber-crime/law-enforcement-seized-netwire-rat-site.html 一项国际执法行动查封了与 NetWire RAT 相关的基础设施www.worldwiredlabs.com,并逮捕了其一名来自克罗地亚的管理员。NetWire 远程访问木马 (RAT) 自 2012 年起在网络犯罪论坛上出售,它允许攻击者从系统中窃取敏感数据。
9、Jenkins服务器中的CloudBees漏洞可导致远程代码执行
https://securityaffairs.com/143237/security/jenkins-cloudbees-flaws.html 云安全公司 Aqua 的研究人员在 Jenkins 开源自动化服务器中发现了两个漏洞链,这些漏洞可能导致代码在目标系统上执行。Jenkins 是最流行的开源自动化服务器,由 CloudBees 和 Jenkins 社区维护。自动化服务器支持开发人员构建、测试和部署他们的应用程序,它在全球拥有数十万个活跃安装,用户超过 100 万。
10、自去年12月以来VMware NSX Manager漏洞被广泛利用
https://securityaffairs.com/143172/hacking/vmware-nsx-manager-bugs-attacks.html 网络安全公司 Wallarm 警告称,利用VMware NSX Manager中的严重漏洞进行持续攻击,这些漏洞被追踪为CVE-2021-39144(CVSS 评分为 9.8)和CVE-2022-31678 (CVSS 评分为 9.1)。VMware NSX 是 VMware vCenter Server 中提供的网络虚拟化解决方案。漏洞可能导致预先验证的攻击者远程执行代码。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
禁用XXE处理漫谈
前言
近期准备面试题时,XXE漏洞防范措施(或者说修复方式)在一些文章中比较简略,故本文根据研究进行总结,作为技术漫谈罢了。
简述
XXE漏洞
XXE(XML外部实体注入),程序解析XML数据时候,同时解析了攻击者伪造的外部实体。XML用途是为了跨平台语言传输数据,常常用于WEB开发等。
XXE漏洞攻防情况
通常来说,XML文档生成时会常用到XXE和内部实体。因此开发团队根据项目需求去进行防范XXE漏洞。
然而实际情况是,即使采取了防范措施(错误的方法),XXE漏洞仍然可以大行其道。
有一个案例,某开发团队针对CVE-2018-20318漏洞进行了及时的修复,依照的是官方的修复方案:
禁止实体扩展引用,dbFactory.setExpandEntityReferences(false)
然而后续XXE漏洞仍然可以奏效,有师傅又提交了CVE漏洞。
最后有师傅总结正确的修复方法,如下:
禁用XXE处理分析
根据上述所说,XXE漏洞的正确处理是尤为重要的。我们这里以Java为例,并且应用偏向于JAXP API进行分析如何禁用XXE处理。
禁用文档类型
首先可以禁用文档类型。实体通过XML 文档的 DOCTYPE 进行声明。
我们在进行安全开发规划时,如确定不需要 DOCTYPE 声明时,可以完全禁用禁用文档类型。
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
当我们设置为true时,disallow-doctype-decl 使XML处理器发现DOCTYPE 声明时抛出异常。
禁用外部实体声明
其次是可以允许声明DOCTYPE,但禁用外部实体声明。
故若想要正常处理其他DTD声明,只针对外部实体进行抛出异常。可以用下面两种方法设置为flase来处理:
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
补充说明:在PHP中,libxml库默认下是安全的,总是禁用外部实体。除非通过设置LIBXML_NOENT参数进行允许。如下:
$doc = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOENT); // !XXE enabled!$doc = simplexml_load_string($xml, "SimpleXMLElement"); // XXE disabled
启用安全处理
在Java中可以使用Feature for Secure Processing (FSP)进行安全处理。如下:
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
FSP属于一种核心Java机制,用于以应用限制去配置XML处理器,从而可以防范XML拒绝服务攻击和XXE漏洞。
默认设置下,FSP处于部分启用的状态,XML拒绝服务攻击可以防范。而XXE漏洞我们需要通过调用setFeature方法,将FSP由部分启用转为完全启用。
不过也有特例,例如Apache Xerces中FSP不限制外部连接,无法防范XXE漏洞。
总之,开发人员应当测试涉及XXE漏洞的FSP配置,并结合其他方式来禁用或者限制XXE。
禁用实体引用扩展
XML文档中寻找实体引用主要有两种方式:
(1)DOM XML解析器作值替换引用
(2)DOM树创建空实体进行引用
将实体作值替换的机制在解析恶意XML文件时,可能会泄露敏感信息。
在Java中,对象DocumentBuilder中的etExpandEntityReferences方法用于配置实体引用:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setExpandEntityReferences(false);
当配置为false时,不会进行实体引用。因而可以防范XXE漏洞。
扩展外部实体引用是发生在已提取外部内容之后。
因此禁用后且攻击者无法造成泄露敏感数据,仍然执行请求外部资源。
不过经过禁用实体引用扩展,攻击者仅能进行blind SSRF攻击,难以实际造成威胁。
所以禁用实体引用扩展也是我们防范XXE漏洞的可选方案。
结束语
本文为XXE漏洞相关的防范措施漫谈,主要针对禁用XXE处理。
可以采取禁用文档类型、禁用外部实体声明、启用安全处理、禁用实体引用扩展这四种方式去进行防范。
网络安全日报 2023年03月10日
1、最近发现的 IceFire 勒索软件增加了对 Linux 系统的攻击
https://securityaffairs.com/143261/malware/icefire-ransomware-targets-linux.html SentinelLabs 研究人员发现了最近发现的 IceFire 勒索软件的新 Linux 版本,该软件被用于攻击全球多家媒体和娱乐组织。该勒索软件最初只针对基于 Windows 的系统,重点是科技公司。
2、8220 Gang 在最近的加密劫持攻击中使用了新的 ScrubCrypt 加密器
https://securityaffairs.com/143252/hacking/scrubcrypt-crypter-cryptojacking-attacks.html Fortinet 研究人员观察到挖矿组织 8220 Gang 在加密劫持攻击中使用了一种名为 ScrubCrypt 的新型加密器。
3、思科修补了企业级路由器IOS XR 软件中的一个高危 DoS 漏洞
https://www.securityweek.com/vulnerability-exposes-cisco-enterprise-routers-to-disruptive-attacks/ 思科本周宣布了针对 ASR 9000、ASR 9902 和 ASR 9903 系列企业路由器 IOS XR 软件中高危拒绝服务 (DoS) 漏洞的补丁。
4、黑客利用远程桌面软件缺陷部署 PlugX 恶意软件
https://thehackernews.com/2023/03/hackers-exploiting-remote-desktop.html 远程桌面程序(如 Sunlogin 和 AweSun)中的安全漏洞正被威胁行为者用来部署 PlugX 恶意软件。AhnLab 安全紧急响应中心 (ASEC) 在一项新的分析中表示,这标志着继续滥用这些漏洞在受感染的系统上提供各种有效载荷。
5、Qakbot 恶意软件利用OneNote进行传播分发
https://cyware.com/news/onenote-used-as-new-distribution-channel-for-qakbot-malware-ac5257d1 Qakbot、Qbot、Pinkslipbot、QuakBot - 一种具有多个名称的复杂恶意软件。它已经活跃了十多年,今年 1 月,研究人员观察到 Qakbot 活动使用 OneNote 文档进行传播分发。这标志着 Qbot 是一系列使用这种分发方法的恶意软件中的另一个。
6、研究人员展示了由AI生成的多态恶意软件 BlackMamba
https://cyware.com/news/beware-ai-generates-a-truly-polymorphic-malware-blackmamba-d3599eb7 为了展示基于 AI 的恶意软件的威力和能力,研究人员开发了一种攻击系统,其中代码在运行时动态重新生成,无需 C2 服务器。该过程引发了一种名为 BlackMamba 的恶意概念验证攻击。该恶意软件可以绕过任何自动安全检测系统而不会发出任何危险信号。
7、Bitwarden 漏洞可让黑客使用 iframe 窃取密码
https://www.bleepingcomputer.com/news/security/bitwarden-flaw-can-let-hackers-steal-passwords-using-iframes/ Bitwarden 的凭据自动填充功能包含一种危险行为,可能允许嵌入受信任网站的恶意 iframe 窃取人们的凭据并将其发送给攻击者。
8、Microsoft Excel现在默认禁止不受信任的XLL加载项
https://www.bleepingcomputer.com/news/microsoft/microsoft-excel-now-blocking-untrusted-xll-add-ins-by-default/ 微软1月份表示,Excel 电子表格软件现在在全球 Microsoft 365 用户中默认阻止不受信任的 XLL 加载项。并在进入初始测试阶段时向 Microsoft 365 更新计划中添加了一个新条目,首先向 Insiders 测试用户推出。该新功能将于 3 月下旬向当前、每月企业和半年企业三个频道中的所有桌面用户推出。
9、Bitrix CMS漏洞使俄罗斯遭受ICS攻击数量增加
https://www.securityweek.com/exploitation-of-bitrix-cms-vulnerability-drives-ics-attack-surge-in-russia/ 卡巴斯基发现俄罗斯和邻国工业控制系统 (ICS)遭攻击的计算机激增,该公司将其与影响内容管理系统 (CMS) 的漏洞利用的增加联系起来。这家网络安全公司周一发布了最新的ICS威胁态势报告,该报告重点关注 2022 年下半年。
10、德国将禁止中国的华为,中兴通讯进入部分5G网络
https://cybernews.com/news/germany-huawei-zte-5g-ban/ 德国计划禁止电信运营商在5G网络中使用中国公司华为和中兴通讯制造的某些组件,这可能是解决安全问题的重大举措。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
探究SMC局部代码加密技术以及在CTF中的运用
前言
近些日子在很多线上比赛中都遇到了smc文件加密技术,比较出名的有Hgame杭电的比赛,于是我准备实现一下这项技术,但是在网上看了很多文章,发现没有讲的特别详细的,或者是无法根据他们的方法进行实现这项技术,因此本篇文章就是分享我在学习以及尝试smc文件加密技术时所遇到的麻烦以及心得。
该篇文章将会从我学习这项技术的视角,讲述我屡次失败的经历,一点点深入。
SMC局部代码加密技术简介:
SMC(Software-Based Memory Encryption)是一种局部代码加密技术,它可以将一个可执行文件的指定区段进行加密,使得黑客无法直接分析区段内的代码,从而增加恶意代码分析难度和降低恶意攻击成功的可能性。
SMC的基本原理是在编译可执行文件时,将需要加密的代码区段(例如函数、代码块等)单独编译成一个section(段),并将其标记为可读、可写、不可执行(readable, writable, non-executable),然后通过某种方式在程序运行时将这个section解密为可执行代码,并将其标记为可读、可执行、不可写(readable, executable, non-writable)。这样,攻击者就无法在内存中找到加密的代码,从而无法直接执行或修改加密的代码。
SMC技术可以通过多种方式实现,例如修改PE文件的Section Header、使用API Hook实现代码加密和解密、使用VMProtect等第三方加密工具等。加密时一般采用异或等简单的加密算法,解密时通过相同的算法对密文进行解密。SMC技术虽然可以提高恶意代码的抗分析能力,但也会增加代码运行的开销和降低代码运行速度。
具体来说,SMC实现的主要步骤包括:
读取PE文件并找到需要加密的代码段。
将代码段的内容进行异或加密,并更新到内存中的代码段。
重定向代码段的内存地址,使得加密后的代码能够正确执行。
执行加密后的代码段。
SMC的优点在于:
SMC采用的是软件实现方式,因此不需要硬件支持,可以在任何平台上运行。
SMC对于程序的执行速度影响较小,因为代码解密和执行过程都是在内存中进行的。
SMC可以对代码进行多次加密,增加破解的难度。
SMC可以根据需要对不同的代码段进行不同的加密方式,从而提高安全性。
然而,SMC的缺点也显而易见,主要包括:
SMC的实现比较复杂,需要涉及到PE文件结构、内存管理等方面的知识。
SMC需要在运行时动态地解密代码,因此会对程序的性能产生一定的影响。
SMC只能对静态的代码进行加密,对于动态生成的代码无法进行保护。
SMC对于一些高级的破解技术(如内存分析)可能无法完全保护程序。
综上所述,SMC是一种局部代码加密技术,可以提高程序的安全性,但也存在一些局限性。在实际应用中,需要根据具体的情况选择最合适的保护方案,综合考虑安全性、性能和可维护性等因素。
[流程图]
+---------------------+
| 读取PE文件 |
| 找到代码段 |
+---------------------+
|
|
v
+---------------------------------+
| 对代码段进行异或加密 |
| 并更新到内存中的代码段 |
+---------------------------------+
|
|
v
+---------------------------------+
| 重定向代码段的内存地址, |
| 使得加密后的代码能够正确执行 |
+---------------------------------+
|
|
v
+---------------------+
| 执行加密后的代码段 |
+---------------------+
[小结一下]
前面说的非常的高端,其实通俗的讲就是程序可以自己对自己底层的字节码进行操作,就是所谓的自解密技术。其在ctf比赛中常见的就是可以将一段关键代码进行某种加密,然后程序运行的时候就直接解密回来,这样就可以干扰解题者的静态分析,在免杀方面也是非常好用的技术。可以利用该技术隐藏关键代码。
言归正传 如何实现这项技术
说实话,实现这项技术我是踩了非常多的坑的,接下来将会一一分享。
用伪代码解释一下该技术:
proc main:
............
IF .运行条件满足
CALL DecryptProc (Address of MyProc)//对某个函数代码解密
........
CALL MyProc //调用这个函数
........
CALL EncryptProc (Address of MyProc)//再对代码进行加密,防止程序被Dump
......
end main
OK,非常明确,首先我是使用了Dev-C++ 6.7.5编译器,使用的MinGW GCC 9.2.0 32bit Debug的编译规则。
我们回忆一下该项技术,加入我们需要加密的是函数fun,那么我们首先需要使用指针找到fun的地址,一开始我使用的是int类型的指针,代码如下:
void fun()
{
char flag[]="flag{this_is_test}";
printf("%s",flag);
}
int main ()
{
int *a=(int *)fun;
for(int i = 0 ; i < 10 ; i++ )
{
printf("%x ",*(a++));
}
}
输出结果为:
83e58955 45c738ec 616c66e5 e945c767 6968747b 73ed45c7 c773695f 745ff145 c7667365 7d74f545
然后我们把编译出来的文件放到ida里面观察。
可以发现输出的内容确实是fun的字节码,但是由于int在c语言中占用了四个字节,因此是由四个16进制的机器码根据小端序排列输出的,那么为了解决这种连续字节码的问题我们需要找到一个只占用一个字节的指针,首先我想到了char类型,于是我马上更改代码,使用char类型的指针,得到了如下的输出结果。
55 ffffff89 ffffffe5 ffffff83 ffffffec 38 ffffffc7 45 ffffffe5 66
显然,这里是忽略的char的符号位的问题,有符号char型如果最高位是1,意思是超过了0x7f,当%X格式化输出的时候,则会将这个类型的值拓展到int型的32位,所以才会出现0xff,被扩展为ffffffff。
一筹莫展之际,我想起了在c语言中还有一种数据类型是只占一个字节的,那就是byte类型的数据,将代码改成byte类型之后可以发现输出变得正常了。
输出为:
55 89 e5 83 ec 38 c7 45 e5 66
这个就是正确的字节码的形式了。
那么我们需要定位到程序段进行加密了,由于本次只是实验,我们采取简单的异或加密方式,异或加密的特点就是加密函数也可以是解密函数,极大的方便了我们此次实验。我们可以先在ida中看到我们需要加密的程序段的位置。
在ida中我们可以发现我们需要解密的fun函数占用的地址段是0x00401410-00401451,那我们只需要将这一段内存中的机器码进行异或加密理论上就可以实现smc文件加密技术了。
实现代码如下:
void fun()
{
char flag[]="flag{this_is_test}";
printf("%s",flag);
}
int main ()
{
byte *a=(byte *)fun;
byte *b = a ;
for( ; a!=(b+0x401451-0x401410+1) ; a++ )
{
*a=*a^3;
}
fun();
}
这段代码直接运行的话会出现内存错误,这是因为代码运行的时候对原本未被加密的fun函数进行了异或处理,导致本来应该是解密的操作变成了加密操作,然后机器无法识别该段内存就出现了内存错误,因此在运行代码前我们需要将文件中的fun函数部分进行加密操作。我这里使用idapython对字节码进行操作,然后将文件dump出来,完成对文件的加密。
idapython脚本为:
for i in range(0x401410,0x401451):
patch_byte(i,get_wide_byte(i)^3)
运行后把代码dump下来,再运行。
发现出现内存错误告警,猜测可能是dev-c++的编译器开启了随机基地址和数据保护,因此选择更换编译器,并关闭随机基地址选项。这里使用的是visual studio 2019,32位的debug模式进行编译。
但是遗憾的是仍然无法运行,思考了一会儿之后发现可能是该段内存没有被设置成可读、可执行、可写入,导致程序无法识别这段内存了,因此我们改变方法使用程序段的概念,通过对整个程序段进行加密解密,来实现smc技术。
使用的代码是:
#include<Windows.h>
#include<string>
#include<string.h>
using namespace std;
#include <iostream>
#pragma code_seg(".hello")
void Fun1()
{
char flag[]="flag{this_is_test}";
printf("%s",flag);
}
#pragma code_seg()
#pragma comment(linker, "/SECTION:.hello,ERW")
void Fun1end()
{
}
void xxor(char* soure, int dLen) //异或
{
for (int i = 0; i < dLen;i++)
{
soure[i] = soure[i] ^3;
}
}
void SMC(char* pBuf) //SMC解密/加密函数
{
const char* szSecName = ".hello";
short nSec;
PIMAGE_DOS_HEADER pDosHeader;
PIMAGE_NT_HEADERS pNtHeader;
PIMAGE_SECTION_HEADER pSec;
pDosHeader = (PIMAGE_DOS_HEADER)pBuf;
pNtHeader = (PIMAGE_NT_HEADERS)&pBuf[pDosHeader->e_lfanew];
nSec = pNtHeader->FileHeader.NumberOfSections;
pSec = (PIMAGE_SECTION_HEADER)&pBuf[sizeof(IMAGE_NT_HEADERS) + pDosHeader->e_lfanew];
for (int i = 0; i < nSec; i++)
{
if (strcmp((char*)&pSec->Name, szSecName) == 0)
{
int pack_size;
char* packStart;
pack_size = pSec->SizeOfRawData;
packStart = &pBuf[pSec->VirtualAddress];
xxor(packStart, pack_size);
return;
}
pSec++;
}
}
void UnPack() //解密/加密函数
{
char* hMod;
hMod = (char*)GetModuleHandle(0); //获得当前的exe模块地址
SMC(hMod);
}
int main()
{
//UnPack();
UnPack(); //
Fun1();
return 0;
}
如此操作后,做一个简单的验证看看能不能成功,就是进行两次调用unpack函数来看看程序能否正常运行,发现程序成功的输出了flag那么使用程序段的方式是正确的!!
这段代码实现了一个简单的SMC自修改代码技术,主要包括以下几个部分:
使用 #pragma code_seg 指令将 Fun1() 函数代码段定义为一个名为 ".hello" 的新代码段,使其与其他代码段隔离开来,方便后面的加密和解密。
使用 #pragma comment(linker, "/SECTION:.hello,ERW") 指令将 ".hello" 代码段设置为可读、可执行、可写入的,以便后面的加密和解密操作。
定义 Fun1end() 函数作为 Fun1() 函数的结束点,以便后面的加密操作。
定义 xxor() 函数用于将指定的字符串进行异或加密/解密。
定义 SMC() 函数,该函数用于解密指定代码段的内容。具体操作是遍历 PE 文件的各个段,找到指定代码段并对其进行解密。
定义 UnPack() 函数,该函数用于对当前进程的代码段进行解密操作。具体操作是获取当前模块的句柄,读取模块的 PE 文件并对指定代码段进行解密。
在 main() 函数中调用 UnPack() 函数进行解密操作,然后调用 Fun1() 函数进行计算。
需要注意的是,这段代码只是一个简单的示例,实际应用中可能需要更加复杂的加密和解密方法,以及更多的安全措施来保护代码的安全性。同时,SMC自修改代码技术也存在一定的风险和挑战,需要仔细评估和规划,谨慎使用。
代码写好之后,仍然需要我们自己手动先加密程序,在别的文章中所使用的方法和工具我找了很久都没有找到,因此决定自己使用ida+idapython来实现对程序的加密,最后dump出程序,然后程序运行时会自己进行解密。
ida中的hello程序段
我们需要的是将所有hello程序段的内容进行加密。
idapython脚本:
for i in range(0x417000,0x4170A4):
patch_byte(i,get_wide_byte(i)^3)
虽然dump出来的程序能输出我们程序中的值,但是仍然出现了堆栈不平衡的问题,因此在终端运行程序时仍然会爆出内存错误的告警,研究到此时我已经心态崩了,找了很多大牛的博客都没有详细提到怎么实现加密程序,那这样的话只能自己手撸了,这里使用python语言,代码为:
import pefile
def encrypt_section(pe_file, section_name, xor_key):
"""
加密PE文件中指定的区段
"""
# 找到对应的section
for section in pe_file.sections:
if section.Name.decode().strip('\x00') == section_name:
print(f"[*] Found {section_name} section at 0x{section.PointerToRawData:08x}")
data = section.get_data()
encrypted_data = bytes([data[i] ^ xor_key for i in range(len(data))])
pe_file.set_bytes_at_offset(section.PointerToRawData, encrypted_data)
print(f"[*] Encrypted {len(data)} bytes at 0x{section.PointerToRawData:08x}")
return
print(f"[!] {section_name} section not found!")
if __name__ == "__main__":
filename = "test1.exe"#加密文件的名字,需要在同一根目录下
section_name = ".hello"#加密的代码区段名字
xor_key = 0x03#异或的值
print(f"[*] Loading {filename}")
pe_file = pefile.PE(filename)
# 加密
print("[*] Encrypting section")
encrypt_section(pe_file, section_name, xor_key)
# 保存文件
new_filename = filename[:-4] + "_encrypted.exe"
print(f"[*] Saving as {new_filename}")
pe_file.write(new_filename)
pe_file.close()
这段代码实现了对PE文件中指定的代码区段进行异或加密的功能,具体解释如下:
导入pefile模块:该模块提供了解析PE文件格式的功能;
定义encrypt_section函数:该函数接收三个参数,分别是PE文件对象pe_file、待加密区段名称section_name和异或值xor_key。函数首先遍历PE文件中的所有区段,查找名字为section_name的区段;
对指定的代码区段进行加密:如果找到了名字为section_name的代码区段,该函数调用PE文件对象的set_bytes_at_offset方法,将指定区段中的每个字节和异或值异或,得到加密后的数据,并将加密后的数据写回指定区段。注意,set_bytes_at_offset方法需要传入一个字节串作为参数,因此需要将加密后的数据转换为字节串;
main函数:该函数首先指定待加密的PE文件名filename、待加密的区段名称section_name和异或值xor_key。然后,它创建一个PE文件对象pe_file,读入PE文件;接着调用encrypt_section函数,对指定区段进行加密;最后,将加密后的文件写入新的文件中,并关闭PE文件对象。
这段代码的执行过程如下:
调用main函数,读取PE文件test1.exe;
找到名字为.hello的区段,对其中的每个字节和异或值0x03进行异或,得到加密后的数据;
将加密后的数据写回.hello区段,并将加密后的文件保存为test1_encrypted.exe。
脚本完成后,满怀激动的运行它!
成功了!!
终端也成功的运行出了加密后的程序,我们再到ida中观察它。
成功的无法静态分析。那么至此我们就成功的实现了该项技术!
CTF实战
SMC 技术在 CTF 比赛中有很多应用,主要是用来对抗反调试和反编译等工具的逆向分析。下面是几个常见的应用场景:
局部代码加密:CTF 比赛中有很多加密的二进制程序,利用 SMC 技术可以对程序的关键代码进行加密,增加分析难度,提高程序的安全性。
加密字符串和常量:CTF 比赛中有很多加密的字符串和常量,这些字符串和常量通常用来存储关键信息,如密钥、密码等。利用 SMC 技术可以对这些字符串和常量进行加密,增加分析难度,提高程序的安全性。
防止调试:CTF 比赛中有很多程序会使用调试器进行逆向分析,利用 SMC 技术可以对程序进行调试器检测和防御,防止调试器的使用。
防止反编译:CTF 比赛中有很多程序会被反编译,利用 SMC 技术可以对程序进行反编译检测和防御,防止程序被反编译。
总之,SMC 技术在 CTF 比赛中是一个非常有用的技术,可以用来保护程序的安全性,增加分析难度,提高程序的安全性。
[Hgame2023]patchme
点开文件可以看到一个可疑函数对文件地址进行操作,怀疑是smc文件加密技术。
跟踪过去看一看。
发现地址爆红,出现大量没有被解析的数据段那么实锤此处就是smc文件加密,那么我们将其异或回去,使用idc或者idapython
运行idapython脚本之后发现本来ida无法识别的汇编代码变得可以识别了,那么我们声明所有的未声明函数。
就可以在下面找到输出flag的方法了。
EXP
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<string>
#include<cstring>
#include<list>
#include<stdlib.h>
using namespace std;
typedef int status;
typedef int selemtype;
int ida_chars[] =
{
0xFA, 0x28, 0x8A, 0x80, 0x99, 0xD9, 0x16, 0x54,
0x63, 0xB5, 0x53, 0x49, 0x09, 0x05, 0x85, 0x58,
0x97, 0x90, 0x66, 0xDC, 0xA0, 0xF3, 0x8C, 0xCE,
0xBD, 0x4C, 0xF4, 0x54, 0xE8, 0xF3, 0x5C, 0x4C,
0x31, 0x83, 0x67, 0x16, 0x99, 0xE4, 0x44, 0xD1,
0xAC, 0x6B, 0x61, 0xDA, 0xD0, 0xBB, 0x55
};
int c[]={
0x92, 0x4F, 0xEB, 0xED, 0xFC, 0xA2, 0x4F, 0x3B,
0x16, 0xEA, 0x67, 0x3B, 0x6C, 0x5A, 0xE4, 0x07,
0xE7, 0xD0, 0x12, 0xBF, 0xC8, 0xAC, 0xE1, 0xAF,
0xCE, 0x38, 0x91, 0x26, 0xB7, 0xC3, 0x2E, 0x13,
0x43, 0xE6, 0x11, 0x73, 0xEB, 0x97, 0x21, 0x8E,
0xC1, 0x0A, 0x54, 0xAE, 0xB5, 0xC9,0x28
};
int main ()
{
for(int i = 0 ; i <= 46 ; i ++ )
{
printf("%c",ida_chars[i]^c[i]);
}
}
网络安全日报 2023年03月09日
1、Fortinet修复了一个影响FortiOS 和 FortiProxy 的严重漏洞
https://securityaffairs.com/143227/security/fortinet-fortios-fortiproxy-critical-bug.html Fortinet 解决了影响 FortiOS 和 FortiProxy 的严重堆缓冲区溢出漏洞,该漏洞可导致任意代码执行。跟踪为 CVE-2023-25610 (CVSS v3 9.3)。远程、未经身份验证的攻击者可以利用此漏洞在易受攻击的设备上执行任意代码,并通过发送特制请求在 GUI 上触发 DoS 。
2、Veeam 解决了备份服务中影响备份和复制软件的高危漏洞
https://securityaffairs.com/143218/security/veeam-backup-replication-bug.html Veeam 解决了备份服务中的一个高危漏洞,该漏洞被跟踪为 CVE-2023-27532(CVSS v3 分数:7.5),影响所有版本的备份和复制软件版本。
3、Lazarus APT 在最近的一次攻击中使用了 0day
https://securityaffairs.com/143210/hacking/lazarus-apt-0-day.html ASEC(AhnLab 安全紧急响应中心)观察到与朝鲜有关系的 Lazarus APT 利用未公开软件中的零日漏洞入侵韩国的一家金融企业实体。
4、自去年 12 月以来,VMware NSX Manager 漏洞被广泛利用
https://securityaffairs.com/143172/hacking/vmware-nsx-manager-bugs-attacks.html 网络安全公司 Wallarm 警告称,黑客正在利用VMware NSX Manager 中的严重漏洞进行持续攻击,这些漏洞被追踪为CVE-2021-39144(CVSS 评分为 9.8)和CVE-2022-31678 (CVSS 评分为 9.1)
5、谷歌发布了 Chrome 111 修复了40个漏洞,其中包含8个高危
https://www.securityweek.com/chrome-111-patches-40-vulnerabilities/ 谷歌本周发布 Chrome 111 稳定版,其中包含 40 个漏洞的补丁
6、Jenkins 披露了两个严重的安全漏洞,可允许代码执行攻击
https://thehackernews.com/2023/03/jenkins-security-alert-new-security.html Jenkins 开源自动化服务器中披露了一对严重的安全漏洞,可能导致代码执行攻击。漏洞编号为CVE-2023-27898和CVE-2023-27905 ,影响 Jenkins 服务器和更新中心,并被云安全公司 Aqua统称为CorePlague 。2.319.2 之前的所有 Jenkins 版本都容易受到攻击和利用。
7、攻击者在网络钓鱼诈骗中伪装为ChatGPT
https://www.hackread.com/scammers-chatgpt-phishing-scam/ 最新的 ChatGPT 网络钓鱼骗局目前针对爱尔兰、澳大利亚、德国、丹麦和荷兰的用户。
8、工控系统漏洞允许黑客完全控制Wago PLC
https://www.securityweek.com/critical-vulnerabilities-allow-hackers-to-take-full-control-of-wago-plcs/ 德国工业自动化解决方案供应商 Wago 发布了其多个可编程逻辑控制器 (PLC) 的补丁,以解决四个漏洞,包括可被利用以完全控制目标设备的漏洞。这些漏洞是由佐治亚理工学院网络物理安全实验室的 Ryan Pickren 发现的。
9、全球头号加密恶意软件 Emotet 在沉寂了三个月后卷土重来
https://www.freebuf.com/news/359723.html Emotet恶意软件在沉寂了三个月后,从本周二上午开始再次发送恶意电子邮件,并感染世界各地的设备。Emotet是一种臭名昭著的恶意软件,通过含有病毒的Word和Excel的电子邮件传播。当用户打开这些文档并启用时,Emotet DLL将被下载并加载到内存中。一旦Emotet被加载,该恶意软件将潜伏等待来自远程命令和控制服务器的指示。
10、最高法工作报告:坚决制止大数据杀熟
https://www.thepaper.cn/newsDetail_forward_22165696 最高法工作报告提出,惩处滥用数据、算法等排除、限制竞争的行为,坚决制止“大数据杀熟”、强制“二选一”等“店大欺客”行为。
免责声明
以上内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以上内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以上内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

