网络安全日报 2021年03月05日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Linux内核修复本地提权漏洞
https://www.securityweek.com/privilege-escalation-bugs-patched-linux-kernel
2、托管服务提供商CompuCom遭恶意软件攻击
https://www.securityweek.com/managed-services-provider-compucom-hit-malware
3、思科多款产品因Snort检测引擎漏洞遭DoS攻击
https://www.securityweek.com/several-cisco-products-exposed-dos-attacks-due-snort-vulnerability
4、多个黑客组织利用Exchange Server 零日漏洞攻击
https://www.securityweek.com/multiple-cyberspy-groups-target-microsoft-exchange-servers-zero-day-flaws
5、500万Adecco.com用户数据泄露
https://cybernews.com/security/5-million-adecco-com-users-data-leaked/
6、FireEye研究人员发现与SolarWinds攻击有关的新恶意软件
https://securityaffairs.co/wordpress/115291/malware/sunshuttle-backdoor-solarwinds-hack.html
7、GRUB项目发布安全更新修复数百个漏洞
https://securityaffairs.co/wordpress/115258/hacking/grub2-boot-loader-flaws.html
8、Group-IB发布报告勒索软件攻击在2020年增长了 150%以上
https://securityaffairs.co/wordpress/115268/cyber-crime/ransomware-landscape-2020.html
9、WiFi Mouse应用存在漏洞可劫持台式电脑
https://threatpost.com/unpatched-bug-in-wifi-mouse-opens-pcs-to-attack/164480/
10、俄罗斯网络犯罪论坛Maza遭数据泄露
https://www.zdnet.com/article/maza-russian-cybercriminal-forum-suffers-data-breach/
CTF REVERSE练习之算法分析
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
首先从PEID的算法分析插件来介绍,要知道不管是在CTF竞赛的REVERSE题目中,还是在实际的商业产品中,很多程序都喜欢使用成熟的标准算法来作为注册算法的一个部分,如MD5、Blowfish等。这些算法本身往往就十分复杂和难以你理解,如果从反汇编指令来阅读这些算法则更是难上 加难。对于标准算法,实际上我们并不需要知道这些算法的详细计算过程,我们只需要知道是哪一个算法即可,因为标准算法网上都能找到成熟的库文件或者源码等。
PEiD有一个叫做Krypto ANALyzer的插件,使用这个插件可以对程序进行扫描,通过特征匹配来识别程序内部可能用到的一些标准算法。Krypto ANALyzer的使用方法为:点击PEiD主界面右下角的“=>”按钮,选择“插件”菜单项,然后选择“Krypto ANALyzer”,就可以弹出Krypto ANALyzer插件了。Krypto ANALyzer插件会自动分析程序内部可能用到的标准算法,如图所示:
下图中显示了程序中在地址00401E5C处存在MD5算法的特征:
除了要知道这些插件呢,还有一些小技巧,在IDA中,我们可以通过按下N键来对一个变量/函数/标记等进行重命名操作,函数和变量命名对于帮主我们理解程序的内部逻辑非常重要,就好比我们在编程的时候,培养良好的编程风格非常重要一样。
比如,如果函数sub_4012E0经过我们分析之后,确定其功能为将传入的字符串转为大写形式,那么我们可以选中sub_4012E0后按下N键对其进行重命名(将函数名命名为fnStringToUpper):
IDA还可以给汇编指令或者伪代码来添加注释。如果要对某一条汇编指令添加注释,只需要在汇编指令所在行按下封号(即;)即可弹出对话框来接收注释;如果要给伪代码添加注释,则只需在伪代码所在行按下斜杠(即/)即可弹出对话框来接收注释。
OD也可以给汇编指令添加注释,只需要在汇编指令所在行后一列的空白处双击鼠标左键即可,如图所示:
我们来看实验吧,同样进入实验链接https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014111410041300001。
好好看下实验描述,
主机C:\Reverse\4目录下有一个CrackMe4.exe程序,运行这个程序的时候会提示输入用户名和注册码进行注册,当输入正确的用户名和注册码时,会弹出成功提示的消息框,请对CrackMe4.exe程序进行逆向分析和调试,尝试编写一个注册机程序。
首先运行这个程序后要求输入一个用户名和密码进行注册,当注册失败的时候,程序将弹出一个消息框提示不正确,如图所示:
那么我们可以通过IDA的交叉引用功能来定位这一块的代码。使用IDA载入CrackMe4.exe程序,待分析结束后,通过Imports TAB页面找到MessageBoxA,双击来到反汇编视图,在MessageBoxA按下X按键对其进行交叉引用查找,经过一个一个进行分析,我们发现sub_4016B0就是我们所要找的关键函数,我们通过F5得到这个函数的伪代码。通过对伪代码添加注释,以及对变量进行重命名操作,我们得到如下的代码片段:
上面的伪代码有两个错误,就是在第一个if语句中会判断密码的长度是否为33,如果不是33就弹出错误提示。其实这里是32(而用户名的长度则不能大于10)只是Hex-Rays Decompiler这个插件生成伪代码时出错了,所以需要记住,F5生成的伪代码并不保证完全正确。32这个长度对应汇编指令中的代码片段如下:
通过上面的伪代码的分析,我们发现只有sub_401510这个函数的功能并不清楚,通过双击sub_401510查看对应的伪代码,发现有点复杂,暂时无法理解,不过这并不要紧。
我们来用PEID的算法识别使用PEiD的Krypto ANALyzer进行快速识别,将CrackMe4.exe载入PEiD,点击PEiD主界面右下角的“=>”按钮,选择“插件”菜单项,然后选择“Krypto ANALyzer”,就可以弹出Krypto ANALyzer插件了,Krypto ANALyzer提示程序使用了MD5算法,如下图所示:
我们记住00401E5C这个地址,在IDA的反汇编指令视图(IDA View)中按下G键,输入00401E5C,就会自动跳转到计算MD5的函数代码中,如图所示:
从这里并不能得到什么有用的信息,我们需要通过不断的回溯来理解程序的代码逻辑。通过往上查阅代码,我们知道00401E5C 位于函数sub_401D10之中,我们对sub_401D10进行交叉引用查找,如图所示:
可以从sub_401D10回溯到sub_4026F0,继续通过交叉引用往上回溯,依次为sub_4027B0、sub_401C00、sub_401BB0、sub_401510,而sub_401510就是我们在实验步骤一种为一个暂时不理解的函数。那么我们可以猜测sub_401510这个函数就是用来计算用户名的MD5值的,我们可以通过OD动态调试来验证我们的想法。
通过阅读IDA中的反汇编代码,我们知道在00401752处调用了sub_401510这个函数,
.text:00401752 call sub_401510
现在OD载入CrackMe4.exe程序,在00401752处设置一个断点,然后按F9运行程序,用户名输入test,密码输入一个32个字符的任意字符串,单击“注册”按钮,程序便会自动断下,断下后按F8进行单步跟踪,执行sub_401510这个函数后,我们看到eax寄存器的值为098F6BCD4621D373CADE4E832627B4F6,这个恰好就是test的MD5值。
用工具就是为了帮我们把复杂的事情变得简单起来,我们算法分析完之后就可以直接把题目解了,我们来编写一个注册机了。程序的注册算法为:将用户名进行MD5计算得到一个哈希值,将哈希值转换为答谢字符串即可,其中用户名的长度在1~10之间,不能超过10.
Python内置了MD5算法,可以非常方便的计算MD5值,我们编写这样一段脚本即可:(代码位于C:\Reverse\4\Keygen.py)
import hashlib
while True**:**
username = raw_input("input username:")
md5 = hashlib.md5(username).hexdigest().upper()
serial = md5[::-1] # 翻转**字符串**
print "serial: %s" % serial
我们输入用户名Wins0n,就可以得到注册码为51F561458ADAEEBA43A57CF7E59F6CC4,输入程序可以成功注册,如图所示:
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
网络安全日报 2021年03月04日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、英特尔为漏洞赏金计划平均每年支付80W美金
https://www.securityweek.com/intel-paid-out-800000-year-through-bug-bounty-program
2、网络安全公司Qualys遭Clop勒索软件攻击并导致数据泄露
https://securityaffairs.co/wordpress/115250/data-breach/qualys-clop-ransomware.html
3、100多家意大利银行遭Ursnif Trojan攻击
https://securityaffairs.co/wordpress/115245/cyber-crime/ursnif-targets-italian-banks.html
4、Chrome发布更新修复高危漏洞
https://threatpost.com/google-patches-actively-exploited-flaw-in-chrome-browser/164468/
5、微软发布紧急更新修复Exchange Server 4个0day漏洞
https://thehackernews.com/2021/03/urgent-4-actively-exploited-0-day-flaws.html
6、微软向发现Microsoft账户劫持漏洞的研究员支付5W美元赏金
https://thehackernews.com/2021/03/a-50000-bug-couldve-allowed-hackers.html
7、VMware修补View Planner中的远程执行代码漏洞
https://www.securityweek.com/vmware-patches-remote-code-execution-vulnerability-view-planner
8、Google开始测试替代Cookie跟踪的方法
https://www.securityweek.com/google-vows-stop-tracking-individual-browsing-ads
9、研究人员发现Eclipse Jetty中存在DoS漏洞
https://www.technadu.com/dos-vulnerability-eclipse-jetty-urgent-updates/251662/
10、美国软件公司Mariana Tek泄露了用户的记录
https://cybernews.com/security/fitness-management-platform-mariana-tek-leaked-1-5-million-user-records/
CTF REVERSE练习之API断点
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
在逆向分析中经常会遇到输入表这个概念,输入表中保存的是在程序中调用的但定义在其他DLL中的函数信息以及对应的DLL信息。我们在程序中直接调用Windows API的时候,这些API都可以在程序的输入表中可以看到。
使用PEiD可以方便的查看程序的输入表结构,将程序载入PEiD后,点击主界面中的“子系统”,在弹出的“PE细节”中点击“输入表”就可以打开“输入表查看器”了,如图所示:
在实验《CTF REVERSE练习之API定位》中使用的方法其实就是通过输入表中的API来定位关键函数代码的。
虽然输入表中可以看到程序使用了哪些API,进一步通过OD的API参考断点,或者是IDA中的交叉引用就可以定位到程序在哪些地方使用了这些API,但是我们也可以通过动态调用的方式来消除输入表中的API特征。
消除了特征是不是我们就找不到了啊,那我们怎么做题呢
我们可以通过配合使用LoadLibrary以及GetProcAddress,我们就可以动态获取API函数的地址了,其中LoadLibrary用于加载动态链接库,GetProcAddress用于获取指定动态链接库中指定API函数的地址。动态调用的API无法通过OD的输入表API参考断点或者IDA的交叉引用来进行定位。
API断点
在OD中可以对特定的API设置一个断点,不管是直接调用的API还是动态调用的API。
在OD的反汇编指令窗口中按下Ctrl+G快捷键,在弹出的对话框中输入MessageBoxA,单击“确定”按钮后就可以来到MessageBoxA的函数代码了,我们对其第一条指令设置一个断点,即在77D507EA按下F2即可。
在OD左下角的Command窗口中输入bp命令也可以下断点,比如输入bp MessageBoxA,按下Enter就可以对MessageBoxA设置一个断点了。
下面开始实验。
打开蚁景网安实验室(www.yijinglab.com)搜索实验《CTF REVERSE练习之API断点》。
先看题目描述:
主机C:\Reverse\3目录下有一个CrackMe3.exe程序,运行这个程序的时候会提示输入一个密码,当输入正确的密码时,会弹出过关提示消息框,请对CrackMe3.exe程序进行逆向分析和调试,找到正确的过关密码。
这个CrackMe程序不再直接调用MessageBoxA这个API,主要考察通过API断点以及MessageBoxA的阻塞特性来定位关键函数代码的方法,以及在逆向分析中结合使用OD与IDA的方法。
这个实验中程序的外部行为与《CTF REVERSE练习之逆向初探》、《CTF REVERSE练习之API定位》两个实验的程序行为是一致的,因此这里不再赘述。
使用OD载入CrackMe3.exe程序之后,按下Ctrl+G快捷键,输入MessageBoxA定位到MessageBoxA的代码,在第一条指令按下F2设置一个断点,如图所示:
按下F9使程序执行起来,随便输入一个密码(如test)后单击“确定”按钮,程序将在MessageBoxA中的第一条指令断下,这时候依次点击OD菜单中的“调试”——“执行到用户代码”,如下图所示:
我们继续看题这时候CrackMe的错误提示消息框将会弹出来,我们点击消息框的“确定”按钮,程序在OD中会再次断下。这次是因为点击了“执行到用户代码”的原因,OD会在调用了MessageBoxA的下一条指令自动断下,如图所示:
可以知道004015F6处的call就是调用了MessageBoxA函数:
004015F6 . FF55 60 call dword ptr [ebp+60]
我们按F8进行单步跟踪,就可以看到一个奇怪的字符串,而这个字符串就是我们要找的过关密码,如图所示:
我们来用IDA进行分析在实验步骤一中,我们在MessageBoxA断下后,通过“执行到用户代码”回到CrackMe空间的代码,通过简单的F8单步跟踪,就很幸运的看到了过关密码。然而在实际调试过程中,可能需要跟踪很久才能发现一点蛛丝马迹,那么我们可以结合IDA的静态分析功能来加速我们的逆向过程。
在前面的分析中,我们知道在004015F6这个地址调用了MessageBoxA函数,现在使用IDA载入CrackMe3.exe,待分析结束后按下G,然后输入“004015F6”后点击OK按钮,就会自动跳转到004015F6这个地方了,如图所示:
我们在这里按下F5生成函数的伪代码。因为程序中已经对LoadStringA以及MessageBoxA这两个API进行了动态调用,所以这里的伪代码看起来也是非常怪异了,不过我们可以通过添加注释来帮助我们对程序的理解,如图所示:
可以看到程序使用了strcmp对输入的密码进行了判断,如果是HeeTianLab则弹出正确提示,否则弹出错误提示。
第三种利用MessageBox的阻塞特性定位关键代码。
我们知道MessageBox是一个阻塞的API,就是当调用这个API的时候,会弹出一个消息框,此时程序的代码执行流就会自动阻塞在调用MessageBox的地方,直到点击提示框上的按钮或者关闭提示框时,程序才会继续往下执行。
那么在程序弹出MessageBox的时候,我们可以在OD中让程序断下来,然后通过“执行到用户代码”来回到调用MessageBox的地方,这就是说MessageBox本身就类似于“断点”。
使用OD载入CrackMe3.exe,如果之前设置了断点,为了防止干扰,我们需要先清除掉之前设置的断点。通过OD的菜单项“查看”——“断点”可以打开断点窗口,然后通过右键菜单来删除已经设置的断点,如图所示:
断点清理完毕之后,按F9运行程序,随便输入一个密码(如test)进行测试,在弹出消息框之后不要关闭消息框,在OD顶部的工具栏中点击“暂停”执行按钮(或者按F12快捷键),程序就会自动断下,如图所示:
这时候依次点击OD菜单中的“调试”——“执行到用户代码”, 我们点击消息框的“确定”按钮,程序在OD中会再次断下。这次是因为点击了“执行到用户代码”的原因,OD会在调用了MessageBoxA的下一条指令自动断下,如图所示:
接下来和实验步骤一的情况类似了,F8单步跟踪就能看到密码了。
逆向真的是一个很复杂的知识点,想要掌握需要花不少时间,这次实验和上次学习的API定位结合的很紧,有了API定位基础本次实验也能比较好理解。
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
网络安全日报 2021年03月03日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Google修补了Android中的高危远程代码执行漏洞
https://www.securityweek.com/google-patches-critical-remote-code-execution-vulnerability-android
2、“ Unc0ver”最新版本利用了1月份苹果修复的漏洞
https://www.securityweek.com/new-unc0ver-jailbreak-uses-vulnerability-apple-said-was-exploited
3、法国跨国乳制品公司Lactalis遭网络攻击
https://securityaffairs.co/wordpress/115173/hacking/lactalis-cyber-attack.html
4、Ryuk Ransomware通过SMB共享进行自我传播
https://threatpost.com/ryuk-ransomware-worming-self-propagation/164412/
5、电子售票平台Ticketcounter数据库在黑客论坛公开
https://www.bleepingcomputer.com/news/security/european-e-ticketing-platform-ticketcounter-extorted-in-data-breach/
6、 Gootkit RAT利用SEO通过受损网站传播恶意软件
https://thehackernews.com/2021/03/gootkit-rat-using-seo-to-distribute.html
7、ObliqueRAT恶意软件利用图片隐写加载攻击载荷
https://threatpost.com/website-images-obliquerat-malware/164395/
8、马来西亚航空披露长达九年的数据安全事件
https://www.zdnet.com/article/malaysia-airlines-suffers-data-security-incident-spanning-nine-years/
9、UHS披露在去年9月网络攻击中损失6700W美元
https://www.securityweek.com/universal-health-services-takes-67-million-hit-cyberattack
10、Perl.com域在2020年9月已被黑客劫持
https://www.securityweek.com/hackers-control-perlcom-domain-months-hijack
CTF REVERSE练习之API定位
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
今天要做的实验是CTF REVERSE练习之API定位。
Windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为 Application Programming Interface,简称 API 函数。
另外需要注意的是两种编码,ANSI与Unicode,ANSI的ASCII字符集及其派生字符集(也称多字节字符集)比较旧,而Unicode字符集比较新,固定以双字节表示一个字。Windows操作系统在声明一个API时,如果这个API存在字符串参数,便会指定字符集。每个含有字符串参数的API同时有两个版本:即ANSI,Unicode。尾部带A的API是ANSI版本,带W的API是Unicode版本。
例如:我们在编程时使用的MessageBox实际上是一个宏,根据字符集的不同被定义为不同版本的MessageBox,如果是UNICODE字符集,则实际上为MessasgeBoxW,如果是ANSI字符集,则实际上为MessageBoxA:
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
交叉引用。
通过交叉引用(XREF)可以知道指令代码相互调用的关系,如下图所示:
这句“CODE XREF: WinMain(x,x,x,x)+10↑p”,表示调用sub_41BD0D这个函数的地方为WinMain函数,p表示是以函数调用(procedure)的方式跳转到当前的位置的,其他的一些符号:o表示偏移值(offset),j表示跳转(jump)。
在sub_41BD0D上面按X键,可以打开交叉引用窗口,这里会列出所有调用了sub_41BD0D这个函数的地方,如图所示:
从图中可以看到,只有在WinMain函数中调用了sub_41BD0D这个函数。
现在我们开始进行实验,进入实验链接https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014111410022800001。
先看题目描述,主机C:\Reverse\2目录下有一个CrackMe2.exe程序,运行这个程序的时候会提示输入一个密码,当输入正确的密码时,会弹出过关提示消息框,请对CrackMe2.exe程序进行逆向分析和调试,找到正确的过关密码。
不管在什么场景下,相信大家在刚接触一个新事物的时候,都会仔细观察事物的外部特征,CTF做题也是一样的,在拿到题目之后可以运行程序,观察程序都有哪些地方可以输入数据,哪些按钮点击了会有什么样的反应,在操作过程中出现了哪些提示等。
通过对CrackMe2.exe程序的观察,我们知道程序需要输入一个密码,当不输入任何数据就点击按钮时,提示如下信息:
当输入一串测试数据时,提示如下信息:
通过这些操作后,我们可以猜测程序的意图是输入一个正确的密码。
在对一个程序进行逆向分析之前,除了程序的动态行为之外,查看程序是否加壳(被何种程序加壳?是什么编译器编译的?)也是一个非常关键的步骤。我们选中程序后单击右键,在右键菜单中选择“Scan with PEiD”选项,就可以查看加壳信息了。我们这里看到的是Microsoft Visual C++ 6.0,说明CrackMe2.exe没有加壳,且它是使用VC6编译的。
我们来试一试使用OD载入CrackMe2.exe程序,如果继续使用实验《CTF REVERSE练习之逆向初探》中提到的方法查找字符串,是找不到的,会有如下提示:
继续看我们在反汇编指令列表中单击右键,在右键菜单中依次选择“查找”——“当前模块中的名称(标签)”,如图所示:
点击弹出的名称窗口,在键盘上敲下MESSAGEBOXA,就会自动定位到MessageBoxA,点击鼠标选中MessageBoxA这一行,单击右键,在弹出的右键菜单中选择“在每个参考上设置断点”,如图所示:
在OD最下方的状态栏上可以看到“已设置 2 个断点”的提示。
现在按F9运行程序,随便给程序输入一个密码(如test),单击确定按钮后程序将在OD中断下,断下的位置为对MessageBoxA的调用的位置,如图所示:
这就是我们要找的关键函数,现在我们查看附近的代码,就找到了密码明文,如图所示:
用OD解题之后,我们继续用IDA来解题一下。
使用IDA载入CrackMe2.exe程序进行分析,等待分析完毕后,选择主窗口面板上的Imports TAB页面,然后在键盘上敲下MESSAGEBOXA,就可以自动定位到MessageBoxA函数,如图所示:
前面提到了交叉引用这里我们可以用到双击00422420这个条目,来到MessageBoxA定义的位置,选中后按下X键,弹出交叉引用列表窗口,我们看到一共有四个条目,如图所示:
我们并不能直接看出哪一个引用就是我们所要找的引用,所以需要一个一个进行查看,根据前面使用OD对程序的分析,我们知道在MessageBoxA之前有许多对LoadString的调用,因此通过对比几个交叉引用,可以断定sub_401450就是我们要找的函数。
使用F5还原sub_401450函数的伪代码,我们断定LoadString加载资源ID为0x6A的字符串就是我们要找的密码,伪代码如下:
接下来我们使用Restorator打开CrackMe2.exe程序来查看字符串资源,如图所示,0x6A的十进制即106,因此可以知道密码就是HeeTianLab了。
那今天的实验就介绍到这里。我们需要好好掌握API还有后面的实验内容。
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
网络安全日报 2021年03月02日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、SolarWinds高层表示近期供应链攻击是因为实习生使用弱口令
https://securityaffairs.co/wordpress/115134/security/solarwinds-intern-solarwinds123-password-leak.html
2、NSA建议采用零信任安全模型
https://securityaffairs.co/wordpress/115121/security/nsa-zero-trust-security.html
3、加密货币交易所Cryptopia再次遭黑客攻击
https://securityaffairs.co/wordpress/115099/hacking/cryptopia-hacked-twice.html
4、TikTok公司ByteDance同意支付9200万美元隐私和解费
https://securityaffairs.co/wordpress/115115/digital-id/tiktok-us-privacy-settlement.html
5、美国社交网络Gab承认其被黑客入侵
https://www.securityweek.com/us-right-wing-platform-gab-acknowledges-it-was-hacked
6、亚洲食品分销巨头JFC International遭勒索软件攻击
https://www.securityweek.com/asian-food-distribution-giant-jfc-international-hit-ransomware
7、Genua修复了其GenuGate防火墙身份验证绕过漏洞
https://threatpost.com/firewall-critical-security-flaw/164347/
8、 Salt修复了SaltStack minion特权提升漏洞
https://www.zdnet.com/article/minion-hijacking-flaw-patched-in-saltstack-salt-project/
9、2100万Android平台 VPN服务用户数据在黑客论坛出售
https://www.technadu.com/collection-of-user-data-allegedly-sourced-from-android-vpns-appeared-for-sale/250910/
10、印度视频网站ZEE5泄露了900万用户数据
https://www.technadu.com/zee5-leaked-data-nine-million-users-did-not-disclose-it/251211/
CTF-REVERSE练习之逆向初探
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
逆向是指通过反汇编和调试等一些手段及工具,分析计算机程序的二进制可执行代码,从而获得程序的算法细节和实现原理的技术。不仅如此,逆向技能在信息安全面向的具体工作,如恶意代码分析、软件漏洞挖掘、移动安全以及对软件的破解方面发挥着巨大的作用。
前面介绍过CTF的web真题,那今天我们从CTF中选择一个REVERSE题型来讲解。
先介绍一下,REVERSE是CTF竞赛中的一种常见题目类型,主要考察参赛选手逆向工程相关的知识,考查形式为通过对一个二进制程序(exe、dll或者是elf等)进行逆向分析,了解程序内部的实现机制,最终目的可能是得到一个密码,或者是编写一个注册机用于计算指定用户名对应的注册码等。
那我们要怎么才能对一个程序进行逆向,一个完整的程序怎么看到它的代码呢?
当然别人也想到过这种问题,所以就出现了几种帮助逆向的工具。
1.PEiD是一款著名的查壳工具,其功能十分强大,几乎可以侦测出绝大部分的壳以及程序编译信息。PEiD支持各种外部插件,同时支持用户自定义的加壳程序签名信息。
2.Ollydbg简称OD,是一款具有图形用户界面的用户模式调试器,可以运行于各种主流Windows操作系统下。Ollydbg具有动态调试和静态分析功能,非常容易上手,对异常的跟踪处理相当灵活,并且许多爱好者为这款调试器编写了许多非常棒的插件,这些特性使得其成为Windows操作系统上用户模式下动态调试器的首选。Ollydbg的反汇编引擎十分强大,可以识别数千个被C和Windows频繁使用的函数,并可以自动对参数进行注释。底下是OD一些常用的快捷键。
F2 设置一个断点(如果断点已经存在,那么断点将被删除)
F4 运行到光标所在行(运行到光标所在行时自动断下)
F7 单步跟踪(如果遇到一个call,则跟踪进入)
F8 单步跟踪(如果遇到一个call,则执行完整个call)
F9 继续执行(运行程序,直到进程退出或遇到下一个断点)
3.IDA是一款交互式反汇编工具,其功能十分强大,支持多操作系统、多处理器下的二进制程序的反汇编分析,并且可以和使用者进行交互来提升处理效率。IDA支持插件,支持IDC脚本,Hex-Rays Decompiler是IDA一个十分强大的插件,支持将反汇编代码直接转换为C语言伪代码,极大的提高了反汇编分析人员的工作效率。这底下是ida的快捷键可以帮助我们更加高效的进行分析。
空格 在图形模式和列表视图模式之间切换反汇编视图
F5 将反汇编指令还原为伪代码
x 查看交叉引用
n 对变量名或者函数名进行重命名操作
d 将二进制数据解释为字节/双字/四字
c 将二进制数据解释为代码
a 将二进制数据解释为字符串
实验步骤
好我们来开始实验,先进入实验网页:CTF-REVERSE练习之逆向初探。
题目描述:
主机C:\Reverse\1目录下有一个CrackMe1.exe程序,运行这个程序的时候会提示输入一个密码,当输入正确的密码时,会弹出过关提示消息框,请对CrackMe1.exe程序进行逆向分析和调试,找到正确的过关密码。
我们开始第一步进行外部行为分析不管在什么场景下,相信你在刚接触一个新事物的时候,都会仔细观察事物的外部特征,CTF做题也是一样的,在拿到题目之后可以运行程序,观察程序都有哪些地方可以输入数据,哪些按钮点击了会有什么样的反应,在操作过程中出现了哪些提示等。
我们通过对CrackMe1.exe程序的观察,知道程序需要输入一个密码,当不输入任何数据就点击按钮时,提示如下信息:
当输入一串测试数据时,提示如下信息:
这里有弹框还有提示,我们是不是直接去查找这个提示就可以了呢。但是我们在对一个程序进行逆向分析之前,除了程序的动态行为之外,查看程序是否加壳(被何种程序加壳?是什么编译器编译的?)也是一个非常关键的步骤。之前提到了PEID,我们就用PEID来查壳我们选中程序后单击右键,在右键菜单中选择“Scan with PEiD”选项,就可以查看加壳信息了。我们这里看到的是Microsoft Visual C++ 6.0,说明CrackMe1.exe没有加壳,且它是使用VC6编译的。
我们换OD来进行动态调试,
动态调试可以帮助我们了解程序内部执行逻辑的许多详细信息,很多信息只有在程序运行起来之后才会看到,这也是静态分析所无法简单获取到的。OD是我们在Windows操作系统下动态调试器的首选。
操作选择CrackMe1.exe程序后单击右键,在右键菜单中选择“用OllyICE”打开,就会进行OD调试器的主界面,我们在反汇编指令列表窗口中单击右键,依次选择“Ultra String Reference”、“Find ASCII”菜单项,如图所示:
之后会弹出字符串列表窗口,这个窗口列出了当前进程内存空间中存在的各种字符串,我们可以查看是否存在有我们感兴趣的字符串。比如前面曾经提示“密码错误”的提示,那么我们就可以按下Ctrl+F,在弹出的窗口中输入“密码错误”,然后单击确定按钮查找:
上面还有一个密码正确,恭喜过关,这是不是关键呢?我们试一试双击这个看看。
双击找到字符串的那一行,来到OD的反汇编窗口,就能看到代码指令中引用这个字符串的地方了。如下图所示:
在这个代码片段中,我们还看到了一个jnz跳转指令,这个指令是否跳转将决定着弹出成功的提示还是弹出失败的提示,这样的跳转也就是所谓的关键跳转。在关键跳转之上的代码往往就是关键的密码判断逻辑,因此我们可以着重分析关键跳转之上的代码。在关键跳转之上,我们在下面的的位置下一个断点(鼠标单击这行代码选中,然后按下F2):
00401456 . 55 push ebp
下好断点之后,按下F9运行程序,随便输入一个密码(比如test)后单击按钮,程序就自动在我们的断点断下了,接下来按F8开始进行单步跟踪,当跟踪到00401490的时候,我们发现了我们输入的密码test,同时发现字符串HeeTianLab,如图所示:
仔细分析上面的代码,发现是在从这两个字符串里面取出字符一个一个进行对比,只要有一个字符不一样,最终都会跳转到提示失败的地方去。那么可以猜测HeeTianLab就是正确的密码了,我们运行另一个CrackMe1进程,输入HeeTianLab,弹出成功提示:
这就通关了,接下来我用另外一个神器IDA再来做一遍,有动态的神器,肯定还有一个静态的神器。
除了动态调试之外,静态分析也是一种很重要的技能。静态分析可以帮助我们快速了解程序的代码执行逻辑,尤其是使用IDA的Hex-Rays插件将汇编代码生成伪代码的功能,可以极大地提高我们的分析效率。
使用IDA打开CrackMe1.exe程序,IDA会提示选择文件类型、处理器类型等,通常我们不需要修改这些设置,直接单击“OK”按钮即可。之后IDA会对程序进行分析,等待一段时间,待分析结束之后,在下方的“Output Window”中会提示“The initial autoanalysis has been finished.”,如图:
在IDA的菜单中选择“View”——“Open subviews”——“Strings”菜单项,就可以弹出字符串列表界面了,如图所示:
IDA的字符串列表界面没有提供Ctrl+F快捷进行查找的功能,所以我们需要手工翻页来查找我们感兴趣的字符串,拖到某一个地方的时候我们看到了提示相关的字符串:
双击“密码错误”这个字符串,来定定义该字符串的地方,然后鼠标点击字符串的名字,然后按下x键,进行交叉引用查找,弹出的对话框如下图所示:
单击OK按钮来到引用这个字符串的地方,我们看到了一堆反汇编指令列表,这时候就可以对这里的汇编指令进行分析了,如果不想看汇编指令也不要紧,按下F5键就可以生成函数的伪代码了,我们看到伪代码中将输入的密码和HeeTianLab进行了比较:
很明显,HeeTianLab就是我们想要的密码。
逆向的学习是一个需要对计算机相关及编程知识系统有较深了解的过程,它是一个不断渐进的阶段性技能。想学好逆向,你必须具备众多的编程语言储备、安全相关知识、对计算机原理有良好的认识和常识。而这些只是逆向的基础!
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
CTF 一次PWN解题的小技巧
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
前几天在国外的某个ctf社区发现了一道好玩的赛题。
建议ctfer在阅读这篇文章的时候,首先要掌握以下的一些内容,因为这些东西对于ctf比赛来说,都是很有必要掌握的。
基本的Linux知识
对于X86有基本的了解
了解堆栈工作原理
C语言的基本知识
了解缓冲区溢出漏洞的原理
基本的python开发能力
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015111814131600001 (CTF PWN进阶训练实战,尝试溢出一个URL解码程序。)
计算机字节和shell的魅力
我第一次接触到网络安全编程时,我就已经发现开发其实是一门艺术,并且研究员需要很高的水平才能胜任这一工作,因为很多时候你需要各种领域的知识进行结合。例如。C语言、汇编、堆栈、利用python进行漏洞开发利用等,当然,这些只是冰山一角。
对于一个刚进入漏洞利用开发领域的小白来说,这可能是很难的,因为这是一个从零开始进行积累的过程。
作为一名小菜鸡,我决定先挑战这个网站的最简单的pwn赛题。别问为什么,问就是别的试题太难了。
进入正题
让我们先进入SSH!
ssh [tiny_easy@pwnable.kr](mailto:tiny_easy@pwnable.kr) -p2222
(对于Windows用户,我强烈推荐使用xshell,它是一款很好上手的软件,可用于处理ssh会话并轻松下载软件)
在ssh内,我们运行“ ls”命令,仅找到一个二进制文件和我们的flag文件,由于我们没有任何权限,因此无法进行读取。
我们先下载二进制文件并对其进行一些检查:先使用“ file”命令进行查看。该命令可以让我们查看二进制文件的详细信息,包括其体系结构,位数(x64与x32)和其他很多的细节。
从输出的内容中我们可以看到,该文件是x86体系结构的32位ELF文件,并且是静态链接的。
可是等等… 注意这个细节!
让我们运行这个二进制文件,看看会发生什么情况:
从二进制文件具有损坏的header并且在执行时崩溃的情况可以看出,我们猜测现在这个二进制文件可能与通常我们看到的文件有所不同。
让我们在ida中打开二进制文件并检查代码
这可能是我见过的最简短的文件了,整个程序只有4条指令。
我们从栈中执行两个pop指令,从edx指向的地方取值,然后跳转到它。
但是等等......这个程序中没有进行任何调用,那么哪些值是从栈中弹出的呢?
我们还是用gdb来检查一下吧!
看一下堆栈,我们看到eax将接收值1,而edx将接收指向该字符串的指针
“/home/user/CTFs/Pwnables/tiny_easy/tiny_easy”,这就是我们的二进制文件的路径!
如果继续执行直到调用edx,我们就会明白为什么我们之前会收到段错误的原因了。
这个程序会试图跳转到地址0x6d6f682f,这对应字符串"/hom "的值。它是我们的二进制文件路径的一部分。
我们继续运行我们的程序,参数分别为test1 test2 test3。我们可以通过在gdb中运行以下命令来达到这一目的。
run test1 test2 test3
我们可以看到,现在堆栈已经发生了变化,现在我们的堆栈中有参数,并且堆栈顶部的值已从0x1更改为0x4。
还记得大一学的C语言中,main函数是如何接收输入的吗?
Int main(int argc, char * argv [], char * envp)
main中的argv [0]始终指向当前二进制文件的路径,argv [1] argv [2]等将包含我们输入的参数。
为了能够成功跳转到所需的位置,我们需要控制argv [0]的值。如果它不是我们输入的参数,我们该如何控制argv [0]呢?
下面隆重介绍一个在神奇的库文件 -- pwnlib,Pwnlib是一个python库,它使我们能够轻松的和进程进行通信。
pwnlib.tubes.process允许我们创建自己的进程并控制它的不同参数(argv,envp)等等。
我编译了以下的代码片段来展示pwnlib的简单使用方式:
int main(int argc, char * argv[]) { printf("\nthis is our argv[0] %s\n", argv[0]); }
当我编译运行它的时候,得到了以下的结果。
我们可以使用pwnlib将argv [0]修改为我们自己的字符串,
from pwnlib.tubes.process import * argv_program=process(argv=["awdawd"], executable="/home/user/test_argv") print argv_program.recv()
现在,运行我们的python程序,看看我们从test_argv程序中能得到什么结果:
NICE !
现在,我们知道如何控制argv0参数了,这意味着我们可以在tiny_easy二进制文件中的任意位置进行跳转。
下一步是检查此二进制文件的安全属性,让我们运行checksec命令看看效果:
RELRO:这里没有RELRO保护;
堆栈:未发现堆栈canary机制;
NX: NX已禁用;
PIE: 无 PIE;
注意:默认情况下,ASLR在堆栈中是启用状态。
NX保护是一种保护机制,它不允许我们在二进制的代码部分运行代码,这意味着我们不能跳转到栈或堆上的代码来运行它们。
在这个例子中,我们可以看到这个二进制文件是在没有保护的情况下进行编译的,这意味着我们可以跳转到堆上的代码。
这里需要强调一点的是:你如果一开始就直接检查这类保护,整个过程会给你节省很多时间。
在这个例子中,因为我们无法控制返回的地址,而且NX被禁用,那么我们最好的选择就是集中精力找到一种方法跳转到栈上,并执行我们存储在某个参数中的shellcode。
同时,另一方面,如果NX被启用了,那么这意味着我们无法跳转到堆栈,我们需要找到一种不同的方式来运行我们的代码(ret2libc等许多其他方法)。
现在我们可以控制我们要跳转的位置了,同时我们需要处理ASLR在堆栈层已经被启用这个问题。
我们可以尝试找一条允许我们跳转到堆栈的指令,然后运行我们的shellcode,程序中的其余字节是elf头的一部分。
我们也可以使用“ C”快捷键在IDA中查看这些字节的指令。
看来我们最好使用的指令是 "jmp esp"。这个指令将会跳转到堆栈,在那里我们能够得到我们存储在参数中的shellcode。
我喜欢手动进行搜索,所以我用online disassembling 来查找jmp esp指令由哪些操作码组成。
如果我们尝试反汇编jmp esp,那么得到的结果是:ff e4
我们尝试使用search-> bytesequence在IDA中搜索此字节。
what? 没结果?
我试着搜索调用esp的字节,却什么也没找到 !
这就郁闷了!
我们想跳转到堆栈上的代码,但是由于ASLR的存在,我们不知道要跳转到什么地址。
我们尝试找到一个指令,让我们在不知道地址的情况下跳转到堆栈,但我们没有找到任何指令。
我尝试了另一个骚操作:跳转到一个允许你向代码部分写入字节的指令。
你可以尝试用这个方法:用jmp esp操作码覆盖其中的一条指令的地址,然后跳转到该指令的地址。
这个过程就像开火车一样,边开边建轨道。
不幸的是,当我用view->Open subviews->segments看看有哪些段的权限的时候,发现了以下的内容。
代码部分仅启用了R和X权限
R-读取权限
X-执行权限
W(写)权限被禁用。
这意味着,如果我们重写代码部分的指令,程序就会崩溃。
我在这个程序上已经用了好几个小时了,尝试了不同的跳转指令的方法,但是我找不到进入栈的方法。
然后,what should I do?
32位的ASLR
我开始尝试查阅32位系统上的ASLR的实现原理(特别强调,我们的二进制文件是32位的)。我找到了下面的解释:
"对于32位,有2^32 (4 294 967 296)个地址,然而,内核只允许一半的比特位(2^(32/2)=65 536)在虚拟内存中执行"。
这意味着堆栈的大小可以调整到65,536个字节。
如果我们可以控制数万个shellcode字节,那么我们就可以尝试在堆栈中跳转到一个固定的地址,这样就会有很高的成功率。
下面我检查了一下是否可以用长字符串发送大量的参数。
from pwnlib.tubes.process import * for i in range(600): argv.append("a"*1024) argv_program=process(argv=["awdawd"], executable="/home/user/test_argv") print argv_program.recv()
在本例中,我们向程序发送了6014400个字节并成功运行。
我们可以传递我们的参数来填满nops,最后发送我们的shellcode。
这样,我们就可以跳转到堆栈上的一个随机地址,希望能够落在我们的nop指令上,然后我们就会一路滑向我们的shellcode。
我写了以下的代码,尝试执行程序。
我们在这里尝试跳转到堆栈上的一个恒定地址:0xffb05544,选择这个地址有两个原因。
1.在这个程序中,我注意到在用gdb执行了很多次之后,这个地址大部分时间都在堆栈的范围内或者非常接近堆栈的范围 。
2.我们需要一个没有任何null字节的地址,否则我们会得到
一个异常:"Inappropriate nulls in argv[0]:"
所以我写了以下代码:
import struct import random from pwnlib.tubes.process import * from pwnlib.exception import * import pwnlib EXECV = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80" def build_shellcode(address): """ Build shellcode address - address
这段代码会运行tiny_easy二进制文件并跳转到我们的shellcode,从而打开一个shell。如果我们成功了,那么我们将能够发送命令"echo we_made_it",看看它的输出。
说干就干!
成功了!现在我们来CTF服务器上检查一下。
请注意,我们需要将我们执行的命令从"echo we_made_it "改为 "cat /home/tiny_easy/flag ",这样就得到了flag。
我们可以使用 "scp "命令轻松地将我们的脚本上传到服务器的tmp目录下,就像这样。
scp -P 2222 ./pwn_tiny.py tiny_easy@pwnable.kr:/tmp/pwn_tiny.py
终于拿到了我们的flag !
总结
行文至此,本次测试也就结束了!文章略长,简单做个总结:
在本文中,我们通过使用CTF示例讨论了漏洞利用开发的过程,我们了解了程序如何从argv和argc接收输入的参数。最后,了解了由于较小的随机范围,32位系统中的ASLR为何容易受到攻击,以及如何利用此漏洞进行攻击。
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
网络安全日报 2021年03月01日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Facebook支付6.5亿美元用于隐私诉讼和解
https://www.securityweek.com/judge-approves-650m-facebook-privacy-lawsuit-settlement
2、研究人员发现大量Android平台Covid-19追踪应用存在漏洞
https://www.securityweek.com/security-privacy-issues-found-tens-covid-19-contact-tracing-apps
3、微软开源查找 SolarWinds 黑客的工具代码
https://www.securityweek.com/microsoft-releases-open-source-resources-solorigate-threat-hunting
4、研究人员发现Rockwell控制器漏洞可被远程攻击
https://www.securityweek.com/unprotected-private-key-allows-remote-hacking-rockwell-controllers
5、勒索软件团伙入侵了厄瓜多尔最大的私人银行和财政部
https://www.bleepingcomputer.com/news/security/ransomware-gang-hacks-ecuadors-largest-private-bank-ministry-of-finance/
6、T-Mobile遭SIM交换攻击导致数据泄露
https://www.bleepingcomputer.com/news/security/t-mobile-discloses-data-breach-after-sim-swapping-attacks/
7、牛津大学进行COVID-19研究的实验室遭受黑客入侵
https://www.zdnet.com/article/oxford-university-biochemical-lab-involved-in-covid-19-research-targeted-by-hackers/
8、谷歌Project Zero团队批量Windows 10 Graphics RCE漏洞细节
https://www.bleepingcomputer.com/news/security/google-shares-poc-exploit-for-critical-windows-10-graphics-rce-bug/
9、H2C请求走私排名2020年10大Web攻击技术之首
https://portswigger.net/daily-swig/h2c-smuggling-named-top-web-hacking-technique-of-2020
10、CD Projekt因网络攻击推迟《赛博朋克2077》补丁发布时间
https://www.reuters.com/article/us-cd-projekt-patch/polands-cd-projekt-delays-cyberpunk-2077-fix-due-to-cyber-attack-idUSKBN2AO2BW
第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页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

