软件漏洞分析入门_5_初级栈溢出D_植入任意代码

CVE-2012-0158:Microsoft Office MSCOMCTL.ocx 栈溢出漏洞调试分析 0x01 Lotus Blossom 行动 在 2015 年 6 月,国外安全厂商 Palo Alto Networks 的威胁情... 阅读详情
作 者: failwest
时 间: 2007-12-16,17:06
链 接: http://bbs.pediy.com/showthread.php?t=56656

第5讲  初级栈溢出D——植入任意代码

To be the apostrophe which changed “Impossible” into “I’m possible”
—— failwest

麻雀虽小,五脏俱全

如果您顺利的学完了前面4讲的内容,并成功的完成了第2讲和第4讲中的实验,那么今天请跟我来一起挑战一下劫持有漏洞的进程,并向其植入恶意代码的实验,相信您成功完成这个实验后,学习的兴趣和自信心都会暴增。

开始之前,先简要的回答一下前几讲跟贴中提出的问题

代码编译少头文件问题:可能是个人习惯问题,哪怕几行长的程序我也会丢到project里去build,而不是用cl,所以没有注意细节。如果你们嫌麻烦,不如和我一样用project来build,应该没有问题的。否则的话,实验用的程序实在太简单了,这么一点小问题自己决绝吧。另外,看到几个同学说为了实验,专门恢复了古老的VC6.0,我也感动不已啊,呵呵。

地址问题:溢出使用的地址一般都要在调试中重新确定,尤其是本节课中的哦。所以照抄我的实验指导,很可能会出现地址错误。特别是本节课中有若干个地址都需要在调试中重新确定,请大家务必注意。能够屏蔽地址差异的通用溢出方法将会在后续课程中逐一讲解。

还有就是抱歉周末中断了一天的讲座——无私奉献也要过周末啊,大家体谅一下了。另外就是下周项目很紧张,估计不能每天都发贴了,争取两到三天发一次,请大家体谅。

如果有什么问题,欢迎在跟贴中提出来,一起讨论,实验成功完成的同学记住要吱——吱——吱啊,呵呵

在基础知识方面,本节没有新的东西。但是这个想法实践起来还是要费点周折的。我设计的实验是最最简单的情况,为了防止一开始难度高,刻意的去掉了真正的漏洞利用中的一些步骤,为的是让初学者理解起来更加清晰,自然。

本节将涉及极少量的汇编语言编程,不过不要怕,非常简单,我会给于详细的解释,不用专门去学汇编语言也能扛下来

另外本节需要最基本的使用OllyDbg进行调试,并配合一些其他工具以确认一些内存地址。当然这些地址的确认方法有很多,我只给出一种解决方案,如果大家在实验的时候有什么心得,不妨在跟贴中拿出来和大家一起分享,一起进步。

开始前简单回顾上节的内容:

password.txt 文件中的超长畸形密码读入内存后,会淹没verify_password函数的返回地址,将其改写为密码验证正确分支的指令地址

函数返回时,错误的返回到被修改的内存地址处取指执行,从而打印出密码正确字样

试想一下,如果我们把buffer[44]中填入一段可执行的机器指令(写在password.txt文件中即可),再把这个返回地址更改成buffer[44]的位置,那么函数返回时不就正好跳去buffer里取指执行了么——那里恰好布置着一段用心险恶的机器代码!

本节实验的内容就用来实践这一构想——通过缓冲去溢出,让进程去执行布置在缓冲区中的一段任意代码。


  此图已经缩小,点击察看原图。
图1
  


  如上图所示,在本节实验中,我们准备向password.txt文件里植入二进制的机器码,并用这段机器码来调用windows的一个API函数MessageBoxA,最终在桌面上弹出一个消息框并显示“failwest”字样。事实上,您可以用这段代码来做任何事情,我们这里只是为了证明技术的可行性。

为了完成在栈区植入代码并执行,我们在上节的密码验证程序的基础上稍加修改,使用如下的实验代码:

