sql盲注怎么解决

时间:2021-01-21 21:42:39
用appscan时检测出了sql盲注,有没有什么好的办法解决,让appscan检测不出这个问题

14 个解决方案

#1


它报告的问题实际上在你的系统中存在吗?

#2


就是SQL注入嘛
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213

#3


SQL参数化

#4


其实最“好”的办法,就是把你的老板用酒灌醉,或者让他无法上班,这样你就清闲了。如果让我们说什么是有“道德”的做法,那么就是要真正面对自己的问题,而不是去蒙谁。

盲注的意思,是说假设在页面用账号123登陆没有错误,用账号12345登陆则报“此用户不存在”,而用账号 123'45登陆则不报告“此账号不存在”(而是其它错误信息页面,或者干脆就不报错),那么这就是盲注成功了。这就意味着,你连带有单引号的用户都不能当作普通的用户名去处理。

有人说“我把单引号过滤掉不就没有SQL注入了嘛”。其实是就是不了解什么叫“盲注”而说出来的。盲注可不是什么简单的防SQL注入,而是判断你能够正确地处理基本的sql语言语法。

#5


引用 楼主 qiuzhongliang123 的回复:
用appscan时检测出了sql盲注,有没有什么好的办法解决,让appscan检测不出这个问题

你的软件存在sql注入的漏洞么?
如果没这种漏洞,你管它sql盲注呢?!

#6


盲注检测许多都是误报,所以你需要问一问它到底使用的检测数据“是什么”。有些扯淡的厂商进行的盲注检测,假设在录入界面写
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。

所以你应该先把对方提供的具体的检测信息贴出来。

#7


如果注入了给出黄页,应该算是程序有漏洞才对。
黄页也会暴露很多信息。只是有些低级程序员看不懂而已。

#8


该回复于2015-07-02 13:48:40被管理员删除

#9


什么意思。。。。。。。。。。。。。

#10


如果是误判 再对那些漏洞扫一次就不会出现了

http://www-01.ibm.com/support/docview.wss?uid=swg21674465

#11


引用 2 楼 starfd 的回复:
就是SQL注入嘛
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213


采用了实体框架,微软内部应该用的是参数化吧,不知道为什么还会出现

#12


引用 10 楼 u011053846 的回复:
如果是误判 再对那些漏洞扫一次就不会出现了

http://www-01.ibm.com/support/docview.wss?uid=swg21674465
每次扫都会出现

#13


引用 6 楼 sp1234 的回复:
盲注检测许多都是误报,所以你需要问一问它到底使用的检测数据“是什么”。有些扯淡的厂商进行的盲注检测,假设在录入界面写
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。

所以你应该先把对方提供的具体的检测信息贴出来。
采用的是IBM自动检测的,天知道他输入了什么东西,按照什么规则来测的 ,头都大了

#14


看来你也是比appscan逼的
aspx防护代码

-----------------使用方法------------------------------------------------------------------
1.将App_Code目录拷贝到web根目录
假如已经存在App_Code目录,那直接把App_Code目录里的360safe.cs文件拷贝到当前的App_Code目录即可。

2.将Global.asax文件拷贝到web根目录
假如已经存在Global.asax文件,那直接把下面这段代码
     void Application_BeginRequest(object sender, EventArgs e)
    {

            if (Request.Cookies != null)
            {
                if (safe_360.CookieData())
                {
                    Response.Write("您提交的Cookie数据有恶意字符!");
                    Response.End();
                
                }

           
            }

            if (Request.UrlReferrer != null)
            {
                if (safe_360.referer())
                {
                    Response.Write("您提交的Referrer数据有恶意字符!");
                    Response.End();
                }
            }

            if (Request.RequestType.ToUpper() == "POST")
            {
                if (safe_360.PostData())
                {

                    Response.Write("您提交的Post数据有恶意字符!");
                    Response.End();
                }
            }
            if (Request.RequestType.ToUpper() == "GET")
            {
                if (safe_360.GetData())
                {
                    Response.Write("您提交的Get数据有恶意字符!");
                    Response.End();
                }
            }

         
    }
拷贝到当前的Global.asax文件里保存。
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
public class safe_360
{

    private const string StrRegex = @"\b(alert|confirm|prompt)\b|^\+/v(8|9)|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";

    public static bool PostData()
    {
        bool result = false;

        for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.Form[i].ToString());
            if (result)
            {
                break;
            }
        }
        return result;
    }

 
    public static bool GetData()
    {
        bool result = false;

        for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.QueryString[i].ToString());
            if (result)
            {
                break;
            }
        }
        return result;
    }


    public static bool CookieData()
    {
        bool result = false;
        for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower());
            if (result)
            {
                break;
            }
        }
        return result;
    
    }
    public static bool referer()
    {
        bool result = false;
        return result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString());
    }

    public static bool CheckData(string inputData)
    {
        if (Regex.IsMatch(inputData, StrRegex))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

  
}

#1


它报告的问题实际上在你的系统中存在吗?

#2


就是SQL注入嘛
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213

#3


SQL参数化

