WebDav漏洞简单分析及通用exploit设计

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

WebDav漏洞简单分析及通用exploit设计
 
 拜读了isno写的<漏洞分析>>、<<通用的攻击WebDAV漏洞的方法>>,以及Nankia写的
<漏洞ISNO方法的补充>>之后,用他们发布的exploit、以及能在网上找到的exploit在我的一些测试
机上测试,有些成功,有些不成功。于是便想自己调试一下。在后来的调试过程中,参考了大量资料,特别
是yuange所写的<攻击技术>>。在这过程中我学到了很多东西,自己也有些心
得体会,其中可能有不少错误的地方,于是便想写下来,一来请各位高手多多指点,二来可以当做笔记供日
后参考(我记性不好:-))。

建议各位在阅读了以上提及的文章后再继续往下看。以下测试是在windows 2000 简体中文版本进行的。


-=-=-=- 第一部分 漏洞简单分析 -=-=-=-

 


webdav溢出具体是怎么发生的我就不罗嗦了,请大家参考isno所写的文章,这里只简述一下。我们向
IIS发送如下数据:

SEARCH /O HTTP/1.0
Host:xxx
Content-Type: text/xml
Content-length: 3
xxx

 

IIS把我们请求的文件名转换成UNICODE,在前面加上路径,然后作为文件名参数传给了
GetFileAttributesExW(先加上路径再转换成UNICODE,还是转换成UNICODE再加路径,我没有仔细看,但这
并不重要)。假如IIS根目录是c:/inetpub/wwwroot,那么传递给GetFileAttributesExW的文件名就是
"//?/c:/inetpub/wwwroot/O"的UNICODE形式,如下:
0197efe0 5c 00 5c 00 3f 00 5c 00-63 00 3a 00 5c 00 69 00 /./.?./.c.:./.i.
0197eff0 6e 00 65 00 74 00 70 00-75 00 62 00 5c 00 77 00 n.e.t.p.u.b./.w.
0197f000 77 00 77 00 72 00 6f 00-6f 00 74 00 5c 00 4f 00 w.w.r.o.o.t./.O.

漏洞引用关系如下:

 

GetFileAttributesExW
|__RtlDosPathNameToNtPathName_U
|__RtlInitUnicodeString <-buff超过65535就会导致短整型数溢出
|__在这后面的代码进行字符copy的时候就会触发堆栈溢出