#include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
  int authenticated;
  char buffer[44];
  authenticated=strcmp(password,PASSWORD);
  strcpy(buffer,password);//over flowed here!  
  return authenticated;
}
main()
{
  int valid_flag=0;
  char password[1024];
  FILE * fp;
  LoadLibrary("user32.dll");//prepare for messagebox
  if(!(fp=fopen("password.txt","rw+")))
  {
    exit(0);
  }
  fscanf(fp,"%s",password);
  valid_flag = verify_password(password);
  if(valid_flag)
  {
    printf("incorrect password!/n");
  }
  else
  {
    printf("Congratulation! You have passed the verification!/n");
  }
  fclose(fp);
}

这段代码在底4讲中使用的代码的基础上修改了三处:

增加了头文件windows.h,以便程序能够顺利调用LoadLibrary函数去装载user32.dll

verify_password函数的局部变量buffer由8字节增加到44字节,这样做是为了有足够的空间来“承载”我们植入的代码

main函数中增加了LoadLibrary("user32.dll")用于初始化装载user32.dll,以便在植入代码中调用MessageBox

用VC6.0将上述代码编译(默认编译选项,编译成debug版本),得到有栈溢出的可执行文件。在同目录下创建password.txt文件用于程序调试。


我们准备在password.txt文件中植入二进制的机器码,在password.txt攻击成功时,密码验证程序应该执行植入的代码,并在桌面上弹出一个消息框显示“failwest”字样。
  
让我们在动手之前回顾一下我们需要完成的几项工作:

1:分析并调试漏洞程序,获得淹没返回地址的偏移——在password.txt的第几个字节填伪造的返回地址

2:获得buffer的起始地址,并将其写入password.txt的相应偏移处,用来冲刷返回地址——填什么值

3:向password.txt中写入可执行的机器代码,用来调用API弹出一个消息框——编写能够成功运行的机器代码(二进制级别的哦)

这三个步骤也是漏洞利用过程中最基本的三个问题——淹到哪里,淹成什么以及开发shellcode

首先来看淹到什么位置和把返回地址改成什么值的问题

本节验证程序里verify_password中的缓冲区为44个字节,按照前边实验中对栈结构的分析,我们不难得出栈帧中的状态如下图所示:

 
名称:  02.JPG
查看次数: 1745
文件大小:  20.1 KB
图2


如果在password.txt中写入恰好44个字符,那么第45个隐藏的截断符null将冲掉authenticated低字节中的1,从而突破密码验证的限制。我们不妨就用44个字节做为输入来进行动态调试。

  出于字节对齐、容易辨认的目的,我们把“4321”作为一个输入单元。
  buffer[44]共需要11个这样的单元
  第12个输入单元将authenticated覆盖
  第13个输入单元将前栈帧EBP值覆盖
  第14个输入单元将返回地址覆盖

分析过后我们需要进行调试验证分析的正确性。首先在password.txt中写入11组“4321”共44个字符:


  
名称:  03.JPG
查看次数: 1733
文件大小:  14.7 KB
图3


如我们所料,authenticated被冲刷后程序将进入验证通过的分支:
 
此图已经缩小,点击察看原图。
图4

用OllyDbg加载这个生成的PE文件进行动态调试,字符串拷贝函数过后的栈状态如图:

 
此图已经缩小,点击察看原图。
图5

  此时的栈区内存如下表所示

局部变量名  内存地址  偏移3处的值  偏移2处的值  偏移1处的值  偏移0处的值
buffer[0~3]  0x0012FAF0  0x31 (‘1’)  0x32 (‘2’)  0x33 (‘3’)  0x34 (‘4’)
……  (9个双字)  0x31 (‘1’)  0x32 (‘2’)  0x33 (‘3’)  0x34 (‘4’)
buffer[40~43]  0x0012FB18  0x31 (‘1’)  0x32 (‘2’)  0x33 (‘3’)  0x34 (‘4’)
authenticated
(被覆盖前)  0x0012FB1C  0x00  0x00  0x00  0x31 (‘1’)
authenticated
(被覆盖后)  0x0012FB1C  0x00  0x00  0x00  0x00 (NULL)
前栈帧EBP  0x0012FB20  0x00  0x12  0xFF  0x80
返回地址  0x0012FB24  0x00  0x40  0x11  0x18

  动态调试的结果证明了前边分析的正确性。从这次调试中我们可以得到以下信息:

