基于MySQL的SQL注入攻击
- 格式:doc
- 大小:134.50 KB
- 文档页数:10
mysql注入攻击原理标题,MySQL注入攻击原理及防范措施。
MySQL注入是一种常见的网络安全漏洞,攻击者利用这种漏洞可以获取敏感数据、修改数据甚至控制数据库服务器。
本文将介绍MySQL注入攻击的原理以及防范措施。
MySQL注入攻击原理。
MySQL注入攻击是通过在应用程序中构造恶意的SQL查询语句,然后将这些语句传递给后端的MySQL数据库服务器。
攻击者利用这些恶意的SQL查询语句来执行未经授权的数据库操作,比如读取、修改或删除数据库中的数据。
攻击者通常通过在应用程序的输入字段中插入恶意的SQL代码来实施注入攻击。
这些输入字段可以是登录表单、搜索框、用户注册表单等。
一旦应用程序未能正确过滤和验证用户输入,攻击者就可以注入恶意的SQL代码,从而获取对数据库的控制权。
防范措施。
为了防范MySQL注入攻击,以下是一些常见的防范措施:1. 使用参数化查询,应用程序应该使用参数化查询或预编译语句来构造SQL查询语句,而不是直接拼接用户输入的数据。
这样可以有效防止攻击者注入恶意的SQL代码。
2. 输入验证和过滤,应用程序应该对用户输入的数据进行严格的验证和过滤,确保输入的数据符合预期的格式和范围。
比如对于数字型输入,应该验证输入是否为数字;对于字符串型输入,应该过滤掉特殊字符和SQL关键字。
3. 最小权限原则,数据库用户应该被授予最小必要的权限来执行其任务。
这样即使攻击者成功注入恶意的SQL代码,也只能执行有限的数据库操作。
4. 定期更新和维护,及时更新数据库服务器和应用程序的补丁,以修复已知的安全漏洞。
同时定期审计数据库的安全设置和配置,确保数据库服务器的安全性。
结论。
MySQL注入攻击是一种常见的网络安全威胁,但通过采取适当的防范措施,可以有效地减少这种威胁的风险。
应用程序开发人员和数据库管理员应该密切合作,共同努力确保数据库服务器的安全性,以保护敏感数据不受攻击者的侵害。
mysql 注入方式MySQL注入是一种常见的Web应用程序漏洞,攻击者可以通过利用这种漏洞来获取敏感信息或者执行恶意代码。
MySQL注入攻击的本质是在用户输入的数据中注入SQL代码,从而达到攻击的目的。
MySQL注入攻击的方式有很多种,下面列举几种常见的方式:1. 基于错误的注入基于错误的注入是一种常见的注入方式,攻击者通过构造恶意的SQL语句来触发数据库的错误信息,从而获取敏感信息。
例如,攻击者可以通过在输入框中输入' or 1=1#来构造恶意的SQL语句,从而获取数据库中的所有数据。
2. 基于联合查询的注入基于联合查询的注入是一种比较高级的注入方式,攻击者通过构造恶意的SQL语句来执行联合查询,从而获取敏感信息。
例如,攻击者可以通过在输入框中输入' union select 1,2,3#来构造恶意的SQL语句,从而获取数据库中的数据。
3. 基于时间的盲注基于时间的盲注是一种比较隐蔽的注入方式,攻击者通过构造恶意的SQL语句来触发数据库的延迟响应,从而获取敏感信息。
例如,攻击者可以通过在输入框中输入' and sleep(5)#来构造恶意的SQL语句,从而触发数据库的延迟响应。
4. 基于堆叠查询的注入基于堆叠查询的注入是一种比较高级的注入方式,攻击者通过构造恶意的SQL语句来执行多个查询,从而获取敏感信息。
例如,攻击者可以通过在输入框中输入'; select * from users;#来构造恶意的SQL语句,从而执行多个查询。
为了防止MySQL注入攻击,开发人员需要采取一些措施,例如:1. 使用参数化查询参数化查询是一种有效的防止注入攻击的方法,开发人员可以使用预编译的SQL语句和参数来执行查询操作,从而避免注入攻击。
2. 过滤用户输入开发人员可以对用户输入进行过滤,例如限制输入的长度、类型和格式等,从而减少注入攻击的风险。
3. 使用安全的编程语言和框架使用安全的编程语言和框架可以有效地防止注入攻击,例如使用PHP 的PDO扩展或者Java的Hibernate框架等。
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。
但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。
能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
下面从SOL注入的背景讲起,再谈谈如何防御等问题。
一SQL注入攻击的背景:在计算机技术高速发展的今天,越来越让人们头疼的是面临越来越“变态”和复杂的威胁网站技术,他们利用Internet 执行各种恶意活动,如身份窃取、私密信息窃取、带宽资源占用等。
它们潜入之后,还会扩散并不断更新自己。
这些活动常常利用用户的好奇心,在用户不知道或未来允许的情况下潜入用户的PC,不知不觉中,帐户里的资金就被转移了,公司讯息也被传送出去,危害十分严重。
2006年8月16日,第一个Web威胁样本出现,截止到2006年10月25日,已经产生了第150个变种,并且,还在不断地演化下去。
网站威胁的目标定位有多个维度,是个人还是公司,还是某种行业,都有其考虑,甚至国家、地区、性别、种族、宗教等也成为发动攻击的原因或动机。
攻击还会采用多种形态,甚至是复合形态,比如病毒、蠕虫、特洛伊、间谍软件、僵尸、网络钓鱼电子邮件、漏洞利用、下载程序、社会工程、rootkit、黑客,结果都可以导致用户信息受到危害,或者导致用户所需的服务被拒绝和劫持。
sql注入攻击的原理SQL注入攻击利用了应用程序未能正确过滤或转义用户输入的漏洞,从而在应用程序与数据库之间的SQL语句中插入恶意代码。
攻击者通过在用户输入的数据中添加特殊的SQL语法符号,可以修改原始的SQL查询逻辑或者执行非授权的操作。
攻击的原理是当应用程序使用拼接字符串的方式将用户输入与SQL语句进行组合时,若没有对用户输入进行合适的过滤或转义,那么攻击者就可以在用户输入中插入SQL命令,从而改变原始的SQL查询的意图。
例如,考虑一个登录页面,用户输入用户名和密码,应用程序将用户输入的用户名和密码直接拼接到SQL查询语句中,如下所示:```SELECT * FROM users WHERE username = '<user_input>' AND password = '<pass_input>'```如果应用程序没有正确过滤或转义用户输入,攻击者可以在用户名或密码字段中插入SQL命令。
例如,如果攻击者在用户名字段中输入`' OR '1'='1`,那么SQL查询语句将变成:```SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '<pass_input>'```由于`'1'='1'`始终为真,攻击者可以绕过身份验证,并获取到所有用户的记录。
SQL注入攻击也可以用于执行其他恶意操作,如数据泄露、数据库修改、执行任意操作等,具体取决于攻击者的意图和应用程序对数据库的访问权限。
为了防止SQL注入攻击,应用程序应该使用参数化查询或预编译语句来执行数据库操作,以确保用户输入被正确转义或过滤,从而防止恶意的SQL代码的注入。
此外,还应该对用户输入进行合法性验证,只接受符合预定格式的数据,以降低攻击的风险。
SQL注⼊攻击及防御详解在owasp年度top 10 安全问题中,注⼊⾼居榜⾸。
SQL注⼊攻击指的是通过构建特殊的输⼊作为参数传⼊Web应⽤程序,⽽这些输⼊⼤都是SQL语法⾥的⼀些组合,通过执⾏SQL语句进⽽执⾏攻击者所要的操作,其主要原因是程序没有细致地过滤⽤户输⼊的数据,致使⾮法数据侵⼊系统。
1. 对于Web应⽤程序⽽⾔,⽤户核⼼数据存储在数据库中,例如MySQL、SQL Server、Oracle;2. 通过SQL注⼊攻击,可以获取、修改、删除数据库信息,并且通过提权来控制Web服务器等其他操作;3. SQL注⼊即攻击者通过构造特殊的SQL语句,⼊侵⽬标系统,致使后台数据库泄露数据的过程;4. 因为SQL注⼊漏洞造成的严重危害性,所以常年稳居OWASP TOP10的榜⾸!1.实验说明⽬标靶机:OWASP_Broken_Web_Apps_VM_1.2测试渗透机:Kali-Linux-2018.2-vm-amd641.SQL注⼊的危害1、拖库导致⽤户数据泄漏;2、危害web等应⽤的安全;3、失去操作系统的控制权;4、⽤户信息被⾮法买卖;5、危害企业及国家的安全!2.注⼊流程1. 判断是否有SQL注⼊漏洞;2. 判断操作系统、数据库和web应⽤的类型;3. 获取数据库信息,包括管理员信息及拖库;4. 加密信息破解,sqlmap可⾃动破解;5. 提升权限,获得sql-shell、os-shell、登录应⽤后台;2.⼿动注⼊实战1.基于错误的注⼊错误注⼊的思路是通过构造特殊的sql语句,根据得到的错误信息,确认sql注⼊点;通过数据库报错信息,也可以探测到数据库的类型和其他有⽤信息。
通过输⼊单引号,触发数据库异常,通过异常⽇志诊断数据库类型,例如这⾥是MySQL数据库。
SQL注⼊语句解析:mysql> select first_name,last_name from ers;mysql> select first_name,last_name from ers where user_id='1';#你输⼊1 相当于在最后的两个单引号中间插⼊⼀个1来执⾏mysql的查询语句怎么样判断我们是否可以注⼊呢?会发⽣页⾯报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1SQL注⼊语句解析:mysql> select first_name,last_name from ers where user_id='''这就代表此⽹站我们可以注⼊,有注⼊点。
SQL注入攻击的种类和防范手段1.基于错误的注入攻击:攻击者在SQL查询中插入错误或不完整的语句,以引发错误信息或日志,从而获取对数据库的相关信息。
2. 基于联合查询的注入攻击:攻击者通过在用户输入中插入union 语句,用于合并两个或多个查询结果,从而泄露数据库中的数据。
3.基于布尔查询的注入攻击:攻击者通过修改WHERE或HAVING语句中的条件,利用布尔值的真假来获取有关数据库的信息。
4.基于时间延迟的注入攻击:攻击者通过在数据库查询中添加延迟函数,如SLEEP(,使应用程序的响应时间延长,从而可以通过测量响应时间来判断条件是否成立。
5. 盲注入攻击:攻击者无法直接从Web应用程序中获取任何错误信息,但可以使用其他方式来确认注入成功,如延迟注入或二分法等方法。
防范手段:1.使用参数化查询或预编译语句:参数化查询可以防止攻击者在用户输入中插入恶意的SQL代码。
2.过滤和验证用户输入:对用户输入进行严格的过滤和验证,确保只接受合法的数据,如去除非法字符、转义特殊字符等。
3.最小权限原则:数据库用户应该具有最小的权限,只能执行必要的操作,并且不应具有直接修改数据库结构或执行系统命令的权限。
4.改变默认的数据库监听端口:将数据库的监听端口从默认的端口改为非常规的端口,可以减少被攻击的概率。
5.错误信息处理:应该避免在错误信息中透露关键的系统或数据库信息,最好将详细的错误信息记录在日志中,只向用户显示一般的错误提示信息。
6.防火墙和入侵检测系统:使用防火墙和入侵检测系统来监控和阻止潜在的SQL注入攻击。
7.定期更新和维护应用程序和数据库:及时更新和维护应用程序和数据库的补丁,以修复已知的漏洞。
8.检查第三方代码库和插件:确保使用的任何第三方代码库和插件都是受信任的,并且定期更新和审查其代码。
9.数据加密和敏感信息保护:对数据库中的敏感数据进行加密,并采取适当的措施来保护加密密钥和凭证。
综上所述,针对SQL注入攻击,我们需要综合使用多种防范手段,既包括在应用程序层面上做好安全防护,如使用参数化查询、过滤和验证用户输入,也需要在网络和基础设施层面上加强安全措施,如使用防火墙、入侵检测系统等。
MySQL安全漏洞和攻击方式及预防措施MySQL是一种流行的开源关系型数据库管理系统,被广泛用于网站和应用程序的后端数据存储,然而,正因为其广泛使用,也使得MySQL成为黑客和恶意攻击者的目标。
本文将讨论MySQL的安全漏洞和攻击方式,并提供一些预防措施以增强MySQL的安全性。
一、概述MySQL的安全漏洞可以分为两大类:软件漏洞和配置漏洞。
软件漏洞是指MySQL本身存在的错误或缺陷,可能被黑客利用进行非法访问或控制。
配置漏洞则是指管理员在配置MySQL时出现的错误,导致系统易受攻击或数据泄露。
二、软件漏洞1. SQL注入攻击SQL注入攻击是最常见的针对MySQL的漏洞之一。
黑客通过在用户输入的查询字符串中插入特定的SQL代码,从而绕过应用程序的身份验证和访问权限,甚至获取敏感数据。
预防措施:- 使用参数化查询或预编译语句,避免直接拼接用户输入的字符串来构造SQL 查询;- 实施输入验证和过滤,确保用户提供的数据符合预期的格式和类型;- 限制数据库用户的权限,避免过高的权限给黑客提供机会。
2. 缓冲区溢出缓冲区溢出是一种利用软件漏洞的攻击方式,黑客通过向MySQL发送超长的数据或恶意数据,导致MySQL内部的缓冲区溢出,从而可以执行恶意代码或控制数据库。
预防措施:- 定期更新MySQL版本,以修复已知的缓冲区溢出漏洞;- 启用MySQL的安全功能,如按需加载插件或限制加载的库;- 限制数据库用户的资源使用,防止攻击者利用高权限执行恶意代码。
三、配置漏洞1. 弱密码和默认凭证弱密码和使用默认凭证是MySQL的常见配置漏洞。
黑客可以通过猜测账户密码或利用默认的系统账户和密码,从而获得对数据库的非授权访问。
预防措施:- 使用强密码策略,要求密码长度、复杂度和定期更换;- 禁用或删除默认的MySQL账户,如root账户;- 使用数据库认证插件,如LDAP或Kerberos,提供双因素认证和加强访问控制。
使用MySQL的常见安全风险及防范措施引言MySQL是一款开源的关系型数据库管理系统,在互联网和企业应用中被广泛使用。
然而,随着互联网的发展和信息技术的进步,数据库的安全风险也日益突出。
本文将讨论使用MySQL时常见的安全风险,并提供一些防范措施。
一、密码安全1.使用弱密码弱密码是最常见的安全漏洞之一。
黑客可以通过暴力破解或社会工程学攻击等方式窃取数据库密码。
为了防止这种情况发生,我们应该使用强密码,包含大小写字母、数字和特殊字符,并定期更改密码。
2.明文存储密码有些开发人员会将数据库密码明文存储在配置文件或源代码中,这种做法十分危险。
一旦黑客获取了这些文件,他们就可以轻易地获得数据库的访问权限。
为了保护密码的安全,我们应该使用加密算法对密码进行加密存储。
3.传输密码不加密如果数据库密码在传输过程中没有加密,黑客就有可能窃取密码。
为了确保密码传输的安全,我们应该使用SSL/TLS等加密协议来保护通信。
二、访问控制1.缺乏访问控制在许多情况下,数据库管理员忽略了对数据库的访问控制,导致任何人都可以轻松地访问和修改数据。
为了保护数据库的安全,我们应该使用访问控制列表(ACL)来限制数据库的访问权限,只允许授权用户访问。
2.过多用户权限一些用户被授予了过多的权限,这使得他们可以执行危险的操作,比如删除或修改数据库中重要的数据。
为了最小化潜在的风险,我们应该根据用户的角色和职责来分配合适的权限,实施最小权限原则。
三、数据备份与恢复1.不进行数据备份数据丢失是灾难性的,可能导致企业巨大的损失。
很多人忽视数据备份的重要性,没有建立完善的备份策略。
为了防止数据丢失,我们应该定期备份数据库,并测试备份的可恢复性。
2.不加密备份数据如果数据库备份数据不加密,一旦备份文件被黑客获取,他们可以轻易地获得敏感数据。
为了保护备份数据的安全性,我们应该对备份文件进行加密,确保只有授权人员可以访问备份文件。
四、SQL注入攻击SQL注入是一种利用应用程序的漏洞执行恶意SQL语句的攻击方式。
sql注入攻击的常用方法
1. 通用注释:通过添加“--”到SQL查询中终止查询,导致可能被后台程序执行的SQL语句被自动终止,此时接受的是语句的注释版本,外界在查询中添加垃圾数据。
2. OR语句利用:在SQL语句中添加 OR 语句来绕过数据库的安全性控制,利用脚本修改现有规则或将数据返回值更改为真假。
3. 绕过双引号:通过添加“\”特殊字符对输入的内容进行转义,让应用不识别双引号;也就是进行双引号的覆盖,之后应用的参数存在未经过滤的漏洞,这样就可以用SQL进行投入攻击。
如:“select * from user where name\=\"admin\"”
4. 利用拖尾空格:恶意攻击者添加空格字符,让被注入的SQL语句能够正常执行,比如输入“' and1=1 ”,这样可以避免SQL解析器将单引号作为结尾进行解析。
5. 表达式匹配:恶意攻击者会使用正则表达式来拆分SQL代码,使用“%*”模糊查询来替换原始值,利用SQL语句中的操作运算符来添加恶意信息,如:%`' OR 1=1--`
6. 数据库指令:攻击者可以使用SQL语句中的union等指令,来将恶意代码和原始数据库里的信息进行拼接,一旦这种拼接成功后,数据库就可能会被恶意攻击者获取数据。
7. 特殊函数:还有一些特殊的字段,如系统函数,比如“ifnull”、“sleep”、“rand”等,可以让攻击者让被注入的数据库服务器延时执行以达到攻击数据库的目的。
8. 无尽苦读:用一些特殊字符来组合语句,以及多次尝试,来穷举出所有可能性。
SQL注入攻击实验报告一、实验背景和目的:二、实验过程与结果:1.实验环境本实验使用的是Web应用程序开发框架为PHP和MySQL数据库,实验环境为Windows Server 2024操作系统。
2.实验步骤步骤一:创建数据库首先,创建一个名为“db_demo”的数据库,并在该数据库中创建一个名为“user”的数据表,包含id、name和password三个字段。
步骤二:编写Web应用程序使用PHP编写一个简单的Web应用程序,实现用户登录功能。
在用户登录代码中,从前端获取用户输入的用户名和密码,并通过SQL语句查询数据库中是否有匹配的用户记录。
步骤三:测试登录功能启动Web服务器,使用浏览器打开Web应用程序的登录页面。
尝试使用正确的用户名和密码进行登录,验证登录功能是否正常。
步骤四:进行SQL注入攻击在登录页面的用户名和密码输入框中,输入以下恶意SQL代码进行注入攻击尝试:'OR'1'='1'--3.实验结果通过进行SQL注入攻击后,我们得到了与原始用户名和密码验证逻辑相同的结果,成功绕过了登录验证,进入了系统。
三、实验分析与总结:1.实验分析攻击者通过插入特定的SQL代码,成功绕过了原本的验证逻辑,执行了未经授权的数据库操作。
这种攻击可以导致用户信息被窃取、数据库数据遭到篡改甚至服务器被远程控制。
2.实验总结为了防止SQL注入攻击,我们可以采取一些有效的防护措施:(1)输入验证与过滤:开发人员应该对用户输入的数据进行合法性验证和过滤,避免将用户输入直接拼接到SQL语句中。
(2)参数化查询:使用参数化查询语句,将用户输入的数据作为参数传递给SQL语句,而不是直接拼接到SQL语句中。
(3)最小权限原则:数据库账户应该具有最小的权限,只能访问必要的数据表和字段。
(4)使用ORM框架:使用ORM框架可以避免手动编写SQL语句,减少了SQL注入的风险。
通过本次实验,我们对SQL注入攻击的危害和防护机制有了更深入的了解。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,可能被入侵很长时间管理员都不会发觉。
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。
但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些用户想得知的数据,这就是所谓的SQL Injection,即SQL注入。
•掌握SQL注入基本手段
•了解WEB站点的脆弱性
•修复存在SQL注入可能的漏洞
•了解网络常见php+mysql架构应用,如Discuz论坛、PHPBB系统
•熟悉简单sql语句的构成
•获取服务器IP地址
PHP注入漏洞知识了解
步骤说明:
通过实验样例,了解PHP程序注入漏洞的原理,以及SQL注入的简单实现
1.PHP程序的运行,需要配合后台数据库数据操作,所以要求程序构建的SQL语句正常执行,事实上简单的SELECT语句就可能存在安全问题,如下两条SQL语句:
2.两种写法在各种程序中都很普遍,但安全性是不同的。
注:
•第1句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句也不会正常执行;而第2句不同,由于没有把变量放进单
引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行,我们针对两个句子可以分别提交两个成功注入的畸形语句。
3.在第1句中,当变量$id值为:
此时整个SQL语句变为:
4.在第2句中,指定变量$id为:
此时整个SQL语句变为:
5.由于第1句SQL语句用单引号包含$id,我们必须先闭合前面的单引号,并要注释掉后面原SQL
语句中的后面的单引号,这样就能使PHP程序认为SQL合法,从而执行非法的SQL。
注:
•如果php.ini中magic_quotes_gpc设置为on或者变量前使用了addslashes()函数,我们的攻击就会化为乌有,具体请参考PHP用户手册。
6.第2句没有用引号包含变量,那我们也不用考虑去闭合、注释,这样的代码非常危险,直接提交非
法SQL就能运行。
SQL注入实例
步骤说明:
通过分析存在SQL注入漏洞的PHP系统实例,掌握常见SQL注入的基础知识
1.预备知识:
相信大家都曾使用过留言本、BBS之类的程序,大部分管理后台都是需要登录才能留言管理的。
一般情况下,用户输入了密码,单击“登录”后,登录页面会把
用户输入的密码提交给一个动态网页,这个网页就自动到数据库去查看这个提交上来的密码跟数据库里的密码是否匹配,如果匹配则登录成功,否则就会提示输
入错误。
本例中就提供了一个简单的PHP+Mysql的WEB环境,如图1所示:
图1
2.假设我们知道该系统管理员用户名为admin,使用正确的帐户密码登录将会进入以下页面,如图2:
图2
3.如果输入错误的密码将会进入以下页面,如图3:
图3
4.漏洞尝试:
在对一个网站进行安全检测的时候,检测者并不知道被检测的网站使用的是什么数据库及网页程序语言,需要对其进行一些手动探测。
譬如本案例中,
检测者在“用户”框输入一个单引号,密码留空,点击“登录”,会返回如图4:
图4
5.结果分析:
从返回信息"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
in /var/www/login.php on line 12"可以得知系统使用了PHP+MYSQL的架构,以及路径信息等。
而且很有可能存在含注入漏洞的SQL语句,如SELECT * FROM data WHERE name=''' 6.在如图1的登陆界面中,选择IE浏览器的查看-> 源文件,读取html源码,如图5:
图5
7.通过分析html源码,可以知道提交的username、password字段及post提交方式,及login.php 的处理页面,后台的SQL语句确定是:
SELECT * FROM TABLES WHERE username='$username'
8.所以,当我们输入用户名为单引号时,形成了
SELECT * FROM TABLES WHERE username='''
这样以来,最后的那个单引号就多余了,造成了语法错误。
9.综上所述,我们现在可以确定注入成功的条件了,登陆时username输入框输入如下内容即可,甚至不需要输入密码:
admin' or 1=1 /*
admin' or '111
如图6:
注:
•admin' or 1=1 /*构建了SELECT * FROM user WHERE username='admin' or 1=1 /*' AND password=''语句,
直接通过1=1的恒等条件,让验证通过。
图6
解决方案
1.确保后台PHP代码在处理提交的数据时,有过滤能力,让含非法字符的数据无法通过。
2.考虑打开配置文件php.ini中的magic_quotes_gpc开关,让程序自动对特殊字符加上注释符。