网络安全第五章SQL注入攻击与防御

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STEP09:通过上一步可知当前查询结果集的参数个数是5,因 此,在地址栏http://192.168.67.135:99/common.asp?id=1后 面加上union select 1,2,3,4,5 from admin_user,使得SQL 查询语句变为select 列 from [表名] where[字段]=1 union select 1,2,3,4,5 from admin_user,以此测试网页内容的显 示方式,即select语句结果集的什么字段会在网页中显示出来, 以便用来显示用户名和密码信息。
UNION语句
SELECT列名称1 FROM 表名称1 UNION SELECT列名称2 FROM 表名称2
ORDER BY语句
SELECT Name FROM Class1 ORDER BY Name
用户能够控制 输入
程序原本要执 行的代码,能 够拼接用户输
入的数据
SQL注入原理
项目的实施与验证
sql手工注入攻击。
STEP01:在客户端中访问卫星中心小 学模拟网站,点击址栏 http://192.168.67.135:99/common.asp?id=1后面输入字符 “’”,使得SQL查询语句出错。通过网站返回的报错信息可以 判断网站数据库的类型等,为注入攻击收集信息,如图所示
STEP07:通过上一步的猜测,发现该数据库存在admin_user表。 接着在链接http://192.168.67.135:99/common.asp?id=1 后 面加上and exists(select [字段] from admin_user)来猜解 admin_user表存在的字段,例如,加上and exists(select admin2 from admin_user),使链接的SQL查询语句变为select 列 from [表名] where[字段]=1 and exists(select admin2 from admin_user)。如果该SQL语句能被成功执行,即网页能 够正常显示,那么就说明存在admin2字段,否则说明该字段不 存在。下图分别为加上and exists(select admin2 from admin_user)注入失败与加上and exists(select admin from admin_user)以及and exists(select password from admin_user)注入成功的结果。
STEP03:由返回的报错信息可以看到:Microsoft JET Database Engine ‘80040e14’,因此判断该网站使用的是 Access数据库(JET是Microsoft Access的底层数据库引擎)。
STEP04:在地址栏 http://192.168.67.135:99/common.asp?id=1的后面加上and 1=1,这时该链接的SQL查询语句变为select 列 from [表名] where [字段]=1 and 1=1。这条语句只是在原有语句的基础上 加了一个条件,并且该条件永远成立,因此,该语句是可以被 正确执行的,也即网页能够正常显示,如图所示。
STEP05:再在地址栏 http://192.168.67.135:99/common.asp?id=1后加上and 1=2, 这时该链接的SQL查询语句变为为select 列 from [表名] where[字段]=1 and 1=2,因为1≠2,所以这条语句的执行肯定 会出错,即网页显示会异常,如图所示。
STEP08:由上两步的猜测发现,该数据库存在表名admin_user, admin_user表中存在字段admin和password,接下来就可以获 取账号和密码了。首先使用的是order by语句,例如在地址栏 添加order by 10,链接的SQL语句就变为select 列 from [表 名] where[字段]=1 order by 10,即使结果集按照第10个参 数进行排序。如果页面正常显示,说明该结果集的参数个数大 于等于10个,如果网页显示出错,那么说明该结果集的参数个 数小于10个。因此,通过order by语句可以猜出网站当前结果 集的参数个数。下图分别为加上order by 10以及order by 6 注入失败与加上order by 5注入成功的结果。
由STEP02-STEP05的结果可以看出,链接 http://192.168.67.135:99/common.asp?id=1拼接了用户的输 入“’”、“and 1=1”和“and 1=2”,并且执行了,因此, 可以确认该网站存在SQL注入点。
STEP06:在确定存在注入点后,可在链接 http://192.168.67.135:99/common.asp?id=1后面加上and exists(select * from [表名])来猜测数据库的表名,例如, 加上and exists(select * from admin),使链接的SQL查询语 句变为select 列 from [表名] where[字段]=1 and exists(select * from admin)。如果该SQL语句能被成功执行, 即网页能够正常显示,就说明存在admin表,否则说明表名不存 在。下图分别为加上and exists(select * from admin)注入 失败与加上and exists(select * from admin_user)注入成功 的结果。
SQL注入攻击与防御
学习目标
1)通过对模拟网站进行手动和自动SQL注入攻击,获取网站管理员的账号和密码 ,理解SQL注入攻击的原理与步骤; 2)通过对模拟网站的SQL注入漏洞进行修补,掌握SQL注入攻击的防御方法。
SQL的基础知识
sql语句
SELECT语句
SELECT 列名称 FROM 表名称 SELECT * FROM 表名称
相关文档
最新文档