buffer数组的起始地址为0x0012FAF0——注意这个值只是我调试的结果,您需要在自己机器上重新确定!

password.txt文件中第53到第56个字符的ASCII码值将写入栈帧中的返回地址,成为函数返回后执行的指令地址

也就是说将buffer的起始地址0x0012FAF0写入password.txt文件中的第53到第56个字节,在verify_password函数返回时会跳到我们输入的字串开始出取指执行。


我们下面还需要给password.txt中植入机器代码。

让程序弹出一个消息框只需要调用windows的API函数MessageBox。MSDN对这个函数的解释如下:

int MessageBox(
  HWND hWnd,          // handle to owner window
  LPCTSTR lpText,     // text in message box
  LPCTSTR lpCaption,  // message box title
  UINT uType          // message box style
);

hWnd 
[in] 消息框所属窗口的句柄,如果为NULL的话,消息框则不属于任何窗口 
lpText 
[in] 字符串指针,所指字符串会在消息框中显示 
lpCaption 
[in] 字符串指针,所指字符串将成为消息框的标题 
uType 
[in] 消息框的风格(单按钮,多按钮等),NULL代表默认风格 


虽然只是调一个API,在高级语言中也就一行代码,但是要我们直接用二进制指令的形式写出来也并不是一件容易的事。这个貌似简单的问题解决起来还要用一点小心思。不要怕,我会给我的解决办法,不一定是最好的,但是能解决问题。

  我们将写出调用这个API的汇编代码,然后翻译成机器代码,用16进制编辑工具填入password.txt文件。

注意:熟悉MFC的程序员一定知道,其实系统中并不存在真正的MessagBox函数,对MessageBox这类API的调用最终都将由系统按照参数中字符串的类型选择“A”类函数(ASCII)或者“W”类函数(UNICODE)调用。因此我们在汇编语言中调用的函数应该是MessageBoxA。多说一句,其实MessageBoxA的实现只是在设置了几个不常用参数后直接调用MessageBoxExA。探究API的细节超出了本书所讨论的范围,有兴趣的读者可以参阅其他书籍。

用汇编语言调用MessageboxA需要三个步骤:

1.装载动态链接库user32.dll。MessageBoxA是动态链接库user32.dll的导出函数。虽然大多数有图形化操作界面的程序都已经装载了这个库,但是我们用来实验的consol版并没有默认加载它

2.在汇编语言中调用这个函数需要获得这个函数的入口地址

3 在调用前需要向栈中按从右向左的顺序压入MessageBoxA的四个参数。当然,我肯定压如failwest啦,哈哈

对于第一个问题,为了让植入的机器代码更加简洁明了,我们在实验准备中构造漏洞程序的时候已经人工加载了user32.dll这个库,所以第一步操作不用在汇编语言中考虑。

对于第二个问题,我们准备直接调用这个API的入口地址,这个地址需要在您的实验机器上重新确定,因为user32.dll中导出函数的地址和操作系统版本和补丁号有关,您的地址和我的地址不一定一样。

MessageBoxA的入口参数可以通过user32.dll在系统中加载的基址和MessageBoxA在库中的偏移相加得到。为啥?看下看雪老大《软件加密与解密》中关于虚拟地址这些基础知识的论述吧,相信版内也有很多相关资料。

这里简单解释下,MessageBoxA是user32.dll的一个导出函数,要确定它首先要知道user32.dll在虚拟内存中的装载地址(与操作系统版本有关),然后从这个基地址算起,找到MessageBoxA这个导出函数的偏移,两者相加,就是这个API的虚拟内存地址。

具体的我们可以使用VC6.0自带的小工具“Dependency Walker”获得这些信息。您可以在VC6.0安装目录下的Tools下找到它:
 
此图已经缩小,点击察看原图。
图6

  运行Depends后,随便拖拽一个有图形界面的PE文件进去,就可以看到它所使用的库文件了。在左栏中找到并选中user32.dll后,右栏中会列出这个库文件的所有导出函数及偏移地址;下栏中则列出了PE文件用到的所有的库的基地址。

  此图已经缩小,点击察看原图。
