关于sql 注入,你了解多少?

相信在验收机房或者学生收费系统的时候,很多人的师傅都在开始登陆界面上首先莫名其妙的写了一串东西。。然后莫名奇妙的他们就登陆进去了。。没有告诉他们用户名,没有告诉他们任何密码。。这是怎么回事?师傅在输入的时候我还像个傻子一样在一边嚷嚷:诶,不对不对,你输得都不对。。对我当时的表现,我感觉都。。真的是。。。不忍回忆。。。还好,用师傅的那些东西没有能登进去。我暗自窃喜,感觉自己的好强大。。但是没有明白他说的那些意思。。。后来在验收软工文档的时候,师傅又提到了这件事。。大概给我讲了一下,我才明白,原来,这叫做“SQL注入”。听着就挺高大上的。。但是,有关SQL注入,你又了解多少呢。。。

【概念】所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击

【原理】就拿我们机房的例子来说吧。在登陆界面上我们让用户输入登录名和密码,对了,才有权限进入我们的系统。。所以我们的界面是这个样子的。。

所以,我们在编写代码的时候就会这样写txtsql = "select * from user_info where userID=‘"
& txtName.Text & "‘ and  Val(mrc.Fields(1)) ="‘ &  Val(txtPassword.Text) & ‘"  
很明显,如果有登陆权限的人输入正确的登录名和正确的密码之后,系统便能够从数据库中找到相应的数据,并允许登陆系统,相反,如果输入的用户名或者密码其中有一个错了,那就不能登陆,理论上是这样没错,但是,对于SQL注入有漏洞的网站就危险了。。只要那些黑客设计一下特殊的字符串,那便很有可能被黑客入侵,获得相应的用户信息。。这是一件多么可怕的事情。。但是,那些黑客又是怎样设计特殊字符的呢。。还用这个例子来说,,比如我在用户名上输入:‘
or 1=1 #     后边的密码随便输入,便可以进入这个系统。。我们来分析一下。。

当我们输入:‘ or 1=1 #    的时候,我们在后台编写的代码就变成了select
 * from user_info where userID =‘‘ or 1=1 # and val(mrc.fields(1))=‘" & val(txtpassword.text) & ‘"

请大家注意了or后边的1=1是永远成立的,也就是说,用户名这肯定没有问题能够破解。但是有人问了,还有密码的限制呢。。请注意,#是SQL中的注释符,也就是说,#后边的内容都被注释掉了,,并不能被执行,,所以,这句代码可以简化为

select  * from user_info where userID =‘‘ or 1=1 ,然而,1=1是永远成立的,也就是说,where子句 永远成立。。所以,这句代码可以简化为select
 * from user_info。。。也就是搜索user_info 中的所有内容。所以,黑客就能简简单单的进入我们的系统了。。

【防止SQL注入】

(1)  对客户端提交的变量参数进行仔细地检测。对数值型的参数,一般用 isNumeric()函数来判断一下其是否包含非数字字符;对字 符 型 参 数 , 需 要 对 单 引 号 、 双 引 号 、“――”、分号等等进行过滤,最好还要对用户提交参数的长度进行判断,凡属非法者由程序给出错误提示。发现客户端提交的参数中有"exec、insert、select、delete、from、update、count、and、*、%、user、xp_cmdshell、
add、net、chr、mid、master、truncate、char、declare、Asc"等用于 SQL 注入的常用字符时,立即停止执行 ASP 并给出警告信息或转向出错页面。在服务端正式处理之前对提交数据的合法性进行检查,这是比较好的解决方法。在没有确认客户端的输入是否合法之前,服务器拒绝进行关键性的操作和处理。一旦检测到敏感字符或字符串,针对数据库的操作立即中止。

(2)   摒弃动态 SQL 语句,而改用用户存储过程来访问和操作数据库。这需要在建立数据库后,仔细考虑 Web 程序需要对数据库进行的各种操作,并为之建立存储过程,然后让 Web 程序调用存储过程来完成数据库操作。这样,用户提交的数据将不是用来生成动态 SQL 语句,而是确确实实地作为参数传递给存储过程,从而有效阻断了 SQL注入的途径。

