黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!
plant

设为首页
收藏本站
联系我们
网站导航

黑客文章 - 脚本漏洞 - 浏览 - [原创]留言本另类写入一句话木马研究

[原创]留言本另类写入一句话木马研究

黑客 发布日期:2009-4-18 1:25:34 共有 3033 人次浏览
[原创]留言本另类写入一句话木马研究

转载请务必保留署名与链接!

                                                幻泉[B.S.N]

在《针对留言本的漏洞挖掘》文章中我写了一段话,就是针对写入数据库一句话木马的研究中,可以利用Request.ServerVariables没做过滤绕过写入一句话,来进行插入数据库木马。

  但是当时只是猜测,虽然在06年有介绍针对一些php针对获取ip没做过滤导致注射漏洞。但是学习就是以技术的严谨性为原则,无论什么漏洞都必须亲自测试否则只是理论上的说教是不被人信服的。

这里还正好有这样的一个留言本,让我们来进行测试。

测试代码:花木兰留言本

官方网站:www.77f77.com

首先我们看看他的提交代码都对什么做了过滤。

文件比较少,就直接列下留言本的结构吧。

花木兰留言本

  |___index.asp 留言本主要文件内部有提交和显示信息的主要代码。

  |____ gustbook_Conn.asp 留言本调用数据库文件

  |_____ gustbook_sub.asp  Function

  |_____dqe_gustbook.asp  数据库文件

这里我们最主要的就是看index.asp,因为已经确认数据库文件没做防下载,可以直接访问。

Index.asp部分重要代码

Code:
'过滤代码

Function htmlencode(fString)

If not isnull(fString) then

    fString = replace(fString, ">", ">")

    fString = replace(fString, "<", "<")

    fString = Replace(fString, CHR(32), " ")

    fString = Replace(fString, CHR(9), " ")

    fString = Replace(fString, CHR(34), """)    ‘  “

    fString = Replace(fString, CHR(39), "'")     ‘   ‘

    fString = Replace(fString, CHR(13), "")

    fString = Replace(fString, CHR(10) & CHR(10), "</p><p> ")

    fString = Replace(fString, CHR(10), "<br> ")

       htmlencode = fString

End If

End Function



Function uhtmlencode(fString)

If not isnull(fString) then

       fString = Replace(fString, " ", CHR(32))

       fString = Replace(fString, " ", CHR(9))

       fString = Replace(fString, """, CHR(34))

       fString = Replace(fString, "'", CHR(39))

       fString = Replace(fString, "", CHR(13))

       fString = Replace(fString, "</p><p> ", CHR(10) & CHR(10))

       fString = Replace(fString, "<br> ", CHR(10))

       uhtmlencode = fString

End If

End Function

…….

'提交数据

Books_mingzi=htmlencode(Request.form("mingzi"))

If Books_mingzi="" then Books_mingzi="匿名者" End If

Books_biaoti=htmlencode(Request.form("biaoti"))

Books_neirong=htmlencode(Request.form("neirong"))

……

Set mRs= Server.CreateObject("adodb.recordSet")

       mRs.open "Select * from dqe_gustbook", conn, 1, 3

       mRs.addnew

              mRs("who") = Books_mingzi

              mRs("biaoti") = Books_biaoti

              mRs("neirong") = Books_neirong

              mRs("lanmu") = lanmu

              mRs("zhiding") = 0

              mRs("shijian") = now()

              UserIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

              If UserIP = "" Then userip = Request.ServerVariables("REMOTE_ADDR")

              mRs("ip") = UserIP

       mRs.update

       mRs.close

       Set mRs = nothing

              Response.Write "<script>alert('留言添加成功\n\花木兰官网http://www.77f77.com');this.location.href='"&Url&"';</SCRIPT>"

              Response.End




就这些有用代码,编写作者对用户提交的form信息都利用htmlencode进行了过滤,看来作者对漏洞还是有一定防范的。

但是在添加更新的时候获取的HTTP_X_FORWARDED_FOR并没做过滤,导致我们可以利用。

实际应用:

如图:



直接可以利用刺猬写的post提交工具提交,也可以自己抓包利用nc来提交。


返回200ok证明提交成功,访问数据库就会发现插入成功。如图:




信息来源:[B.S.N]——关注脚本安全http://sites.google.com/site/bsnguanzhujiaobenanquan/

所属分类: 脚本漏洞     网摘收藏: Google 雅虎 百度 POCO 365key 和讯 天极