图7


  如上图示,user32.dll的基地址为0x77D40000,MessageBoxA的偏移地址为0x000404EA。基地址加上偏移地址就得到了MessageBoxA在内存中的入口地址:0x77D804EA


  有了这个入口地址,就可以编写进行函数调用的汇编代码了。这里我们先把字符串“failwest”压入栈区,消息框的文本和标题都显示为“failwest”,只要重复压入指向这个字符串的指针即可;第一个和第四个参数这里都将设置为NULL。写出的汇编代码和指令所对应的机器代码如下:

           

机器代码(16进制)  汇编指令  注释
33 DB  XOR EBX,EBX  压入NULL结尾的”failwest”字符串。之所以用EBX清零后入栈做为字符串的截断符,是为了避免“PUSH 0”中的NULL,否则植入的机器码会被strcpy函数截断。
53                  PUSH EBX  
68 77 65 73 74  PUSH 74736577  
68 66 61 69 6C  PUSH 6C696166  
8B C4                MOV EAX,ESP  EAX里是字符串指针
53                  PUSH EBX  四个参数按照从右向左的顺序入栈,分别为:
                                                 (0,failwest,failwest,0)
                                                  消息框为默认风格,文本区和标题都是“failwest”
50                   PUSH EAX  
50                   PUSH EAX  
53                   PUSH EBX  
B8 EA 04 D8 77  MOV EAX, 0x77D804EA  调用MessageBoxA。注意不同的机器这里的                                    
                                                                    函数入口地址可能不同,请按实际值填入!
FF D0                 CALL EAX  


从汇编指令到机器码的转换可以有很多种方法。调试汇编指令,从汇编指令中提取出二进制机器代码的方法将在后面逐一介绍。由于这里仅仅用了11条指令和对应的26个字节的机器代码,如果您一定要现在就弄明白指令到机器码是如何对应的话,直接查阅Intel的指令集手工翻译也不是不可以。

  将上述汇编指令对应的机器代码按照上一节介绍的方法以16进制形式逐字抄入password.txt,第53到56字节填入buffer的起址0x0012FAF0,其余的字节用0x90(nop指令)填充,如图:

  此图已经缩小,点击察看原图。
图8


换回文本模式可以看到这些机器代码所对应的字符:
 

此图已经缩小,点击察看原图。
图9

这样构造了password.txt之后在运行验证程序,程序执行的流程将按下图所示:



  此图已经缩小,点击察看原图。
图10


程序运行情况如图:
 
此图已经缩小,点击察看原图。
图11


成功的弹出了我们植入的代码!

您成功了吗?如果成功的唤出了藏在password.txt中的消息框,请在跟贴中吱一下,和大家一起分享您喜悦的心情,这是我们学习技术的源动力。

最后总结一下本节实验的几个要点:
确认函数返回地址与buffer数组的距离——淹哪里
确认buffer数组的内存地址——把返回地址淹成什么(需要调试确定,与机器有关)
编制调用消息框的二进制代码,关键是确定MessageBoxA的虚拟内存地址(与机器有关)

我实验用的PE和password.txt在这里:

想要PE的请点这里: stack_overflow_exec.rar
想要Passwrd.txt的请点这里: password.txt


这节课的题目是麻雀虽小,五脏俱全。这是因为这节课第一次把漏洞利用的全国程展现给了大家:
密码验证程序读入一个畸形的密码文件,竟然蹦出了一个消息框!
Word在解析doc文档时,不知有多少个内存复制和操作的函数调用,如果哪一个有溢出漏洞,那么office读入一个畸形的word文档时,会不会弹出个消息框,开个后门,起个木马啥的?
IIS和APACHE在解析WEB请求的时候,也不知道有多少内存复制操作,如果存在溢出漏洞,那么攻击者发送一个畸形的WEB请求,会不会导致server做出点奇怪的事情?
RPC调用中如果出现……

上面说的并不是危言耸听,全都是真实世界中曾经出现过的漏洞攻击案例。本节的例子是现实中的漏洞利用案例的精简版,用来阐述基本概念并验证技术可行性。随着后面的深入讨论,您会发现漏洞研究是多么有趣的一门技术。



在本节最后,我给出一个课后作业和几个思考题——因为下一讲可能会稍微隔几天,大家不妨自己动手练习练习,记住光听课是没有的,动手非常重要!

