zoukankan      html  css  js  c++  java
  • ASP代码审计学习笔记-1.SQL注入

     ASP注入漏洞

    一、SQL注入的原因

    按照参数形式:数字型/字符型/搜索型

    1、数字型sql查询

    sql注入原因:

    ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:

    id=request.querystring("id")

    sql="select * from 表名l where 字段= "&id

    sql注入产生,sql闭合

    注入的参数为 ID=49 And [查询条件],即是生成语句: 

    sql="Select * from 表名 where 字段=49 And [查询条件]"

    2、字符型sql查询

    sql注入原因:

    name=abc 这类注入的参数是字符型,SQL语句原貌大致概如下: 

    name=request.querystring("name")

    sql="select * from 表名 where 字段= '"&name&"'"

    sql注入产生,sql闭合

    注入的参数为name=abc’ and [查询条件] and '1'='1 ,即是生成语句: 

    sql="Select * from 表名 where 字段=’abc’ and [查询条件] and  '1'='1'"

    3、搜索型sql查询

    sql注入原因:

    搜索时没过滤参数的,如 keyword=关键字,SQL语句原貌大致如下: Select * from 表名 where 字段 like ’%关键字%’

    keyword=request.querystring("keyword")

    sql="select * from detail where url like '%"&keyword&"%'"

    sql注入产生,sql闭合

    注入的参数为 keyword=’ % and [查询条件] and ‘%’=’, 即是生成语句:

    sql="Select * from 表名 where 字段 like ’%’ and [查询条件] and ‘%’=’%’"

    二、SQL注入防御

    防御方法不外乎两种,一白名单,二黑名单。

    A、白名单:

     解决数字型注入的方法一般采用白名单方式,只允接收的值为数字型。

     a、id=cint(request.querystring("id"))

    cint范围 -32,768 到 32,767。 可能存在数据溢出
    clng范围 -2,147,483,648 到 2,147,483,647

     b、if not isnumeric(id) then              

          response.end               

          end if

     c、正则匹配

    B、黑名单:

      字符型或搜索型注入一般采用名单,进行过滤或者转义一些特殊字符,以达到修复效果。

    a、word=replace(request.querystring("word"),"'","")

    b、if instr(username,"'") Then 
         Response.end  
         end if           //包含了单撇号 则 不进行下面的sql查询

    三、参数接收方式

    GETsql注入

    id=request.querystring("id")

    sql="select * from detail where id= "&id

    POSTsql注入

    id=request.form("id")

    sql="select * from detail where id= "&id

    Cookiesql注入

    id=request.cookies("id")

    sql="select * from detail where id= "&id

    通用型sql注入(GET POST COOKIE

    id=request("id")

    sql="select * from detail where id= "&id

    四、通用防注入问题

    1、没有过滤cookie,当使用request("id"),接收任何类型时,可注入;

    2、Request.ServerVariables("QUERY_STRING"),可以过滤单引号’,但是不能过滤URL编码%27,从而可以绕过;

    3、记录文件为ASP,通过注入一句话,访问记录文件,从而获取webshell权限。

    关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

    五、bypass问题

    绕过关键字和单撇号过滤

    MSSQL CHAR()函数

    用/*fdfd*/代替空格,如:UNION/**/select/**/use from user

    用/**/分割敏感词,如:U/**/NION/**/SE/**/LECT/**/user from user

    0x730079007300610064006D0069006E00 =hex(sysadmin)

    注入的参数为 ID=49 And [查询条件],即是生成语句: 
    Select * from 表名 where 字段=49 And [查询条件]

  • 相关阅读:
    How do I change a .txt file to a .c file?
    [CQOI2007]余数求和
    CSP-J总结&题解
    【CSP游记S】
    [LuoguP1462]通往奥格瑞玛的道路
    归并排序——逆序对
    [NOIP 2011]选择客栈
    [二分图初步]【模板】二分图匹配,匈牙利算法
    [NOIP 2018]旅行
    黑魔法师之门 (magician)-并查集
  • 原文地址:https://www.cnblogs.com/xiaozi/p/5764538.html
Copyright © 2011-2022 走看看