`
wayfarer
  • 浏览: 297716 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sql注入解释

阅读更多

sql注入例子,假设DB中存在如下数据:
+----+---------+----------+
| id | uid     | password |
+----+---------+----------+
|  1 | forrest  | abc      |
|  3 | denny   | abc      |
|  5 | peggy   | abc      |
|  6 | vivian   | abc      |
+----+---------+----------+
正常Query语句:SELECT * FROM user WHERE uid='vivian' AND password='abc';
用户名框注入:'123' OR '1'='1',密码框输入:'abc' --> sql语句变为:SELECT * FROM user WHERE (uid='123' OR '1'='1') AND (password='abc');
 可查询到所有密码为abc的用户,并登陆成功。
密码框注入:'123' OR '1'='1',用户名框输入:'vivian' --> sql语句变为:SELECT * FROM user WHERE (uid='vivian' AND password='123') OR ('1'='1');
 可查询到所有用户,并登陆成功。
用户名框注入:'123' OR '1'='1',密码框注入:'123' OR '1'='1' --> sql语句变为:SELECT * FROM user WHERE [(uid='123' OR '1'='1') AND password='123'] OR '1'='1';
 可查询到所有用户,并登陆成功(可以看出结果和只在密码框中注入sql的结果是一样的)。
上面中的()[]是为了给sql断句,以便理解(这样就应该很好理解了吧,一个很简单的逻辑哦,我就不解释了)。实际应用中并无此类括号。

ps:如果知道了DB中某Table的tablename。则可以对其进行破坏,eg密码框注入:'123'; drop table tb_name; --> 真的很发指啊!!!

 

1、PreparedStatement
可对sql预编译. 你传入的任何内容就不会和原来的语句发生任何匹配的关系(前提是数据库本身支持预编译,但目前流行数据库都支持预编译了)
2、表单验证(正则表达式)对数据进行过滤(屏蔽掉注入关键词)
3、正则表达式检测已经形成的sql语句(在sql被execute前进行)

    2.1、检测SQL meta-characters的正则表达式    /(\%27)|(\')|(\-\-)|(\%23)|(#)/ix
    2.2、修正检测SQL meta-characters的正则表达式 /((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(:))/i
    2.3、典型的SQL注入攻击的正则表达式 /\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
    2.4、检测SQL注入,UNION查询关键字的正则表达式 /((\%27)|(\'))union/ix(\%27)|(\') - 单引号和它的hex等值union - union关键字。
    2.5、检测MS SQL Server SQL注入攻击的正则表达式 /exec(\s|\+)+(s|x)p\w+/ix
4、Filter过滤

public static String filterContent(String content){
     String flt ="'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";
     String filter[] = flt.split("|");
     for(int i=0;i<filter.length ; i++){
         content.replace(filter[i], "");
     }
     return content;
}

5、 避免动态SQL
动态SQL是动态查询的很好的工具,但这也会暴露脆弱点。很多情况下可以使用其他SQL语句或存储过程来代替动态SQL。当然,如果您在存储过程中依然通过用户输入来建立动态SQL查询,那么只靠替换还是不安全的。

6、最低权限原则
永远也不要在代码中用管理员级别权限的帐户来连接数据库。应用程序使用的帐户应该只拥有应用程序需要的最低级别的权限。这也能将已入侵者造成的破坏降低到最低限度。应用程序不能已sa或其他管理员帐号连接数据库,而且应定义使用的帐号能访问的范围。

7. 安全存储机密信息
不要用明文存储机密信息。较好的替代方法是使用加密或散列密码。散列密码较加密密码更安全,这是因为它们不能被解密。你还可以在散列加密之前添加一些随机值来增加安全性。

8. 只有知道如何注入,才能更有效的防注。一个例子
正常地址:
http://www.xxx.com/news.asp?id=1

加个',如果没过滤特殊字符,网页一定出错,就是看怎么出错法。画面能显示一部分,一部分提示数据库出错,找不到什么什么,最有希望注入。
http://www.xxx.com/news.asp?id=1'

下一步,试试 and 1=1 ,如果画面不出错,1=1是成立的,有希望了。
http://www.xxx.com/news.asp?id=1 and 1=1

下一步,试试 and 1=2 ,如果画面出错,1=2是不成立的,可以肯定这个地址可以注入。
http://www.xxx.com/news.asp?id=1 and 1=2

好戏来了:
http://www.xxx.com/news.asp?id=1 and (select * from admin)>0
不出错,证明数据库有admin这个表。

http://www.xxx.com/news.asp?id=1 and (select username from admin)>0
不出错,证明数据库的admin有username这个字段。

http://www.xxx.com/news.asp?id=1 and len(select top 1 username from admin)>5
不出错,证明数据库的admin的第一个username长度>5。

后面的自己测试……本文的目的仅用于各位站长检测自己的站有没有SQL注入漏洞。

分享到:
评论
2 楼 Sellby 2008-12-13  
昨天朋友和我提到了SQL注入..不懂..现在明白了 呵呵
1 楼 youxinrencwx 2008-09-12  

不错
学到不少东西

相关推荐

    sql注入讲解ppt.pptx

    SQL 注入基础知识点总结 SQL 注入是指 web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法...

    SQL 注入天书.pdf

    SQL注入是一种常见的网络安全漏洞,发生在应用程序使用用户输入的SQL代码直接构建数据库查询时。当攻击者能够通过输入恶意SQL语句来控制或篡改数据库查询,他们就能获取敏感信息、修改数据甚至完全控制系统。《SQL...

    DB2数据库SQL注入手册1

    DB2数据库SQL注入手册 DB2数据库SQL注入手册是指在使用DB2数据库时,如何检测和防止SQL注入攻击的一份指南。SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中 inject恶意SQL代码来访问或控制...

    C#防SQL注入

    C#防SQL注入 C#防SQL注入是指在C#程序中防止SQL注入攻击的方法。SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中.inject恶意SQL代码,来访问、修改或删除数据库中的数据。为了防止SQL注入,C#...

    sql注入字典fuzz

    ### SQL注入字典Fuzz详解 #### 一、引言 在网络安全领域,SQL注入攻击是一种常见的威胁方式,它利用数据库应用系统中的漏洞,通过恶意构造的SQL语句来获取敏感数据或对数据库进行非法操作。为了有效地检测和防范...

    SQL注入攻击实验报告

    ### SQL注入攻击实验报告知识点详解 #### 一、实验背景及目的 - **实验背景**:随着互联网技术的发展,Web应用程序越来越广泛地应用于各种场景之中。然而,由于开发者对安全性的忽视,使得许多Web应用程序存在安全...

    sql注入网站源码

    SQL注入是一种常见的网络安全漏洞,主要出现在使用动态SQL语句构建数据库查询的应用程序中。这个"sql注入网站源码"提供了一个具有SQL注入漏洞的ASP(Active Server Pages)网站实例,对于学习如何检测、防范和修复这...

    SQL注入全面讲解技术文档

    SQL注入是一种常见的网络安全威胁,它利用了Web应用程序中对用户输入数据处理的不足,使得攻击者能够注入恶意的SQL代码,以获取未经授权的数据或者控制数据库服务器。以下是对SQL注入漏洞的全面讲解,包括其原理、...

    SQL手工注入大全:包含各种类型的SQL注入,实现手工注入的乐趣,此资源你值得拥有。

    SQL手工注入大全:包含各种类型的SQL注入,实现手工注入的乐趣,此资源你值得拥有。 此资源包含:宽字节注入、SQL手工注入漏洞测试(Oracle数据库)、SQL手工注入漏洞测试(Sql Server数据库)、SQL手工注入漏洞测试...

    SQL注入工具-御剑

    【描述】:“SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑SQL注入工具-御剑” 描述中的重复部分强调了御剑作为SQL注入工具的核心属性。SQL注入是黑客通过构造恶意的SQL语句...

    SQL注入漏洞全接触.ppt

    "SQL注入漏洞全接触"知识点总结 一、 SQL注入漏洞的定义和原理 * SQL注入漏洞是指攻击者通过构造特殊的输入,来获取或修改服务器上的敏感数据。 * SQL注入漏洞的原理是从客户端提交特殊的代码,从而收集程序及...

    SQL注入原理以及Spring Boot如何防止SQL注入(含详细示例代码)

    SQL注入是一种严重的安全威胁,它允许攻击者通过在应用程序的输入字段中插入恶意SQL代码来执行未经授权的数据库操作。攻击者通常寻找没有适当验证和过滤的用户输入,然后利用这些漏洞来构造能改变原始SQL语句意图的...

    超级sql注入工具

    超级SQL注入工具(SSQLInjection)是一款基于HTTP协议自组包的SQL注入工具,支持出现在HTTP协议任意位置的SQL注入,支持各种类型的SQL注入,支持HTTPS模式注入。 超级SQL注入工具目前支持Bool型盲注、错误显示注入、...

    mybatis如何防止SQL注入

    ### MyBatis如何防止SQL注入 #### SQL注入简介与危害 SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过提交恶意的SQL代码到应用程序的输入字段中(如表单、URL等),利用这些输入来操控数据库执行非预期的...

    最新ASP通用防SQL注入代码

    从标签"防注入"、"最新ASP SQL注入代码"、"最新ASP通用防SQL注入代码"我们可以看出,这个压缩包文件的核心内容是关于防止ASP应用程序遭受SQL注入攻击的代码示例,它适用于各种ASP应用场景。 在压缩包内的文件"通用...

    机器学习检测SQL注入.zip

    机器学习检测SQL注入# ML-for-SQL-Injection机器学习检测SQL注入本项目是使用机器学习算法来分类SQL注入语句与正常语句:使用了SVM,Adaboost,决策树,随机森林,逻辑斯蒂回归,KNN,贝叶斯等算法分别对SQL注入语句...

    SQL注入攻击与防御技术白皮书.pdf

    SQL注入攻击与防御技术白皮书.pdf 本文档主要介绍了SQL注入攻击的原理、方式、危害及防御措施,旨在帮助读者更好地理解和防御这种常见的数据库漏洞攻击方式。 1.SQL注入攻击简介 SQL注入攻击是一种针对数据库的...

    SQL注入过滤 (Java版)

    在IT行业中,SQL注入是一种常见的安全威胁,攻击者通过输入恶意的SQL代码来获取、修改、删除数据库中的敏感信息。为了防止这种情况发生,开发者需要在应用程序中实施有效的防御策略,其中一种方法就是使用过滤器...

    Java防止SQL注入的几个途径

    Java 防止 SQL 注入的几个途径 Java 防止 SQL 注入是一个非常重要的安全问题。SQL 注入攻击是黑客最常用的攻击方式之一,它可以让攻击者访问或修改数据库中的敏感信息。因此,防止 SQL 注入是 Java 开发者必须注意...

    sql注入攻击流量情况

    sql注入攻击流量情况

Global site tag (gtag.js) - Google Analytics