课后作业:如果您细心的话,在点击上面的ok按钮之后,程序会崩溃:

此图已经缩小,点击察看原图。
 图12

  这是因为MessageBoxA调用的代码执行完成之后,我们没有写安全退出的代码的缘故。您能把我给出的二进制代码稍微修改下,使之能够在点击之后干净利落的退出进程么?

如果你能做到这一点,不妨把你的解决方案也拿出来和大家一起分享,一起进步。

思考题:

1:我反复强调,buffer的位置在实验中需要自己在调试中确定,不同机器环境可能不一样。
大家都知道,程序运行中,栈的位置是动态变化的,也就是说buffer的内存地址可能每次都不一样,在真实的漏洞利用中,尤其是遇到多线程的程序,每次的缓冲区位置都是不同的。那么我们怎么保证在函数返回时总能够准确的跳回buffer,找到植入的代码呢?

比较通用的定位植入代码(shellcode)的方法我会在后面的讲座中系统介绍,这里先提一下,大家可以思考思考

2:我也反复强调,API的地址需要自己确定,不同环境会有不同。这样植入代码的通用性还是会大打折扣。有没有通用的定位windows API的方法呢?

以上两个问题是影响windows平台下漏洞利用稳定性的两个很关键的问题。我选择了windows平台来讲解,是为了照顾初学者对linux的进入门槛和windows下美轮美奂的调试工具。但windows的溢出是相对linux较难的,进入简单,深造难。不过我相信大家能啃下来的。

为了不至于在一节课中引入太多新东西,我在本节课中均采用现场调试确定的方法,并没有考虑通用性问题。在这里鼓励大家积极思考,有想法别忘了在跟贴中分享出来。 
BUPT软件安全实验三 可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。 阅读详情

相关推荐

路由器漏洞挖掘实战:从固件分析到动态调试与漏洞利用

嵌入式系统安全是物联网(IoT)和网络基础设施安全的核心领域,其原理在于对设备固件进行深度分析以发现潜在安全缺陷。这项技术的价值在于能够识别并缓解关键网络节点中的高风险漏洞,防止其成为内网渗透的跳板或僵尸网络的组成部分。在应用场景上,它广泛适用于IoT设备安全评估、渗透测试中的边缘突破,以及嵌入式软件的安全开发实践。本文聚焦于路由器漏洞挖掘,详细阐述了固件分析、动态调试与漏洞利用这一完整研究链条,通过QEMU模拟、GDB调试等工程实践方法,系统介绍了如何从静态逆向到动态验证,最终实现漏洞的武器化利用,为从事

430

缓冲区溢出实验

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

4ct10n 8815

新手也能秒懂:从BUUCTF的warmup_csaw_2016看PWN栈溢出的‘傻瓜式’利用

本文通过BUUCTF的warmup_csaw_2016题目,详细解析了PWN栈溢出的基础利用方法。从漏洞函数gets()到后门函数地址的获取,再到payload的构造与发送,手把手教你如何利用栈溢出漏洞获取flag。适合新手入门学习PWN技术。

weixin_30298497的博客 489

软件漏洞分析入门

原帖链接:http://bbs.pediy.com/showthread.php?t=56445  1 引子 To be the apostrophe which changed “Impossible” into “I’m possible” —— failwest  凉风有讯,秋月无边。 您是否梦想过能够像电影上演的那样黑进任意一台机器远程操控?您的梦想是否曾经被书店里边满架子的反黑,

foolzhang的专栏 8683

asp判断客户端是手机还是电脑

asp判断客户端是手机还是电脑,我们做Web开发的时候,常常需要判断用户是否是使用手机访问网站,从而决定如何页面任何展示给用户,以提高用户体验,这时需要用到判断浏览器类型的代码

克里金插值(Kriging)在MATLAB中的实现(克里金工具箱)

一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文件夹中的/toolbox下,然后在设置路径中添加该程序文件为默认路径即可调用程序。 资源中内附程序使用说明PDF。 二、本人实际操作代码如下所示,标注如下 load data1 %载入数据 %模型参...

qq_40937675的博客 6万+

2.4.2 向进程中植入代码

