SQL是Structured Query Language的英文缩写,中文意为结构化查询语言。它是一种专门用于管理和操作关系型数据库的标准化语言。其主要作用在于实现用户与数据库之间的有效通信,支持对数据的增删改查等各类操作。根据美国国家标准协会(ANSI)的规定,SQL被确立为关系型数据库管理系统的标准语言。凭借其强大的数据处理能力,SQL被广泛应用于各种主流数据库系统中。目前,包括Oracle、Sybase、Microsoft SQL Server以及Access在内的绝大多数关系型数据库管理系统,均采用SQL作为核心操作语言。这使得SQL在数据库领域具有极高的通用性和重要性,成为数据管理不可或缺的技术工具。掌握SQL有助于高效地访问和管理存储在数据库中的信息,满足不同场景下的数据操作需求。
1、 图6-1展示的是目标网站首页,当鼠标悬停在我院召开‘平安奥运’工作部署会这一标题上时,浏览器状态栏显示出对应的链接地址为http://www.xxx.com.cn/detail.asp?productid=392。该网址中包含detail.asp?productid这类参数形式,通常表明页面内容通过数据库动态加载。此类结构常成为SQL注入攻击的潜在入口,因此可初步推测该网站可能存在注入类安全漏洞,需进一步验证其输入过滤机制是否健全。
2、 加单引号第一步
3、 6.2所示,在浏览器地址栏的URLhttp://www.xxx.com.cn/detail.asp?productid=392末尾添加一个单引号后按下回车,服务器随即返回了相应的错误提示信息,表明该请求触发了后台处理异常,可用于初步判断系统是否存在注入漏洞。
4、 第一步:添加单引号符号
5、 6.2所示,在浏览器地址栏中输入http://www.xxx.com.cn/detail.asp?productid=392后添加一个单引号,按下回车键,服务器随即返回了错误提示信息,表明该请求引发了系统异常,可能暴露了后台数据库的某些漏洞,存在潜在的安全风险。
6、 第二步:执行and 1=1测试。6.3所示,将and 1=1附加到浏览器地址栏中的URL末尾,原链接为http://www.xxx.com.cn/detail.asp?productid=392,输入完成后按下回车键,服务器响应并返回一个正常的网页页面,表明该语句未引发错误,可能具备SQL注入的潜在风险。
7、 第三步:验证and 1=2语句。6.4所示,将and 1=2添加至浏览器地址栏中的URL末尾,原链接为http://www.xxx.com.cn/detail.asp?productid=392,随后按下回车键,此时服务器返回了错误信息,表明该参数可能存在SQL注入漏洞,需进一步分析响应内容以确认漏洞存在与否。
8、 第四步:识别数据库的种类。
9、 6.5所示,在浏览器地址栏的URLhttp://www.xxx.com.cn/detail.asp?productid=392末尾添加and user>0并回车后,服务器返回了错误信息。通过该错误可判断目标网站使用的是SQL Server数据库,说明其后台存在SQL注入漏洞,且数据库类型可通过此方式识别。
10、 若使用SQL Server数据库,该网址所呈现的页面内容与www.xxx.com.cn/detail.asp?productid=392完全相同,具体效果6.6所示。两者在数据展示和页面结构上保持一致,体现了数据库驱动下网页内容的统一性与一致性。
11、 当使用SQL Server数据库时,由于系统中不存在名为msysobjects的表,服务器会提示对象名msysobjects无效的错误信息,6.7所示。若Web应用程序具备一定的容错机制,则返回的页面内容将与正常页面存在明显差异,表现出不同的响应结果。
12、 使用下方语句进行表达
13、 访问地址 http://www.ahsdxy.ah.edu.cn/ReadNews.asp?NewsID=294and (select count(*) from msysobjects)>0 后,系统6.8所示返回错误信息:无法读取记录;在msysobjects表上无数据读取权限。该提示表明目标数据库为SQL Server,因为msysobjects是SQL Server系统表,其存在且提示权限不足,可作为判断数据库类型的依据。此现象常用于数据库类型探测。
14、 使用下方语句进行表述
15、 访问网址 http://www.ahsdxy.ah.edu.cn/ReadNews.asp?NewsID=294 并附加条件 (select count(*) from sysobjects)>0 后,系统会因数据库查询异常而触发错误信息,具体表现6.9所示。该响应表明服务器对恶意注入语句进行了处理,但未妥善屏蔽错误详情,可能暴露数据库结构,存在安全风险,需引起重视并及时修复漏洞以防止进一步的攻击行为。
16、 第五步:推测表名。测试基于网站www.xxx.ah.edu.cn,结果6.8与图6.9所示。
17、 6.10所示,在浏览器地址栏的URLhttp://www.xxx.com.cn/detail.asp?productid=392末尾添加and (select count(*) from admin)>=0后回车,页面出现服务器错误提示。该响应表明数据库中未找到名为admin的数据表,说明当前数据库结构中不存在此表,从而验证了表名猜测失败。
18、 6.11所示,在网址http://www.xxx.com.cn/detail.asp?productid=392后附加and (select count(*) from adminuser)>=0进行测试,页面正常显示,表明该数据库中存在名为adminuser的数据表。通过此方法成功验证了表名的猜测,说明该表确实存在于目标系统中,为后续的信息提取和进一步探测提供了基础依据。
19、 猜测表名时可采用类似以下的格式进行。
20、 第六步:推测用户名和密码对应的字段名称。
21、 猜出表名后,将count(*)替换为count(字段名),采用相同方式推测字段名称。
22、 6.12所示,在浏览器地址栏的URLhttp://www.xxx.com.cn/detail.asp?productid=392末尾追加and exists (select count(name) from adminuser)>=0并回车后,服务器返回错误信息。该提示表明数据库中不存在名为name的字段,说明当前尝试访问的字段名在adminuser表中无效,从而验证了该字段名的错误性,进一步反映出系统对输入内容的检测机制存在响应差异,可用于判断数据库结构的有效性。
23、 在目标网址 http://www.xxx.com.cn/detail.asp?productid=392 后添加语句and (select count(admin_name) from adminuser)>=0,页面正常显示,6.13所示。该响应表明数据库中存在名为admin_name的字段,且其所属数据表为adminuser。通过此次验证,成功推断出系统用户信息表中的用户名字段名称,为进一步的数据提取提供了关键依据。此操作属于典型的信息探测行为。
24、 猜测密码字段名称
25、 若访问网址 http://www.xxx.com.cn/detail.asp?productid=392and (select count(admin_pwd) from adminuser)>=0 时页面显示正常,则表明对该字段的猜测成功,可确认该数据库中存在名为 admin_pwd 的密码字段。此方法通过判断查询语句是否执行成功来验证字段名称的正确性,是信息探测的一种常见手段,需在合法授权范围内使用,避免对系统造成未授权访问风险。
26、 第七步:推测用户名。已知adminuser表中包含admin_name字段,现采用ASCII码逐字符解码的方式进行用户名猜测。
27、 先推测用户名的字符数量。
28、 6.14所示,在浏览器地址栏的URLhttp://www.xxx.com.cn/detail.asp?productid=392末尾追加and (select top 1 len(admin_name) from adminuser)>11。该语句的作用是从adminuser表中查询第一条记录的admin_name字段长度,并判断其是否大于11。按下回车键后,若页面正常显示,表明条件成立,即管理员用户名的长度确实超过11个字符。此操作常用于探测数据库中敏感字段的信息长度,是常见的一种SQL注入测试方法。
29、 6.15所示,在URLhttp://www.xxx.com.cn/detail.asp?productid=392后附加条件and (select top 1 len(admin_name) from adminuser)>12,页面返回错误信息,表明该条件下查询不成立,即用户名长度不超过12。由此推断,数据库中admin_name字段的长度等于12。通过此种布尔型判断方式,逐步验证并确认了管理员用户名的实际长度,为后续的信息提取提供了关键依据。此类操作常用于检测系统是否存在SQL注入漏洞。
30、 获取admin_name长度后,利用unicode函数提取其第N个字符的ASCII值,例如通过substring截取指定位置的单个字符并转换为对应的Unicode编码。
31、 推测首个字符是什么
32、 6.16所示,当输入条件为 productid=392 且 (select top 1 unicode(substring(admin_name, 1, 1)) from adminuser) > 0 至大于121时,系统均返回正常响应;这表明当前查询所提取的管理员用户名首字符的Unicode编码值在122以内。继续测试发现,6.17所示,当判断条件提升至大于122时,系统页面出现异常响应,不再显示正常内容。由此可推断,该字符的Unicode码值恰好为122。通过查阅标准ASCII编码表可知,十进制数值122对应的小写英文字母为z。因此,可以确定管理员账户名称的第一个字符为z。这一过程利用了基于布尔逻辑的盲注技术,通过不断调整比较条件,逐位推测出目标字段中的字符内容。尽管响应差异细微,但结合对字符编码规则的理解,仍能准确还原原始信息。此类方法在缺乏直接数据反馈的情况下,是获取数据库敏感内容的重要手段之一。
33、 推测第二个字符是什么
34、 当将参数从 productid=392 and (select top 1 unicode(substring(admin_name, 2, 1)) from adminuser)>0 逐步调整至大于103时,页面均显示正常;而当该数值提升至104时,页面出现异常表现。由此可以推断,所查询字段的第二个字符对应的Unicode编码值不大于104。结合ASCII编码表可知,十进制数104对应的小写字母为h。由于在104时请求失效,说明实际字符的编码值等于104,因此admin_name字段第二个字符即为h。这一过程利用了基于布尔响应的盲注技术,通过不断试探目标字符的Unicode码点范围,依据页面返回状态判断比较结果,从而逐位推导出敏感字段的具体内容。此类方法常用于无法直接获取数据库数据的渗透测试场景中,攻击者借助逻辑判断和编码对照实现对关键信息的还原。
35、 推测第三个字符是什么
36、 当将参数从 productid=392 and (select top 1 unicode(substring(admin_name, 3, 1)) from adminuser)>0 逐步调整至大于110时,页面均显示正常;但当该值提升至大于111时,页面表现异常。由此可以推断,admin_name 字段中第3个字符的Unicode编码值应为111。通过查阅标准ASCII码表可知,十进制数值111对应的小写字母为o,因此可确认该用户名第三个字符即为o。这一过程利用了布尔盲注的基本原理,通过不断试探目标字符的编码范围,依据页面返回的差异判断条件真假,从而逐位推断出敏感信息的具体内容。在整个测试过程中,每次仅修改比较数值,观察响应结果的变化,确保判断的准确性。最终结合字符编码规则完成解码,获取实际字符值。这种方法常用于在无直接数据回显的场景下提取数据库中的关键字段内容。
37、 通过上述方法逐一推断第4至第12位字符,最终确定用户名为zhoushanshan。
38、 第八步:尝试获取用户密码。采用与猜测用户名相似的方法推测密码,由于密码通常以MD5加密形式存储于数据库中,即使成功获取,所得亦为加密结果,需进一步实施解密破解才能还原原始密码。
39、 第九步:更改密码。若破解困难,可直接修改已猜出用户名的对应密码。
40、 a0b923820dcc509a是数字1的MD5哈希值,表示可将某账户密码临时修改为1。其中zhoushanshan为已推测出的用户名。攻击者可通过相同方式将密码恢复原值,以此掩盖入侵痕迹,避免真实用户察觉账号异常或系统遭非法访问的情况发生。
评论
更多评论