天水建设局网站渣土治理,wordpress 表单附件,免费个人网站建站源码,广东著名企业如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的#xff0c;可是有多少人知道为什么会有这种注入漏洞呢#xff1f;有的会随口说着对于字符的过滤不严造成的。可是事实是这样吗#xff1f;我们学这些。不仅要知其然。更要知其所以然#xff01;理论联系实际#x… 如今非常多人在入侵的过程中基本都是通过SQL注入来完毕的可是有多少人知道为什么会有这种注入漏洞呢有的会随口说着对于字符的过滤不严造成的。可是事实是这样吗我们学这些。不仅要知其然。更要知其所以然理论联系实际才干对我们技术的提高有所帮助。 步骤/方法 1、SQL注入。因为程序在实际使用中为了管理庞大的数据信息就会使用到数据库。数据库能够方便程序对全部数据信息进行统一的存储和分类组织。便于查询更新。用户在使用程序时程序能够自己主动通过对数据库的查询将所获得的信息依照一定格式反馈给用户同一时候用户也是通过交互式的对话框提交给程序数据。从而使程序依照用户想要的信息进行查询。反馈给用户想要的信息。对于程序这样的数据库操作。先来看一段代码strKeyword Request [keyword];sqlQuery SELECT * FROM Aritcles WHERE Keywords LIKE % strKeyword %;这段代码的主要目的是依照用户提交的keywordKeyword。对软件连接数据库中的文件进行搜索找出全部包括用户keyword的文章来。如果此时。我们提交给软件“hack”这个数据这时“hack”这个keyword就会被传递给Keyword关键变量。接下来看看代码的运行情况。keyword获得数据“hack”后。被赋值给strKeyword变量。然后strKeyword变量被放入查询语句。此时的查询语句表现为SELECT * FROM Aritcles WHERE Keywords LIKE %hack%这个查询语句的意思就是从数据库Aritcles表中查询出全部包括“hack”这个keyword的文章。注意“hack”这个单词是我们提交给程序的因此能够对其任意改动的。于是。能够这样改动把它变为“hack; DROP TABLE Aritcles; --”。如今看看程序会如何处理这个外部keyword数据。首先。查询语句变成了“SELECT * FROM Aritcles WHERE Keywords LIKE %hack%; DROP TABLE Aritcles; --”。我们知道DROP TABLE语句是在数据库操作中删除一个指定的表的意思。如今那个查询语句的意思就变了。以中间的分号为标志。分成两个部分。首先还是正常的查出全部包括hackkeyword的文章。可是接下来……因为程序使用的数据库是微软的SQL SERVER该数据库支持多命令语句运行。这些数据库操作的命令语句都是由分号分隔开。然后依次运行的。这里的“DROP TABLE Aritcles; --”是一个全然合法的命令语句“--”符号是SQL SERVER数据库特有凝视标识数据库不运行不论什么命令。这样当这段查询语句运行时就会去运行一个删除Aritcles表的数据库命令。像这样通过控制传递给程序数据库操作语句的关键变量来获得恶意控制程序数据库从而获取实用信息或者制造恶意破坏的甚至是控制用户计算机系统的漏洞就称之为“SQL注入漏洞”。SQL注入漏洞全然是利用了将包括了某种目的的SQL语句通过关键变量插入到程序中正常的数据库操作语句里。程序一旦发生注入漏洞就会引发一系列安全隐患。SQL注入漏洞是不分语言的不管用什么语言开发的程序仅仅要涉及对数据库的操作。都可能存在SQL注入漏洞。尽管有时会由于编写语言的要求。或者程序设置环境的不同。导致SQL注入漏洞非常难被经常使用的方法利用可是总能够找到突破的方法。 2、以下以站点程序为例。看一看SQL注入漏洞最常常被利用的地方。也是危害最大的地方。都知道对于一个站点来说能够说数据库存放着站点全部的信息WEB应用程序全然是凭借数据库中的信息进行正常的执行的。一个站点程序中最关键的一个部分就是对用户的合法性的推断也就是看訪问它的用户是不是一个注冊的用户。这个时候。就会要求输入username和password然后依据输入的信息查询数据库。推断是否存在用户并检查password是不是一致假设一致则承认合法用户。否则将给予非法提示。以下看一段经常出如今论坛程序中的用户认证程序代码1admin1 trim(request(name))2password1 trim(request(password))3Set rs Server.CreateObject (ADODB.Recordset)4sql select * from userlogin where nameadmin1 and passwordpassword15rs.Open sql,conn,1,16if rs.eof and rs.bof then7response.writeSCRIPT languageJavaScriptalert(username或password不对)8response.writejavascript:history.go(-1)/SCRIPT9response.end10else11session(name)rs(name)12session(password)rs(password)13response.Redirect(default.asp)14end if这段程序的第1和第2行分别通过Request对象获得username和password第3行是建立一个数据库操作集对象。第4行就是将username以及password同一时候作为查询条件放入到userlogin表中进行查询第5到第14行就是依据查询结果进行推断弹出警告窗体。或者重定向网页。如果数据库中有个用户guest。密码123456那么该用户登录时认证代码中的第4行则变为sql select * from userlogin where nameguest and password123456。这是一个合法查询语句。所以用户能正常登录。反之则登录不了。看起来这是一个比較严格的认证代码可是事实呢如今我们username提交“or 11”password也是一样相同也会成为合法用户。这是为什么当我们提交表单后代码通过Request对象获得提交的usernameor 11以及passwordor 11后直接将这些数据放入了第4行的查询语句中于是变成了这样sql select * from userlogin where nameor 11 and passwordor 11。我们先看11这个绝对永远为真假设你说假。那么你回小学学数学吧学好再来看吧呵呵~注意在大马前面另一个or这代表者11是作为一个条件选择语句放入数据库查询的这样不管查询语句中的username与password是否正确。都会由于or后面的11代码导致查询语句返回值永远为真这样就是绕过了看似严格的用户认证获得了合法的权限。 注意事项 非常多软件程序与站点程序一样都具实用户登录这种机制假设软件的登录功能与上述的一样存于SQL注入漏洞的话然后该软件无用的登录功能 版权声明本文博主原创文章。博客未经同意不得转载。 转载于:https://www.cnblogs.com/zfyouxi/p/4817309.html