SQL盲注技术原理与应用实践

版权申诉
5星 · 超过95%的资源 2 下载量 21 浏览量 更新于2024-07-04 收藏 241KB PPTX 举报
网络安全原理与应用:SQL盲注 SQL盲注是指攻击者无法从页面上获取执行结果,甚至连注入语句是否执行都无从得知的注入攻击方式。相比一般的注入攻击,盲注的难度要高。手工盲注的过程类似于与机器人聊天,需要询问机器人类似于“数据库名字的第一个字母是不是a啊?”的机械问题,最终获得想要的数据。 SQL盲注可以分为基于布尔的盲注、基于时间的盲注以及基于报错的盲注。基于布尔的盲注是指通过布尔值来确定注入语句的执行结果,而基于时间的盲注是指通过延迟的时间来确定注入语句的执行结果。基于报错的盲注是指通过报错信息来确定注入语句的执行结果。 在DVWA平台上进行SQL盲注需要掌握以下知识点: 1. 检查是否存在注入点:首先需要检查是否存在SQL注入点,例如使用参数1‘and1=1#进行提交,如果页面显示存在,则说明存在注入点。 2. 猜解数据库名的长度:使用length()函数可以获取字符串的长度,例如使用1’andlength(database())=1#进行提交,如果页面显示不存在,则说明数据库名的长度不为1。 3. 获取数据库名称:使用substr()函数可以提取指定起点的指定长度字符串,例如使用1’andascii(substr(database(),1,1))=97#进行提交,如果页面显示存在,则说明数据库名的第一个字符是小写字母a。 4. 猜解数据表的长度:使用length()函数可以获取字符串的长度,例如使用1’andlength((selecttable_namefrominformation_schema.tableswhere table_schema=database()))=1#进行提交,如果页面显示不存在,则说明数据表名的长度不为1。 5. 获取数据表名:使用substr()函数可以提取指定起点的指定长度字符串,例如使用1’andascii(substr((selecttable_namefrominformation_schema.tableswhere table_schema=database()),1,1))=97#进行提交,如果页面显示存在,则说明数据表名的第一个字符是小写字母a。 6. 猜解数据库字段的长度:使用length()函数可以获取字符串的长度,例如使用1’andlength((selectcolumn_namefrominformation_schema.columnswhere table_name=’table_name’))=1#进行提交,如果页面显示不存在,则说明数据库字段名的长度不为1。 7. 获取字段名:使用substr()函数可以提取指定起点的指定长度字符串,例如使用1’andascii(substr((selectcolumn_namefrominformation_schema.columnswhere table_name=’table_name’),1,1))=97#进行提交,如果页面显示存在,则说明字段名的第一个字符是小写字母a。 8. 获取字段数据:使用substr()函数可以提取指定起点的指定长度字符串,例如使用1’andascii(substr((selectcolumn_namefromtable_name),1,1))=97#进行提交,如果页面显示存在,则说明字段数据的第一个字符是小写字母a。 在实际应用中,需要根据不同的情况选择合适的盲注方式,例如基于布尔的盲注、基于时间的盲注或基于报错的盲注。同时,也需要掌握各种SQL函数,例如length()函数、substr()函数等,以便更好地进行SQL盲注攻击。