#4


其实最“好”的办法,就是把你的老板用酒灌醉,或者让他无法上班,这样你就清闲了。如果让我们说什么是有“道德”的做法,那么就是要真正面对自己的问题,而不是去蒙谁。

盲注的意思,是说假设在页面用账号123登陆没有错误,用账号12345登陆则报“此用户不存在”,而用账号 123'45登陆则不报告“此账号不存在”(而是其它错误信息页面,或者干脆就不报错),那么这就是盲注成功了。这就意味着,你连带有单引号的用户都不能当作普通的用户名去处理。

有人说“我把单引号过滤掉不就没有SQL注入了嘛”。其实是就是不了解什么叫“盲注”而说出来的。盲注可不是什么简单的防SQL注入,而是判断你能够正确地处理基本的sql语言语法。

#5


引用 楼主 qiuzhongliang123 的回复:
用appscan时检测出了sql盲注,有没有什么好的办法解决,让appscan检测不出这个问题

你的软件存在sql注入的漏洞么?
如果没这种漏洞,你管它sql盲注呢?!

#6


盲注检测许多都是误报,所以你需要问一问它到底使用的检测数据“是什么”。有些扯淡的厂商进行的盲注检测,假设在录入界面写
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。

所以你应该先把对方提供的具体的检测信息贴出来。

#7


如果注入了给出黄页,应该算是程序有漏洞才对。
黄页也会暴露很多信息。只是有些低级程序员看不懂而已。

#8


该回复于2015-07-02 13:48:40被管理员删除

#9


什么意思。。。。。。。。。。。。。

#10


如果是误判 再对那些漏洞扫一次就不会出现了

http://www-01.ibm.com/support/docview.wss?uid=swg21674465

#11


引用 2 楼 starfd 的回复:
就是SQL注入嘛
最简单的,也是最推荐的方案就是执行SQL时通过参数化方式执行
差点的方案就是拦截数据库关键字
下面虽然是java的,但思路是一样的
http://blog.csdn.net/arthurzil/article/details/6863213


采用了实体框架,微软内部应该用的是参数化吧,不知道为什么还会出现

#12


引用 10 楼 u011053846 的回复:
如果是误判 再对那些漏洞扫一次就不会出现了

http://www-01.ibm.com/support/docview.wss?uid=swg21674465
每次扫都会出现

#13


引用 6 楼 sp1234 的回复:
盲注检测许多都是误报,所以你需要问一问它到底使用的检测数据“是什么”。有些扯淡的厂商进行的盲注检测,假设在录入界面写
123' and exists(select 1) 然后发现你的页面没有给出一个“服务器5xx错误”的页面,它就认为你有盲注问题了,这种检测就很扯淡,就应该跟进行这种检测的厂商交涉。

所以你应该先把对方提供的具体的检测信息贴出来。
采用的是IBM自动检测的,天知道他输入了什么东西,按照什么规则来测的 ,头都大了

#14


看来你也是比appscan逼的
aspx防护代码

-----------------使用方法------------------------------------------------------------------
1.将App_Code目录拷贝到web根目录
假如已经存在App_Code目录,那直接把App_Code目录里的360safe.cs文件拷贝到当前的App_Code目录即可。

2.将Global.asax文件拷贝到web根目录
假如已经存在Global.asax文件,那直接把下面这段代码
     void Application_BeginRequest(object sender, EventArgs e)
    {

            if (Request.Cookies != null)
            {
                if (safe_360.CookieData())
                {
                    Response.Write("您提交的Cookie数据有恶意字符!");
                    Response.End();
                
                }

           
            }

            if (Request.UrlReferrer != null)
            {
                if (safe_360.referer())
                {
                    Response.Write("您提交的Referrer数据有恶意字符!");
                    Response.End();
                }
            }

            if (Request.RequestType.ToUpper() == "POST")
            {
                if (safe_360.PostData())
                {

                    Response.Write("您提交的Post数据有恶意字符!");
                    Response.End();
                }
            }
            if (Request.RequestType.ToUpper() == "GET")
            {
                if (safe_360.GetData())
                {
                    Response.Write("您提交的Get数据有恶意字符!");
                    Response.End();
                }
            }

         
    }
拷贝到当前的Global.asax文件里保存。
using System;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
public class safe_360
{

    private const string StrRegex = @"\b(alert|confirm|prompt)\b|^\+/v(8|9)|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";

    public static bool PostData()
    {
        bool result = false;

        for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.Form[i].ToString());
            if (result)
            {
                break;
            }
        }
        return result;
    }

 
    public static bool GetData()
    {
        bool result = false;

        for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.QueryString[i].ToString());
            if (result)
            {
                break;
            }
        }
        return result;
    }


    public static bool CookieData()
    {
        bool result = false;
        for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
        {
            result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower());
            if (result)
            {
                break;
            }
        }
        return result;
    
    }
    public static bool referer()
    {
        bool result = false;
        return result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString());
    }

    public static bool CheckData(string inputData)
    {
        if (Regex.IsMatch(inputData, StrRegex))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

  
}