zoukankan      html  css  js  c++  java
  • cookie注入讲解

    我们首先还是来看看中网景论坛的最新版本"(CNKBBS2007)中网景论坛2007v5.0 "官方下载地址" http://www.cnetking.com/websys2.asp?id=26"发布时间是2007-06-06,打开系统的源代码后,在"user_RxMsg_detail.asp"文件中,有如下代码:

    <!--#include file="opendb.asp" -->
    (调用opendb.asp文件)
    <!--#include file="char.asp" -->
    <%
    Call CheckUserLogin(username)
    Dim action,s,id
    id=request("id") (获取客户提交的变量,并赋值给id,并没过滤,也没有指定采用那种方式提交)
    if id<>"" then Call IsNum(bid) (这是程序员的出现地方,注意bid<>id)
    conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '设置已读
    rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3

    我们再打开"opendb.asp"文件

    <%Option Explicit
    Response.Buffer = true%>
    <!--#include file="fzr.asp" --> (调用fzr.asp文件)
    <!--#include file="cnkdata/dbname.asp" -->
    <!--#include file="config.asp"-->
    ..................


    以现它是连接数据库的文件,其中调用了fzr.asp文件,我们再打开fzr.asp文件


    <%
    '--------版权说明------------------
    'SQL通用防注入程序
    'Aseanleung
    '--------定义部份------------------
    Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
    Dim fso1,all_tree2,file1,files,filez,fs1,zruserip
    If Request.QueryString<>"" Then (对Request.QueryString提交(客户采用GET方式提交)的数据进行判断,并没有指明对其它方式提交的数据进行判断)
    '自定义需要过滤的字串,用 "|" 分隔
    Fy_In = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|script" (阻止了常用的SQL注入的语句)
    Fy_Inf = split(Fy_In,"|")
    For Each Fy_Get In Request.QueryString
    For Fy_Xh=0 To Ubound(Fy_Inf)
    If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
    zruserip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If zruserip="" Then zruserip=Request.ServerVariables("REMOTE_ADDR")
    Response.Write "内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!<br>"
    Response.Write "如是要攻击网站,系统记录了你的操作↓<br>"
    Response.Write "操作IP:"&zruserip&"<br>"
    Response.Write "操作时间:"&Now&"<br>"
    Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
    Response.Write "提交方式:GET<br>"
    Response.Write "提交参数:"&Fy_Get&"<br>"
    Response.Write "提交数据:"&Request.QueryString(Fy_Get)
    ......................

    很明显的看出它是一个SQL通用防注入程序文件,(以上的红字是对代码的解释)

    代码看好了,我们来整理下思路:由于程序员的出错,导致了id没有被过滤就被带到SQL语句中查询,这是注入漏洞产生的原因,虽然程序引入了防注入程序,阻止了常用的SQL语句使用,但只对客户采用GET方式提交的数据进行判断,而没有对其它方式提交的数据进行判断,这样导致了客户可以使用Request.cookie方式来提交变量的值,而绕过了SQL防注入程序(总结下:cookie注入产生的条件:系统直接使用"request("name")"获取客户提交的数据,并对客户提交的变量没有过滤,而且在防注入程序中没有限制Request.cookie,现在防注入程序3.0只是对客户采用GET和POST提交方式进行了限制).

  • 相关阅读:
    Go module学习笔记
    java并发基础及原理
    java并发之内存模型
    https理论及实践
    Mysql查询结果导出Excel表
    mysql清空表数据并重置自增ID
    html a标签链接点击闪动问题解决
    rocketmq-console控制台管理界面配置
    nginx多层反代配置变量proxy_set_header
    nginx 实现浏览器文件下载服务
  • 原文地址:https://www.cnblogs.com/wangluochong/p/3405262.html
Copyright © 2011-2022 走看看