操作系统:Windows Server 2008 R2 Enterprise Service Pack 1 x64 IIS版本:IIS7.5 程序:asp.net
http 常见功能:开启静态内容,默认文档,HTTP错误;目录浏览,WebDAV发布如无特殊要求,不要开启;HTTP重定向可根据需要开启。
应用程序开发:这个可根据实际情况开启,如为asp.net的开启ASP.NET,.NET扩展性,ISAPI扩展,ISAPI筛选;在服务器端的包含文件根据需要开启。
健康和诊断:建议开启HTTP日志记录,日志记录工具,请求监视;其他可根据需要开启。
安全性:建议开启URL授权,请求筛选,IP和域限制;其他根据需要开启。
性能,管理工具,ftp服务器,IIS可承载的Web核心可根据开启。
IIS7.5涉及两个账户,一个为匿名账户,一个为应用程序池账户。在磁盘的NTFS权限设置中,匿名账户只需要拥有对网站目录的读取权限即可;而应用程序池账户需要根据程序实际情况给予相应权限,比如:需要去写文件,则要给予写权限,需要去调用一个程序(如cmd.exe)则需要给予执行权限。总之,对文件的访问,首先需要有匿名账户的访问权限,然后再根据程序的操作需要什么样的权限给予应用程序池账户相应的权限。
1. 上传目录的写入权限由应用程序池账户决定;
2. 应用程序池默认对于的账户为IIS APPPOOL\{app pool name},且属于IIS_IUSRS组;
3. 默认的匿名账户为IUSR账户,且属于authenticated users 组;
4. 任何用户都属于USERS组,且手工删除后仍然属于USERS组;
5. 上传木马之后,能够看到的目录是由应用程序池账户决定的;
6. 在此测试环境下,USERS组默认拥有网站目录的写入权限;
7. 一个aspx文件的运行跟NTFS的运行权限无关;
8. 对于网站的匿名账户只需要对网站目录有读取权限;
9. 应用程序池账户运行aspx也只需要读取权限,但是如果要写文件需则写权限,要执行其他程序则需要执行权限;
1. webdav直接上传webshell
2. 通过程序文件上传漏洞上传webshell
3. webshell的权限过高导致被提权
在安装的时候直接不安装webdav组件
可以在IIS中设置需要上传文件的目录,处理程序映射中的编辑功能权限中的脚本去掉,这样即使上传了木马文件在此目录,也是无法执行的。
上传目录取消应用程序池账户的执行权限
可以设置进程池账户对其他文件夹无读取权限。
取消进程池账户的NTFS执行权限。
进程池账户选择权限较低的账户,最好就是默认的账户。
1. 匿名账户使用默认的“应用程序用户”也就是对应的IUSR。
2. 应用程序池账户使用默认的IIS AppPool\应用程序池名称。
3. 删除everyone,users在所有磁盘上的权限。
4. 删除users在system32上的所有权限(需要先修改所有者为administrator)。
5. 在网站目录下给予IUSR读取权限。
6. 在网站目录下给予IIS AppPool\应用程序池名称读取权限,如果程序中有特殊要求的权限,如写入文件等,则再对应的目录下给予相应的权限,如写入权限。
7. 在网站要求的上传目录给予IIS AppPool\应用程序池名称写入权限,但是不给予执行权限。
8. 在IIS中取消上传目录的脚本执行权限。
在测试过程中发现,访问aspx程序,如果匿名账户为自定义的账户,则需要给自定义的匿名账户在文件夹C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files
上的写入权限;但是,如果使用默认的匿名账户,也就是IUSR时,需要给予应用程序池账户在此文件夹上的写入权限。疑问点在于此文件夹到底是需要哪个账户的写入权限,因为选择默认的匿名账户时,即时禁止IUSR在此文件的写入权限,只要应用程序池账户在此文件夹有写权限,一样运行正常?
当匿名用户为程序默认的时候,应该就是IUSR,但为什么又传递的进程池账户?