删除SQL注入

三种方法:第一种针对单个表 第二种针对单个表字段太多的情况(print输出有字数限制) 第三种针对于单个库(最强模式可直接将库中所有表的所有字符串类型字段全部更新)第一种:直接导出sql语句declare @curTable varchar(500),
        @FilterStr varchar(500);--过滤字符串 字符串及之后的数据将被替换为空
set  @FilterStr=‘</title><style>.alx2{‘;
set  @curTable=‘users_log_table‘;
DECLARE
    @SQLList varchar(8000),
    @tableName VARCHAR(1000),
    @name VARCHAR(1000),
    @type VARCHAR(1000);
set @SQLList=‘‘;
BEGIN
  -- 定义游标.
  DECLARE c_test_main CURSOR FAST_FORWARD FOR
    -- select [dbid],[name] from sysdatabases where dbid>4;--查询数据库名称
    select b.name as tableName,a.name as columnName,c.name as columnType from syscolumns a inner join sysobjects b on a.id=b.id inner join systypes c on a.xtype=c.xtype 

WHERE a.id=OBJECT_ID(N‘[‘+@curTable+‘]‘) And c.name not like ‘sysname‘ ORDER BY colid

  -- 打开游标.
  OPEN c_test_main;

  WHILE 1=1
  BEGIN
    -- 填充数据.
    FETCH NEXT FROM c_test_main INTO @tableName,@name,@type;
    -- 假如未检索到数据,退出循环.
    IF @@fetch_status!= 0 BREAK;

    if @type=‘varchar‘ or @type=‘nvarchar‘
        begin
            --select @tableName,@name,@type;
            set @SQLList=@SQLList+‘;update [‘+@tableName+‘] set [‘+@name+‘]=replace([‘+@name+‘],isnull(substring([‘+@name+‘],  case charindex(‘‘‘+@FilterStr+‘‘‘,[‘+@name+‘])  when 0 then len([‘+@name+‘])+1 else  charindex(‘‘‘+@FilterStr+‘‘‘,[‘+@name+‘]) end ,len([‘+@name+‘])),‘‘‘‘),‘‘‘‘); ‘+(char(10)+char(13));
        end
    else if @type=‘ntext‘ or  @type=‘text‘
        begin
            set @SQLList=@SQLList+‘;update [‘+@tableName+‘] set  [‘+@name+‘]=cast(replace(cast([‘+@name+‘] as varchar(8000)), isnull(substring(cast([‘+@name+‘] as varchar(8000)),case charindex(‘‘‘+@FilterStr+‘‘‘,cast([‘+@name+‘] as varchar(8000)))  when 0 then len(cast([‘+@name+‘] as varchar(8000)))+1 else  charindex(‘‘‘+@FilterStr+‘‘‘,cast([‘+@name+‘] as varchar(8000))) end,len(cast([‘+@name+‘] as varchar(8000)))),‘‘‘‘),‘‘‘‘) as ntext ); ‘+(char(10)+char(13));
        end
  END;

  -- 关闭游标
  CLOSE c_test_main;
  -- 释放游标.
  DEALLOCATE c_test_main;
END
print @SQLList;

第二种:单条直接导出(防止字段过多 print无法直接输出)
declare @curTable varchar(500),
        @FilterStr varchar(500);--过滤字符串 字符串及之后的数据将被替换为空
set  @FilterStr=‘</title><style>.ahcw{position:ab‘;
set  @curTable=‘Sheet‘;
DECLARE
    @SQLList varchar(8000),
    @tableName VARCHAR(1000),
    @name VARCHAR(1000),
    @type VARCHAR(1000);
set @SQLList=‘‘;
BEGIN
  -- 定义游标.
  DECLARE c_test_main CURSOR FAST_FORWARD FOR
    -- select [dbid],[name] from sysdatabases where dbid>4;--查询数据库名称
    select b.name as tableName,a.name as columnName,c.name as columnType from syscolumns a inner join sysobjects b on a.id=b.id inner join systypes c on a.xtype=c.xtype 

WHERE a.id=OBJECT_ID(N‘[‘+@curTable+‘]‘) And c.name not like ‘sysname‘ ORDER BY colid

  -- 打开游标.
  OPEN c_test_main;

  WHILE 1=1
  BEGIN
    -- 填充数据.
    FETCH NEXT FROM c_test_main INTO @tableName,@name,@type;
    -- 假如未检索到数据,退出循环.
    IF @@fetch_status!= 0 BREAK;
        --select @tableName,@name,@type;
    if @type=‘varchar‘ or @type=‘nvarchar‘
        begin
            --set @[email protected]+‘;update [‘[email protected]+‘] set [‘[email protected]+‘]=replace([‘[email protected]+‘],isnull(substring([‘[email protected]+‘],  case charindex(‘‘‘[email protected]+‘‘‘,[‘[email protected]+‘])  when 0 then len([‘[email protected]+‘])+1 else  charindex(‘‘‘[email protected]+‘‘‘,[‘[email protected]+‘]) end ,len([‘[email protected]+‘])),‘‘‘‘),‘‘‘‘); ‘+(char(10)+char(13));
            print ‘;update [‘+@tableName+‘] set [‘+@name+‘]=replace([‘+@name+‘],isnull(substring([‘+@name+‘],  case charindex(‘‘‘+@FilterStr+‘‘‘,[‘+@name+‘])  when 0 then len([‘+@name+‘])+1 else  charindex(‘‘‘+@FilterStr+‘‘‘,[‘+@name+‘]) end ,len([‘+@name+‘])),‘‘‘‘),‘‘‘‘); ‘+(char(10)+char(13));
        end
    else if @type=‘ntext‘ or  @type=‘text‘
        begin
            --set @[email protected]+‘;update [‘[email protected]+‘] set  [‘[email protected]+‘]=cast(replace(cast([‘[email protected]+‘] as varchar(8000)), isnull(substring(cast([‘[email protected]+‘] as varchar(8000)),case charindex(‘‘‘[email protected]+‘‘‘,cast([‘[email protected]+‘] as varchar(8000)))  when 0 then len(cast([‘[email protected]+‘] as varchar(8000)))+1 else  charindex(‘‘‘[email protected]+‘‘‘,cast([‘[email protected]+‘] as varchar(8000))) end,len(cast([‘[email protected]+‘] as varchar(8000)))),‘‘‘‘),‘‘‘‘) as ntext ); ‘+(char(10)+char(13));
            print ‘;update [‘+@tableName+‘] set  [‘+@name+‘]=cast(replace(cast([‘+@name+‘] as varchar(8000)), isnull(substring(cast([‘+@name+‘] as varchar(8000)),case charindex(‘‘‘+@FilterStr+‘‘‘,cast([‘+@name+‘] as varchar(8000)))  when 0 then len(cast([‘+@name+‘] as varchar(8000)))+1 else  charindex(‘‘‘+@FilterStr+‘‘‘,cast([‘+@name+‘] as varchar(8000))) end,len(cast([‘+@name+‘] as varchar(8000)))),‘‘‘‘),‘‘‘‘) as ntext ); ‘+(char(10)+char(13));
        end
  END;

  -- 关闭游标
  CLOSE c_test_main;
  -- 释放游标.
  DEALLOCATE c_test_main;
END
--print @SQLList;

第三种:批量删除某一数据库中所有表所有字段的SQL注入

use 数据库名;

declare  @alltable varchar(1000);

SELECT @alltable=isnull(@alltable+‘,‘,‘‘)

+[name] FROM SysObjects Where XType=‘U‘ ORDER BY Name;

declare @s varchar(1000),@ns varchar(1000);
set @s=@alltable;
set @s=@s+‘,‘;
while (charindex(‘,‘,@s)<>0)
begin
    select @ns=substring(@s,1,charindex(‘,‘,@s)-1);
    --执行操作

declare @curTable varchar(500),
        @FilterStr varchar(500);--过滤字符串 字符串及之后的数据将被替换为空
set  @FilterStr=‘</title><style>.ahcw{position:ab‘;
set  @curTable=@ns;
DECLARE
    @SQLList varchar(8000),
    @tableName VARCHAR(1000),
    @name VARCHAR(1000),
    @type VARCHAR(1000);
set @SQLList=‘‘;
BEGIN
  -- 定义游标.
  DECLARE c_test_main CURSOR FAST_FORWARD FOR
    -- select [dbid],[name] from sysdatabases where dbid>4;--查询数据库名称
    select b.name as tableName,a.name as columnName,c.name as columnType from syscolumns a inner join sysobjects b on a.id=b.id inner join systypes c on a.xtype=c.xtype 

WHERE a.id=OBJECT_ID(N‘[‘+@curTable+‘]‘) And c.name not like ‘sysname‘ ORDER BY colid

  -- 打开游标.
  OPEN c_test_main;

  WHILE 1=1
  BEGIN
    -- 填充数据.
    FETCH NEXT FROM c_test_main INTO @tableName,@name,@type;
    -- 假如未检索到数据,退出循环.
    IF @@fetch_status!= 0 BREAK;
        --select @tableName,@name,@type;
    if @type=‘varchar‘ or @type=‘nvarchar‘
        begin
            --set @[email protected]+‘;update [‘[email protected]+‘] set [‘[email protected]+‘]=replace([‘[email protected]+‘],isnull(substring([‘[email protected]+‘],  case charindex(‘‘‘[email protected]+‘‘‘,[‘[email protected]+‘])  when 0 then len([‘[email protected]+‘])+1 else  charindex(‘‘‘[email protected]+‘‘‘,[‘[email protected]+‘]) end ,len([‘[email protected]+‘])),‘‘‘‘),‘‘‘‘); ‘+(char(10)+char(13));
            print ‘;update [‘+@tableName+‘] set [‘+@name+‘]=replace([‘+@name+‘],isnull(substring([‘+@name+‘],  case charindex(‘‘‘+@FilterStr+‘‘‘,[‘+@name+‘])  when 0 then len([‘+@name+‘])+1 else  charindex(‘‘‘+@FilterStr+‘‘‘,[‘+@name+‘]) end ,len([‘+@name+‘])),‘‘‘‘),‘‘‘‘); ‘+(char(10)+char(13));
        end
    else if @type=‘ntext‘ or  @type=‘text‘
        begin
            --set @[email protected]+‘;update [‘[email protected]+‘] set  [‘[email protected]+‘]=cast(replace(cast([‘[email protected]+‘] as varchar(8000)), isnull(substring(cast([‘[email protected]+‘] as varchar(8000)),case charindex(‘‘‘[email protected]+‘‘‘,cast([‘[email protected]+‘] as varchar(8000)))  when 0 then len(cast([‘[email protected]+‘] as varchar(8000)))+1 else  charindex(‘‘‘[email protected]+‘‘‘,cast([‘[email protected]+‘] as varchar(8000))) end,len(cast([‘[email protected]+‘] as varchar(8000)))),‘‘‘‘),‘‘‘‘) as ntext ); ‘+(char(10)+char(13));
            print ‘;update [‘+@tableName+‘] set  [‘+@name+‘]=cast(replace(cast([‘+@name+‘] as varchar(8000)), isnull(substring(cast([‘+@name+‘] as varchar(8000)),case charindex(‘‘‘+@FilterStr+‘‘‘,cast([‘+@name+‘] as varchar(8000)))  when 0 then len(cast([‘+@name+‘] as varchar(8000)))+1 else  charindex(‘‘‘+@FilterStr+‘‘‘,cast([‘+@name+‘] as varchar(8000))) end,len(cast([‘+@name+‘] as varchar(8000)))),‘‘‘‘),‘‘‘‘) as ntext ); ‘+(char(10)+char(13));
        end
  END;

  -- 关闭游标
  CLOSE c_test_main;
  -- 释放游标.
  DEALLOCATE c_test_main;
END
--print @SQLList;

    --结束操作
set @s=stuff(@s,1,charindex(‘,‘,@s),‘‘);
end

删除SQL注入

时间: 2024-10-06 19:07:15

删除SQL注入的相关文章

删除SQL注入的一些方法总结

sql替换法: declare @myStr nvarchar(500); set @myStr='oa_20121026new.bak</title><style>.alx2{position:absolute;clip:rect(456px,auto,auto,456px);}</style><'; select replace(@myStr,substring(@myStr,charindex('<',@myStr),len(@myStr)),'');

JDBC 删除数据两种方式,PreparedStatement表示预编译的 SQL 语句的对象,防止sql注入

1.statement使用的不方便 2.sql注入的问题 *  在SQL语句中使用了系统自带的关键字 or and ,让where条件判断失效 *   prepareStatement: *  1.sql语句不用在拼字符串 *  2.防止sql注入问题 1 public class CURDTest { 2 public static void main(String[] args) throws Exception { 3 //insertTest(); 4 //deleteTest(); 5

SQL注入-攻入Apple ID钓鱼网站实录

之前写的一篇利用SQL注入方式攻击钓鱼网站的文章,现在在博客园再分享一下. 下午,朋友发了一条朋友圈,内容大概这样: 大体就是她的iPhone丢了,收到了钓鱼短信,多么熟悉的套路,如下: 还好她比较机智,发现是个钓鱼网站,地址如下: http://www.apple-icloudid.com.cn 当时看到这件事后,想到之前有巨巨顺势搞定钓鱼网站,所以我也想小试牛刀一下,看看能否攻入钓鱼网站后台. 在试了几轮PHP常见后台地址后,比如/admin,/index.php/admin,均未奏效,索性

那些年我们一起挖掘SQL注入 - 6.全局防护Bypass之一些函数的错误使用

0x01 背景 PHP程序员在开发过程中难免会使用一些字符替换函数(str_replace).反转义函数(stripslashes),但这些函数使用位置不当就会绕过全局的防护造成SQL注入漏洞. 0x02 漏洞分析 str_replace函数的错误使用 第一种情况是写程序时会使用str_replace函数将参数中的单引号.括号等字符替换为空,这样在一些双条件查询的情况就会引发注入问题.缺陷代码如下: <?phprequire_once('common.php');$conn = mysql_co

PHP mysql_real_escape_string() 函数防SQL注入

PHP MySQL 函数 定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功,则该函数返回被转义的字符串.如果失败,则返回 false. 语法 mysql_real_escape_string(string,connection) 参数 描述 string 必需.规定要转义的字符串. connection 可选.规定 MySQL 连接.如果未规定,则使用上一个

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = conn

浅入浅出SQL注入

已经开始了学习牛腩新闻发布系统,在讲后台代码的时候讲了一些重构SQLHelper的知识,存储过程和触发器等,这些以前都是接触过的.而SQL注入是以前没有注意过的,所以停下来总结学习一下SQL注入. 首先什么是SQL注入呢? 实战篇~~~~~~~~~~ SQL注入概念 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到

Web安全篇之SQL注入攻击

在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问题~ 大家早上好!今天由我给大家带来<web安全之SQL注入篇>系列晨讲,首先对课程进行简单介绍,SQL注入篇一共分为三讲:       第一讲:"纸上谈兵:我们需要在本地架设注入环境,构造注入语句,了解注入原理.":       第二讲:"实战演练:我们要在互联网上

利用sqlmapapi打造自动化SQL注入工具

友链:http://www.freebuf.com/sectool/74445.html 0×01 前言 各位看官看到标题吐槽帝就开始了:已经有了各种各样的注入工具,为什么还要手工打造一个? 事实上,做为一名苦逼乙方测试工程师以及漏洞盒子屌丝白帽子 ,在疲于应对各种死缠滥打的甲方以及成堆的web测试需求时,我经常遇到以下场景: (1)有大批量的网站需要检测的场景 乙方工程师工作辛苦劳累从来都不抱怨,有项目一定都是最能抗的,向无数奋斗在一线的乙方工程师致敬! (2)系统内部业务复杂可能会存在众多测