我们来看看UNICODE_STRING结构的定义:
typedef struct _UNICODE_STRING
{
USHORT Length; <--这长度指的是buffer的字节数,并不是unicode字符的个数
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING *PUNICODE_STRING;

 

从上面的分析我们可以看到,事实上只要我们保证($FileName+$IIS_Path)*2 > 65535就可以触发
存储buff长度的短整型数溢出,其中$FileName是我们提交的文件名(非UNICODE形式)。

 

 


-=-=-=- 第二部分 关于widechar的字符串 -=-=-=-

 

IIS在接收到我们发送的buff之后,会调用MultiByteToWideChar函数把我们的buff转换成widechar,
即UNICODE,用的CodePage是系统默认的CodePage,在简体中文系统上是936。在转换过程中,不符合
相应code page widechar范围的双字节字符会被替换掉,单字节字符会被转换成"/xXX/x00"的形式。

 

怎么判断字符是单字节字符还是双字节字符? 简体中文、繁体中文、韩文、日文都是双字节语言,
即double-byte character set (DBCS)。上述四种语言双字节中的第一个字节都大于等于0x80。所以
某个字符如果大于等于0x80的话,那么后面就还有一个字节的字符一起跟这个字符组成一个完整"字符"。

 

不信的话,可以写程序验证一下,调用一个API就可以了。
The IsDBCSLeadByteEx function determines whether a specified byte is a lead byte
that is, the first byte of a character in a double-byte character set (DBCS).
BOOL IsDBCSLeadByteEx(
UINT CodePage, // identifier of code page
BYTE TestChar // byte to test
);

 

假如我们发送的字符是"/x61/x81/x81"的话,用简体中文的CodePage经过MultiByteToWideChar函数
转换后就成了"/x61/x00/xXX/xXX",当然,前提是"/x81/x81"转换成Unicode后符合简体中文的wide
char范围。所以我们要确定shellcode在经过MultiByteToWideChar转换后,符合相应code page的wide
char范围。

 

反复拜读了yuange的文章<攻击技术>>后,由衷佩服yuange技术之高!
向他致敬!
yuange在他的文章中提出:
(1)把real shellcode编码成可见字符,即小于0x80。这样在经过MultiByteToWideChar转换后就成为
"/xXX/x00",字符不会被改变。
(2)再精心编写一段符合相应code page widechar范围的代码,用这些代码来解码上述经过编码的
real shellcode。

 


yuange在那篇文章里面还提供了一段解码shellcode的代码,这些代码符合简体中文WideChar范围。
后来台湾网友Nankia说这些代码在繁体中文上面无法使用,然后Nankia自己又写了个符合繁体中文
widechar范围的解码代码。

 

后来我花了不少时间,在yuange发布的代码的基础上,修改了一些地方,写了一段符合简体中文、繁体
中文、韩文、日文 widechar范围的解码代码。以下是我测试这些解码代码是否符合相应widechar范围的
c代码。不知yuange和Nankia是怎么调试解码代码的??

 

-=-=-=-=-=-=-=-=-=-=-=-=-=-= CheckCode.c -=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-==-=-=-=-=
#include
#include

 

#define CODE_CN 936// ANSI/OEM - Simplified Chinese (PRC, Singapore)
#define CODE_TW 950// ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC)
#define CODE_JP 932// ANSI/OEM - Japanese, Shift-JIS
#define CODE_Korean 949// ANSI/OEM - Korean (Unified Hangeul Code)
int g_iCodePageList[]={936,950,932,949};
//如果为合法的wide char范围,则此byte值为1,否则为0
char *g_szWideCharShort;

 

void checkcode(unsigned char *shellcode,int iLen);
void printsc(unsigned char *sc, int len);
BOOL MakeWideCharList();
void SaveToFile();
void shellcodefnlock();

 

#define FNENDLONG 0x08

 

void main()
{
char *fnendstr="/x90/x90/x90/x90/x90/x90/x90/x90/x90";
unsigned char temp;
unsigned char *shellcodefnadd;
unsigned char shellcode[512];
int len,k;

/* 定位 shellcodefnlock的汇编代码 */
shellcodefnadd=shellcodefnlock;
temp=*shellcodefnadd;
if(temp==0xe9)
{
++shellcodefnadd;
k=*(int *)shellcodefnadd;
shellcodefnadd+=k;
shellcodefnadd+=4;
}
for(k=0;k<=0x500;++k)
if(memcmp(shellcodefnadd+k,fnendstr,FNENDLONG)==0)
break;
/* shellcodefnadd+k+8是得到的shellcodefnlock汇编代码地址 */
len = 2*wcslen(shellcodefnadd+k+8);
memcpy(shellcode,shellcodefnadd+k+8,len);

 

if(!MakeWideCharList()) return;
//SaveToFile();
/*检测shellcode是否在合法的wide char范围*/
checkcode(shellcode, len);
//printsc(shellcode, len);
}

 

BOOL MakeWideCharList()
{
unsigned char wbuff[4];
unsigned char wbuff2[4];
unsigned char buff[4];
int i,j,ret,k;

 

g_szWideCharShort = (char *)malloc(65536);
memset(g_szWideCharShort, 1 , 65536);

 

for(k=0;k{
printf("UseCodePage=%d/n",g_iCodePageList[k]);
for(i=0;i<256;i++)//for 2
{
for(j=0;j<256;j++)//for 3
{
if((i==0) && (j==0)) j=1;
me

Web中间件常见安全漏洞总结_web中间件常见漏洞总结 4.打开IIS,管理工具 ->Internet 信息服务(IIS)管理器5.选择编辑ISAPI或者CGI限制添加安装的php-cgi.exe路径,描述随意6.返回第五步的第一个图片位置,点击处理程序映射,添加如下。7.phpinfo测试IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序。 阅读详情

相关推荐

【实战】WebDav漏洞简单分析通用exploit设计

WebDav漏洞简单分析通用exploit设计创建时间:2003-05-09文章属性:原创文章提交:eyas (ey4s_at_21cn.com)WebDav漏洞简单分析通用exploit设计ey4s2003-04-25    拜读了isno写的>、>,以及Nankia写的>之后,用他们发布的exploit、以及能在网上找到的exploit在我的一些测试机上测试,有些成功,有些不成功。于是便想

FreeXploiT 2059

Web中间件常见安全漏洞总结

IIS IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS目前只适用于Windows系统,不适用于其他操作系统。 解析漏洞 IIS 6.X 基于文件名 该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。 基于文件夹名 该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。 另外,IIS6.

qq_40907977的博客 7142

〖教程〗LadonExp使用IIS写权限Webdav漏洞复现

LadonExp生成器使用教程之IIS写权限漏洞利用,含环境配置、EXP生成、批量利用、Pyhton复现代码。 漏洞成因 该漏洞的产生原因来源于服务器配置不当造成,此漏洞主要是因为服务器开启了webdav的组件导致的可以扫描到当前的操作,具体操作其实是通过webdav的OPTION来查询是否支持PUT。 IIS配置 1 启用webdav组件 2 目录给写权限(为了方便直接eveyone完全写入权限) 3 脚本资源访问权限(不然MOVE失败即无法GetShell) 漏洞复现 使用LadonEXP可轻松复现

K8哥哥 755

python创建一个目录_生成一个运行sDist的目录并创建一个空的sDist包

创建了一个安装文件。用下面的代码设置.py是import sysfrom distutils.core import setupsetup(name='SomePackage',author='dave',version='0.1.0',author_email='dave',packages=['apples',],license='LICENSE.txt',url="None",include...

weixin_30019895的博客 740

Web中间件常见漏洞总结

是一类提供系统软件和应用软件之间的连接,便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息和资源。中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。中间件=平台+通信。

qq_35358965的博客 3312

【实战】WebDav远程溢出漏洞分析

WebDav远程溢出漏洞分析创建时间:2003-03-27文章属性:原创文章来源:http://www.xfocus.net文章提交:isno (isno_at_sina.com)WebDav远程溢出漏洞分析by isno@xfocus.org一、漏洞分析    这个漏洞可能是前些年就有牛人发现了的,不过一直没公布,直到最近微软出了安全公告大家才知道原来有这么个漏洞。虽然WebDav是通过IIS

FreeXploiT 1653

Microsoft Windows ntdll.dll exploit trough WebDAV

/*******************************************************************//* [Crpt] ntdll.dll exploit trough WebDAV by kralor [Crpt] *//* --------------------------------------------------------------- *//

sunwear的专栏 3716

MS16_016 漏洞利用与安全加固_exploit windows local ms16_016_webdav

MS16_016 漏洞产生的原因是由于 Windows 中的 WebDAV(分布式创作和版本管理)未正确处理客户端发送的信息,攻击者可以运行经过特殊设计的应用程序,从而提升权限。

2401_84254057的博客 976

MS16_016 漏洞利用与安全加固_exploit windows local ms16_016_webdav(1)

在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。需要完整版PDF学习资源私我。

2401_84281629的博客 717

一款轻量级 Java CLI 工具,用于抓取、展示和导出 Exploit-DB 的漏洞数据

ExploitDB 搜索工具是一个用 Java 编写的命令行应用,支持自动化爬取Exploit-DB的公开漏洞信息,支持以表格形式展示并可导出为 CSV 文件。一款基于 Java 构建的轻量级命令行工具(CLI),用于从 Exploit-DB 数据库中抓取、解析、展示并导出漏洞利用信息。本工具专为安全研究员、渗透测试人员以及开发者设计,无需依赖浏览器,即可在终端中快速检索已公开的漏洞利用(exploit),包括 CVE 编号、漏洞类型、平台分类等核心字段。

LiBai'S BLOG 761

htb-window-6-granny-webdav-cadaver-Churrasco-Windows-Exploit-Suggester

以下的文件名都能通过,http://ip/文件名来访问,其中目录爆破也显示部分文件名。后面把payload修改成32位才反弹成功,64位无反应。把之前shell.txt 改成 shell.aspx。将再次上传,这一次使用二进制来保留上传数据。但之前的apsx反弹会报错。put 上传显示403。生成aspx反弹文件。

admin741admin的博客 98

Metasploit实战利用CVE-2017-7269漏洞攻陷IIS 6.0服务器

缓冲区溢出是软件安全领域一种经典的内存破坏漏洞,其原理是程序向固定长度的缓冲区写入超出其容量的数据,导致相邻内存区域被覆盖,从而可能被攻击者利用来劫持程序执行流程,执行任意代码。这种漏洞技术价值极高,常被用于远程代码执行和权限获取,在Web服务器、网络服务等应用场景中危害巨大。本文聚焦于一个典型的缓冲区溢出实例——CVE-2017-7269,该漏洞存在于已停止支持的微软IIS 6.0服务器的WebDAV组件中。通过结合【Metasploit】这一自动化渗透测试框架和【渗透测试】的实战流程,我们将深入剖析如何

weixin_34099526的博客 368

CVE-2017-7269(iis6.0远程代码执行漏洞复现)

前言趁着有时间,没事干,无聊!所以就拿CVE-2017-7269做一个简单漏洞复现实战演练!下面就对该漏洞进行简单的简介以及复现。漏洞描述漏洞编号:CVE-2017-7269发现人员:Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院)漏洞描述:IIS 6.0默认不开启WebDAV,一旦开启了WebDAV支持,安装了IIS6.0的服务器将可能受到该漏洞...

Fly_鹏程万里 2万+

从MS16-016漏洞解析内核提权原理与纵深防御实践

缓冲区溢出是软件安全领域的经典漏洞类型,其原理在于程序对用户输入数据缺乏严格的边界检查,导致数据写入超出预分配的内存区域,从而可能覆盖相邻的关键数据或指令指针。在操作系统内核中,此类漏洞的危害性被放大,攻击者可通过精心构造的输入触发溢出,进而劫持控制流并执行恶意代码,最终实现从普通用户权限到系统最高权限的非法提升,这对系统安全构成严重威胁。从技术价值看,深入理解内核级漏洞的利用链,是构建有效防御体系、实施精准威胁检测的基础。在应用场景上,此类漏洞常被用于渗透测试中的权限提升环节,也是红蓝对抗与系统安全加固的

ciya3282的博客 462

学着分析CVE-2017-7269 -- IIS 6.0 WebDAV远程代码执行漏洞

简介 CVE编号:CVE-2017-7269 漏洞级别:严重 漏洞影响:Windows Server 2003 r2 IIS6.0 漏洞发现人:Zhiniang Peng和Chen Wu(华南理工大学信息安全实验室,计算机科学与工程学院) 漏洞类型:缓冲区溢出 实验环境 Windows Server 2003 r2 IIS6.0 procexp

giantbranch的专栏 9415

强大溢出工具包:Metasploit命令行下的使用 (转至77169)

Metasploit 是个好东西,实在想不到别的办法了,或许这东西能帮你一下,Metasploit包含了众多exploit,说不准还能用上几个,搞几台好肉鸡.下载Metasploit双击进行安装,非常简单,一路回车就行了。安装完之后看下安装目录下的Msfconsole.bat和msfweb.bat,第一个是命令下的控制台。第二个是图形界面下的程序。现在我们先来看下命令行下的使用方法,运行后我们看到

FreeXploiT 7169
上一篇: 【分析】关于Windows下ShellCode编写的一点思考
下一篇: upfile之cookies提交利用(经典 太经典了)
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值