为了完成在栈区植入代码并执行,我们在上节的密码验证程序的基础上稍加修改,使用如下的实验代码。 #include <stdio.h> #include <windows.h> #define PASSWORD "1234567" int verify_password(char *password) { int authenticated; cha...

bangren3304的博客 381

用matlab编程求矩阵的极大无关组,向量组极大无关组表示问题

已知向量组T:Eqn11.gif (3.16 KB, 下载次数: 1)2013-10-21 19:19 上传.(1) 求向量组T的秩,并判断向量组T的相关性;(2) 求T的极大线性无关组;(3) 将其余的向量用所求的极大线性无关组线性表示。程序:>> A=[1 1 3 2;-1 1 -1 3;5-2 8 9;-1 3 1 7]>> r=rank(A)>> A1=...

weixin_35094083的博客 7385

java代码如何避免栈溢出,软件漏洞分析入门[初级栈溢出D_植入任意代码](ZT)

标题:【技术专题】软件漏洞分析入门_5_初级栈溢出D_植入任意代码作者:failwest时间:2007-12-16,17:06链接:http://bbs.pediy.com/showthread.php?t=56656第5讲初级栈溢出D——植入任意代码Tobetheapostrophewhichchanged“Impossible”into“I’mpossible”—...

weixin_35275162的博客 316

别光看文档了!手把手带你用Habitat-Lab跑通第一个PointNav任务(附完整代码与避坑指南)

本文详细介绍了如何使用Habitat-Lab快速跑通第一个PointNav任务,包括环境配置、依赖安装、数据集下载与路径配置等关键步骤,并提供了完整的代码实现与常见问题排查指南。特别适合刚接触Habitat-Lab的开发者,帮助避开官方Quickstart未提及的坑,快速上手具身AI任务。

weixin_42662293的博客 270

乐鑫ESP32-C6产测全流程:RAM固件测试与阈值校准实战指南

Wi-Fi模组量产测试是保障IoT设备射频性能与硬件可靠性的关键环节,其核心在于基于RAM的无损固件加载、可配置的阈值判定机制及多工位协同控制。该流程依托串口协议与结构化配置(如JSON阈值文件、.bin测试固件),实现RF性能(fb_rssi、tx_power)、GPIO导通性、Flash ID识别与固件版本校验等原子化测试项的自动化执行。技术价值体现在避免Flash擦写风险、支持动态温补与在线学习校准,并无缝对接MES系统实现质量数据闭环。典型应用场景包括ESP32-C6/C3/S2等乐鑫全系Wi-Fi

weixin_35756690的博客 311

【实验】栈溢出攻击:代码植入

《0day安全》书中的通过栈溢出达到的代码植入实验记录。将返回地址修改到buffer数组的地址,执行buffer数组中的代码达成目的。

qq_63982199的博客 573

手把手教你学simulink(95.1)--PID控制实例:基于Simulink的PID控制温度控制系统建模与仿真

温度控制是工业自动化、家用电器、医疗设备以及航空航天等领域中常见的控制问题。通过精确的温度控制,可以提高生产效率、降低能耗并确保产品质量。PID(比例-积分-微分)控制器因其结构简单、性能稳定且易于实现而被广泛应用于各种温度控制系统。本项目旨在通过MATLAB/Simulink平台设计和验证一个基于PID控制的温度控制系统,重点研究PID参数调优方法、系统动态响应特性以及稳态误差消除能力。

MHD0815的博客 792

软件漏洞分析入门_5

导读:   第5讲 初级栈溢出D——植入任意代码   To be the apostrophe which changed “Impossible” into “I’m possible”   —— failwest   麻雀虽小,五脏俱全   如果您顺利的学完了前面4讲的内容,并成功的完成了第2讲和第4讲中的实验,那么今天请跟我来一起挑战一下劫持有漏洞的进程,并向其植入恶意代码的实验,相

753

深度学习注意力机制新突破:YOLOv8结合SimAM无参数注意力模块,让目标检测更精准!

