CVE:CVE-2002-1825
CNNVD:CNNVD-200212-145
WASD VMS超文本服务是一款使用在OpenVMS系统上流行的HTTP服务程序。
WASD HTTP服务程序存在多个漏洞，远程攻击者可以利用这些漏洞进行访问系统文件，获得系统敏感信息，以SYSTEM权限执行任意指令等攻击。
* 默认情况下"Tree"内部脚本允许生成目录树，通过提交 http://webserver/tree/ 请求，可以获得整个目录树。提交统配符'*.*'可导致获得全部文件信息。
(相关文档：http://wasd.vsm.com.au/ht_root/doc/env/env_0400.html#43 )
* 默认情况下，向WASD HTTP服务程序提交类似如下的请求，可以造成目录遍历攻击：
http://webserver/dirname/*.*
(相关文档：http://wasd.vsm.com.au/ht_root/doc/env/env_0400.html )
* upd脚本存在目录遍历漏洞，提交http://webserver/upd/dirname/请求可以泄露当前文件信息。(相关文档：http://wasd.vsm.com.au/httpd/-/updhelp.html )
* WASD HTTP服务程序存在多个搜索脚本，可以用来搜索所有文档。(相关文档：http://wasd.vsm.com.au/ht_root/doc/env/env_0700.html#97 )
* 默认情况下server root可访问，系统中文档目录就是服务程序主ROOT目录，包含多个配置文件，脚本，可执行文件，直接访问这些文件可以获得环境变量信息，配置等敏感信息。(相关文档：http://wasd.vsm.com.au/ht_root/doc/htd/htd_0600.html#98 )
* 系统访问控制规则可以很容易的绕过。
  如httpd$map.conf配置文件包含如下：
  pass /ht_root/wwwroot*
  fail /ht_root/*
  fail /-/*
  在上面这种情况下，服务程序主目录是ht_root，而文档目录是WWWROOT。"fail"规则可以通过如下访问绕过：
  http://theserver/ht_root/wwwroot/-/*.*
* 文档ROOT位置容易判别：
  文档ROOT位置可以方便的通过"where"脚本获得(相关文档：http://wasd.vsm.com.au/ht_root/doc/htd/htd_2100.html#364 )
  即使"where"脚本没有启用，"404 not found"错误页面提供的消息也会返回文档ROOT位置。错误页面会返回包含如下类似的信息：
  <!-- sts: %X00018292 "$1$DUA2:[HT_ROOT.][WWWROOT]NOTFOUND" -->
* 全部WEB配置文件可以方便的获得：
  Web服务程序配置信息存放在ht_root/local/httpd$map.conf文件中，一般由如下规则保护：
  fail /ht_root/local/*
  但是可以通过如下方法绕过获得配置文件信息：
  http://theserver/ht_root/wwwroot/-/local/httpd$map.conf
  在一台机器上测试，既然没有"fail"规则，配置文件可以通过如下方法获得：
  http://theserver/local/httpd$map.conf
* 所有WEB服务程序LOG可以方便获得：
  如果配置文件中设置如下规则：
  fail /ht_root/log/*
  可以通过如下请求获得日志信息：
  http://theserver/upd/ht_root/src/-/log/
  如果日志由ACLs保护，但你有系统上一个合法用户帐户，可以通过如下方法获得：
  $ show log HTTPD80$REQUEST
      "HTTPD80$REQUEST" = "08 11:56:42.200.430.5287.0.9000.<a href="http://theserver:" target="_blank">http://theserver:
       80.ip.address.of.caller.GET /filename"
* "tree"脚本可以显示隐藏的目录信息：
  服务程序日志一般存放在/ht_root/log/server/目录下，由于一般由"fail"规则保护，所以子目录一般都隐藏，不过通过"tree"脚本可以访问隐藏目录信息：
  <a href="http://theserver/tree/ht_root/" target="_blank">http://theserver/tree/ht_root/
* CGI脚本列表可以方便的获得：
  通过提交 <a href="http://theserver/cgi-bin/*.*" target="_blank">http://theserver/cgi-bin/*.* 访问不能获得CGI脚本列表，但是一般脚本都存放在ht_root/script/或者ht_root/script_local目录下，如果配置文件阻止这些目录访问，一般可以通过如下访问绕过限制获得CGI列表：
  <a href="http://theserver/ht_root/wwwroot/-/script_local/*.*" target="_blank">http://theserver/ht_root/wwwroot/-/script_local/*.*
  各个用户的CGI脚本，可以运行URL：
  <a href="http://theserver/~username/cgi-bin/scriptname" target="_blank">http://theserver/~username/cgi-bin/scriptname
  一般访问如下脚本会失败：
  <a href="http://theserver/~username/cgi-bin/*.*" target="_blank">http://theserver/~username/cgi-bin/*.*
  但是你可以通过提交如下请求获得CGI脚本列表：
  <a href="http://theserver/~username/xxx/-/cgi-bin/*.*" target="_blank">http://theserver/~username/xxx/-/cgi-bin/*.*
  <a href="http://theserver/~username/.../*.com?search=$" target="_blank">http://theserver/~username/.../*.com?search=$
* CGI脚本源代码可以获得：
  通过上面方法获得CGI脚本列表，可以点击相关连接获得脚本源代码，一般情况下脚本连接如如下形式：
  <a href="http://theserver/ht_root/wwwroot/-/script_local/scriptname" target="_blank">http://theserver/ht_root/wwwroot/-/script_local/scriptname
* OpenVMS系统文件可以读取：
  部分站点中，配置规则设置如下，只允许访问选择性的系统部分文件：
  pass /sys$common/syslib/* /sys$common/syslib/*
  不过其他系统文件可以通过如下方法获得：
  <a href="http://theserver/sys$common/syslib/-/sysmgr/systartup_vms.com" target="_blank">http://theserver/sys$common/syslib/-/sysmgr/systartup_vms.com
* 用户HOME目录可以读取：
  一般用户目录映射为 <a href="http://theserver/~username/web/" target="_blank">http://theserver/~username/web/ ，如果OpenVMS保护和ACL设置不正确，可能可以以如下方法访问：
  <a href="http://theserver/~username/-/*.*" target="_blank">http://theserver/~username/-/*.*
  不过有设置如下的映射规则会返回错误：
  pass /*/-/* /ht_root/runtime/*/*
  但是可以通过如下方法访问：
  <a href="http://theserver/~username/x/--/*.*" target="_blank">http://theserver/~username/x/--/*.*
  这里"--"类似"../.."。
* 默认情况下CGI脚本可执行：
  默认情况下CGI脚本以http$server用户进程运行httpd.exe或者httpd_ssl.exe，这是个高权限用户，如果某个CGI脚本存在漏洞，可导致整个系统被控制。
* 默认CGI脚本存在多个漏洞：
  某个脚本如果在VMS ACL运行的情况下可以写任意文件内容到服务器上，这个漏洞可以导致获得SYSTEM权限。
  运行cgi_process.com程序，可以泄露大量系统相关信息给攻击者。
* PerlRTE_example1.pl脚本存在格式字符串漏洞，问题存在于printf ("$name=\"$ENV{$name}\"\n");调用上，这个$name变量由用户输入，但没有进行充分过滤。攻击者提供恶意格式串可导致覆盖内存任意地址，造成拒绝服务，或者执行任意代码。如<a href="http://wasd.vsm.com.au/plrte/PerlRTE_example1/%25x%25x%25x" target="_blank">http://wasd.vsm.com.au/plrte/PerlRTE_example1/%25x%25x%25x
* print.com CGI脚本可以打印任意文件：
  默认情况下print.com CGI脚本允许从远程打印文件到服务器上，不过这个脚本访问受IP限制如：
  $ HPRINTS_ALLOWED = "131.185.250.*"
任何这个IP地址范围内的用户可以打印任意文件，可能导致拒绝服务攻击。
solution:Upgrade wasd wasd_http_server to a higher version than 7.1,7.2,7.2.1,7.2.2,7.2.3,8.0,and avoid the version 7.1,7.2,7.2.1,7.2.2,7.2.3,8.0