【总结】   害人之心不可有,防人之心不可无。。。

时间: 2024-08-10 00:21:08

关于sql 注入,你了解多少?的相关文章

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

sql注入初中高学习

以下三篇文件关于SQL注入写的很通俗易懂,整理收藏下 渗透攻防Web篇-SQL注入攻击初级: http://bbs.ichunqiu.com/thread-9518-1-1.html 渗透攻防Web篇-SQL注入攻击中级: http://bbs.ichunqiu.com/thread-9668-1-1.html 渗透攻防Web篇-SQL注入攻击高级: http://bbs.ichunqiu.com/thread-10093-1-1.html

php中防止SQL注入的方法

[一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执行 php能够更安全.整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击,一下我们慢慢探讨.我们先使用任何编辑工具打开 /etc/local/apache2/conf/php.ini,如果你是采用其他方式安装,配置文件

sql注入总结

本实验测试是基于sqli-labs的实验环境 环境配置:php+mysql 环境搭建请参考 http://www.freebuf.com/articles/web/34619.html Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的 sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲注和布尔型的盲注 基于user-agent 基于feferer 基于cookie 二次注入 宽字节注入 注入一个网站

SQL注入解决思路(C#示例)

最近在编程中遇到一个SQL注入防护的问题.在这里顺便把SQL注入小结一下.以MYSQL(5.1)为例. 一.常规的SQL语句 观察SQL语句 SELECT * FROM [tableName] WHERE col1='value1' 这个语句由3个部分组成,SELECT子句筛选得到结果,FROM子句指定了筛选的范围,WHERE子句指定了条件.当在其中进行如下置换: SELECT * FROM [tableName] WHERE 1 之后,选出了[tableName]表中的全部内容.分析其语法不难

微擎SQL注入漏洞

漏洞名称:微擎SQL注入漏洞 补丁文件:/web/source/mc/card.ctrl.php 补丁来源:阿里云云盾自研 漏洞描述:微擎CMS的/web/source/mc/card.ctrl.php中,对cardid输入参数未进行严格类型转义,导致SQL注入的发生 解决方法 搜索代码 if ($do == 'manage') 如下图: 在 201 行 前添加代码 $_GPC['cardid'] = intval($_GPC['cardid']); 修改后如图: 补丁文件:/web/sourc

SQL注入之SQLmap入门

什么是SQLmap? SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹.访问底层文件系统.执行命令). 读者可以通过位于SourceForge的官方网站下载SQLmap源码:http://sourceforge.net/projects/sqlmap/ SQLmap的作者是谁? Bernardo DameleAssumpcao Guimaraes (@inquisb),读者可以通过[email protected]与他取得联

PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/phpcms_v9/index.php?m=member&c=index&a=login dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2

关于ECSHOP中sql注入漏洞修复

公司部署了一个ecshop网站用于做网上商城使用,部署在阿里云服务器上,第二天收到阿里云控制台发来的告警信息,发现ecshop网站目录下文件sql注入漏洞以及程序漏洞 如下图: 与技术沟通未果的情况下,网上查了点资料,对其文件进行修复,如下修改: 1,/admin/shopinfo.php修复方法 (大概在第53.71.105.123行,4个地方修复方式都一样)     admin_priv('shopinfo_manage');      修改为     admin_priv('shopinf

SQL注入之mysql显错注入

在我们实际渗透中,明明发现一个注入点,本以为丢给sqlmap就可以了,结果sqlmap只显示确实是注入点,但是数据库却获取不了,如图1所示,这时我们可以使用手工进行注入,判断出过滤规则以及基本过滤情况,然后再选择对应的sqlmap脚本(如果有的话),本文主要是讲述如何通过mysql函数报错来进行注入,另外如何使用手工进行全程注入的利用过程,如果你知道sqlmap里面有对应的脚本的话,烦请告知一下,谢谢!. 图1 获取数据库失败 此时我们可以考虑下是否是显错注入,对于显错注入我们可以使用mysql