在计算机视觉领域,注意力机制已成为提升模型性能的关键技术。然而,传统的注意力模块如SENet、CBAM等往往引入大量额外参数,增加了模型的复杂度和计算负担。本文介绍一种创新的无参数注意力机制——SimAM(Simple Parameter-Free Attention Module),并将其成功应用于YOLOv8目标检测框架。SimAM基于神经科学理论,通过定义能量函数为特征图计算3D注意力权重,无需任何额外参数即可显著提升模型性能。本文详细阐述了SimAM的理论基础、实现原理,并提供了完整的YOLOv8集

YOLO 97

基于STM32、HAL库的IP5356M_DBZ_CA快充协议芯片简介及驱动程序设计

IP5356M_BATTERY_LEVEL_25 = 1, /* 电池电量25% */IP5356M_CHARGE_STATE_CHARGE_DONE = 4, /* 充电完成 */IP5356M_CHARGE_STATE_FAST = 2, /* 快速充电 */IP5356M_CHARGE_STATE_NONE = 0, /* 无充电 */IP5356M_CHARGE_STATE_PRE = 1, /* 预充电 *//* 延时1秒 */

corlin6688的博客 1417

Winamp栈溢出漏洞研究【转载】

课程简介 Winamp是一款非常经典的音乐播放软件,它于上世纪九十年代后期问世。与现在音乐播放软件行业百家争鸣的情况不同,当时可以说Winamp就是听音乐的唯一选择了,相信那个时代的电脑玩家是深有体会的。而时至今日,依然有一批忠实的Winamp粉丝还在坚守着这块阵地,这也就说明了这款播放器依旧是有很强的生命力。 但是,这款软件的漏洞也是挺多的,五花八门,涵盖了很多方面。而我们这次所讨论的就是这款...

墨鱼菜鸡 396

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1033

从pwn-authenticate入门栈溢出:二进制安全攻防实战解析

栈溢出是二进制安全领域的核心漏洞类型,其原理源于程序对内存边界检查的缺失。当函数使用不安全的字符串操作函数(如gets、strcpy)时,超出缓冲区的输入会覆盖相邻内存,从而可能篡改关键变量或劫持程序控制流。这项技术的工程价值在于,它揭示了软件底层内存管理缺陷与高级安全威胁之间的直接关联,是理解现代漏洞利用与防护体系的基础。在CTF竞赛与安全研究中,栈溢出常出现在身份验证、数据解析等场景,攻击者通过精心构造的输入绕过认证或执行任意代码。本文以经典的pwn-authenticate场景为例,结合pwntool

靓靓软件工作室 381

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【漏洞剖析】Easy File Sharing Web Server 栈溢出漏洞的攻防实战

本文深入剖析了Easy File Sharing Web Server栈溢出漏洞的攻防实战,详细介绍了漏洞背景、原理及复现方法。通过环境搭建、漏洞验证和深度利用实战,展示了如何利用该漏洞进行攻击,并提供了全面的防御方案与加固措施,帮助开发者和管理员有效防范此类安全威胁。

weixin_30733003的博客 511

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

软件漏洞分析入门_7_案例

通过一周多的基础教学,相信学完前面6讲的朋友们已经初步掌握了缓冲区溢出的最基本原理,我称之为初级+出门。 我们仍然缺少的关于栈溢出的基础知识包括: 1.如何灵活的选取跳转指令(跳板) 2.如何灵活的布置缓冲区,把shellcode摆放在恰当的位置 3.如何在shellcode中动态定位windowsAPI。 4.如何利用淹没S.E.H劫持进程,植入sh...

weixin_33739627的博客 313

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

终极实战指南:5步掌握Vulnserver漏洞利用与安全渗透技巧

想要快速掌握软件漏洞利用的核心技术吗?Vulnserver正是你寻找的完美学习平台!这个基于Windows的多线程TCP服务器专门设计用于教育目的,提供了多种缓冲区溢出漏洞类型,每个漏洞都需要独特的利用思路,是提升渗透测试技能的实战利器。 ## 🎯 为什么选择Vulnserver进行安全学习? Vulnserver不是普通的漏洞演示工具,而是专门为安全学习者打造的实战训练场。它模拟真实服务器

gitblog_00041的博客 146
上一篇: 内核模式下另类装载驱动
下一篇: SockMon2005 网络验证的去除(附内存补丁程序源码)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值