SQL注入经典教程(珍藏版)
超炫PPTSQL注入

• SQL注入简介 • SQL注入攻击手段 • 如何防范SQL注入 • SQL注入案例分析 • 总结与展望
01
SQL注入简介
SQL注入的定义
SQL注入是一种利用应用程序对用户 输入验证不严格或未验证的漏洞,向 数据库查询中注入恶意SQL代码,从 而执行非授权操作或窃取敏感数据的 安全攻击手段。
输入验证和清理
1
对用户输入进行验证和清理是防范SQL注入的重 要步骤。
2
对所有用户输入进行验证,确保输入符合预期的 格式和类型,可以排除恶意输入。
3
对用户输入进行清理,如转义特殊字符,可以防 止恶意输入被当作SQL代码执行。
错误处理
01
02
03
错误的错误处理方式可能会暴露 数据库的敏感信息,从而给攻击 者提供更多机会进行SQL注入攻 击。
报错注入
总结词
报错注入是一种利用数据库报错信息来推断 其他数据的技术。
详细描述
攻击者通过向应用程序输入特定的SQL语句 片段,使得应用程序在执行查询时返回数据 库的错误信息。攻击者再通过分析这些错误 信息来推断出数据库中的敏感数据。
03
如何防范SQL注入
参数化查询
参数化查询是一种有效的防止SQL注入的方法。它通过将输入数据与SQL语句分开处理,确保输入数 据被当作数据而不是SQL代码执行。
它通过在用户输入中插入或"注入"恶 意SQL代码,使得原本的查询逻辑被 篡改,进而达到攻击者的目的。
SQL注入的危害
数据泄露
攻击者可以利用SQL注入获取数 据库中的敏感信息,如用户密码、 个人信息等。
数据篡改
攻击者可以修改数据库中的数据, 如篡改用户账号信息、恶意删除 数据等。
kali sql注入实例

Kali Linux 是一款非常强大的渗透测试和安全审计工具,其中包含了大量的工具和技术,用于检测和利用各种安全漏洞。
在渗透测试中,SQL注入是一种常见的攻击方式,它允许攻击者执行任意SQL命令,从而窃取、修改或删除数据。
以下是一个简单的Kali Linux SQL注入实例:目标:对一个简单的登录页面进行SQL注入攻击。
步骤1:确定目标首先,我们需要确定目标网站,并找到可以注入的输入字段。
在本例中,我们将攻击一个登录页面,该页面包含用户名和密码输入框。
步骤2:识别注入点在浏览器中输入目标URL,并观察页面上的输入框。
如果输入框后面直接跟着查询参数(例如“user=”和“password=”),那么这些参数很可能就是注入点。
步骤3:利用SQL注入漏洞接下来,我们需要构造一个恶意的输入字符串来执行SQL命令。
在本例中,我们将使用一个简单的SQL注入语句来绕过登录验证。
在用户名输入框中输入以下内容:admin'-- -在密码输入框中输入以下内容:password然后点击“登录”按钮。
如果攻击成功,我们将绕过密码验证并登录到系统。
步骤4:利用获取的数据一旦成功登录系统,我们就可以利用SQL注入漏洞来获取敏感数据或执行其他恶意操作。
在本例中,我们将使用SQL查询语句来获取所有用户的密码。
在用户名输入框中输入以下内容:admin'; SELECT * FROM users; ---然后点击“登录”按钮。
如果攻击成功,我们将获取到所有用户的密码。
注意:这只是一个简单的示例,实际的SQL注入攻击可能更加复杂和危险。
在渗透测试或安全审计中,应该谨慎行事,并遵守相关法律法规和道德准则。
sql注入步骤

sql注入步骤
SQL注入是一种常见的网络攻击方式,攻击者通过在输入框中输入特殊字符,从而欺骗系统执行恶意的SQL语句。
以下是SQL注入的步骤:
1. 收集目标网站的信息:攻击者需要了解目标网站的数据库类型、表结构、字段名称等信息,这些信息可以通过网络爬虫、端口扫描、SQLmap等工具获取。
2. 找到注入点:攻击者需要在目标网站的输入框中寻找可注入的点,通常是通过输入一些特殊字符来观察网站的响应,如果响应异常则说明存在注入点。
3. 构造注入语句:攻击者需要构造恶意的SQL语句,以获取或篡改数据库中的数据。
常见的注入语句包括SELECT、UPDATE、DELETE、INSERT等操作。
4. 执行注入语句:攻击者将构造好的注入语句插入到输入框中,并提交给目标网站。
如果注入成功,攻击者就能够获取或篡改数据库中的数据。
5. 掩盖攻击痕迹:攻击者需要在攻击后清除攻击痕迹,以避免被发现。
常见的掩盖方式包括删除日志、修改数据库记录等操作。
总之,SQL注入是一种非常危险的攻击方式,可以导致数据库中的数据被盗取或篡改,给企业和个人带来极大的损失。
因此,网站开发者需要加强对输入框的
过滤和验证,以防止SQL注入攻击。
sql 注入 常用命令

sql 注入常用命令SQL注入是一种常见的网络安全漏洞,攻击者通过在用户输入的数据中插入恶意的SQL代码,从而使数据库执行非预期的操作。
在本文中,我们将介绍一些常用的SQL注入命令,以及如何防止和应对这些攻击。
1. UNION注入UNION注入是一种常见的SQL注入攻击方式,攻击者通过在SQL 查询中使用UNION关键字,将恶意查询的结果与原始查询结果合并,从而获取额外的信息。
例如,攻击者可以使用以下命令获取用户表中的所有用户名和密码:```SELECT username, password FROM users UNION SELECT NULL, NULL FROM information_schema.tables;```防御方法:对用户输入进行严格的验证和过滤,使用参数化查询或预编译语句。
2. SELECT注入SELECT注入是一种利用用户输入的恶意SQL代码来修改查询结果的注入方式。
攻击者可以通过在WHERE子句中插入额外的条件来绕过身份验证或获取敏感信息。
例如,攻击者可以使用以下命令绕过登录验证:```SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1';```防御方法:使用参数化查询或预编译语句,对用户输入进行严格的验证和过滤。
3. INSERT注入INSERT注入是一种利用恶意SQL代码插入额外数据的注入方式。
攻击者可以通过在INSERT语句中插入恶意SQL代码来执行任意的数据库操作。
例如,攻击者可以使用以下命令在用户表中插入一条管理员账号:```INSERT INTO users (username, password) VALUES ('admin', 'password'); SELECT * FROM users WHERE 1=1;```防御方法:使用参数化查询或预编译语句,对用户输入进行严格的验证和过滤。
sql注入的步骤

sql注入的步骤SQL注入是一种常见的Web应用程序漏洞,攻击者通过在应用程序的输入参数中注入恶意的SQL代码来实现对数据库的非授权访问。
以下是SQL注入的一般步骤:1.了解目标:攻击者首先需要弄清楚目标系统使用的数据库类型和版本,以及应用程序中存在的可能的注入点。
2.收集信息:攻击者使用信息收集技术来获取有关目标系统的详细信息,例如应用程序的URL结构、参数、表名、列名等。
3. 扫描注入点:攻击者使用自动化工具或手动扫描目标系统,以发现可能存在的注入点。
常见的注入点包括URL参数、表单输入、Cookie等。
4.确认注入点:攻击者通过注入特定的SQL语句来确认注入点的存在。
常见的方法是在用户输入中添加单引号(')或双引号(")并观察是否出现错误信息。
5.破解注入点:一旦确认存在注入点,攻击者开始利用该漏洞。
他们尝试通过修改原始SQL语句的结构和语义来构造恶意的SQL查询。
攻击者可以使用注释符号(--)来注释掉原始SQL查询的一部分,然后添加自己的SQL代码。
6.提取数据:一旦成功注入恶意的SQL查询,攻击者可以执行各种操作,例如提取数据库中的敏感信息,修改数据库内容或删除数据。
7.升级权限:如果攻击者在注入点处获得的权限不足以执行所需的操作,他们可能会尝试提升其权限,以便获得更多的权限,如管理员权限。
8.掩盖攻击痕迹:为了掩盖攻击痕迹,攻击者可能会删除或修改数据库中的日志文件、日志记录或备份文件。
9.持久性注入:一旦攻击成功,攻击者可能会尝试在应用程序中创建持久性注入点。
他们可以修改应用程序的代码或数据库结构,以便在以后访问或控制目标系统。
10.清理痕迹:为了摆脱攻击的追踪,攻击者会清理和覆盖其在目标系统上留下的所有痕迹。
总结起来,SQL注入的步骤包括了解目标、收集信息、扫描注入点、确认注入点、破解注入点、提取数据、升级权限、掩盖攻击痕迹、持久性注入和清理痕迹。
为了防止SQL注入攻击,开发人员应该采取适当的防御措施,如使用参数化查询、输入验证和安全编码实践。
sql注入的步骤

sql注入的步骤SQL注入是一种利用应用程序中的安全漏洞,向数据库传递恶意SQL语句的攻击方式。
攻击者通过注入恶意代码,可以绕过应用程序的认证和授权机制,对数据库进行未授权的操作,甚至可能获取到敏感数据。
以下是SQL注入的步骤详解:1.了解目标:攻击者首先需要了解目标应用程序使用的数据库类型和版本,这有助于他们选择合适的注入技巧和策略。
2.识别注入点:攻击者需要找到应用程序中可以接受用户输入,并将其传递给数据库的地方。
常见的注入点包括用户登录窗口、表单、URL参数等。
3.构建恶意输入:攻击者构造恶意的输入数据,以注入恶意的SQL代码。
他们可以使用单引号、分号、注释符等字符来绕过输入验证。
4.检测注入点类型:攻击者需要确定注入点是基于布尔类型的还是基于错误消息的。
布尔注入点是通过观察应用程序的反应来判断查询结果是否为真或假。
错误消息注入点是通过观察应用程序返回的错误消息来判断注入是否成功。
5.执行注入语句:攻击者将构建的恶意输入传递给注入点,使之成为最终执行的SQL语句的一部分。
攻击者可以通过注入语句来执行各种操作,如数据库信息获取、数据篡改、管理员权限提升等。
6.探测数据库结构:攻击者可以使用一些特定的SQL语句来探测数据库的结构,如UNIONSELECT语句、ORDERBY语句等。
他们可以通过这些语句来确定数据库中的表名、列名和其他相关信息。
7.猜测和遍历数据:一旦攻击者了解了数据库结构,他们可以使用猜测和遍历的方法来获取更多的数据。
他们可以猜测表名、列名等,并通过遍历查询数据。
8.利用结果:攻击者可以利用所获取的数据来达到自己的目的,如盗取用户账号密码、篡改数据、获取敏感信息等。
9.遮蔽攻击行为:攻击者可能会删除或修改数据库日志、清理恶意痕迹,以避免被发现。
为了防止SQL注入攻击,开发者应该采取以下安全措施:-输入验证和过滤:开发者需要对用户输入进行验证和过滤,确保输入数据安全。
可以使用白名单或黑名单技术,禁止或限制特定字符的使用。
常用sql注入
常用SQL注入概述SQL注入是一种让攻击者能够在应用程序中执行恶意的SQL语句的漏洞类型。
通过在用户输入中注入恶意的SQL代码,攻击者可以绕过应用程序的安全验证,获取到敏感数据、修改数据甚至控制数据库服务器。
由于SQL注入是一种常见且易于利用的漏洞,开发人员需要了解并采取相应的防御措施。
本文将深入探讨常用的SQL注入技术,包括基于错误的注入、基于联合查询的注入和基于时间延迟的注入等,并介绍相应的防御方法。
常见的SQL注入技术1. 基于错误的注入基于错误的注入是最常见的SQL注入技术之一。
攻击者通过在用户输入中注入特定的SQL代码来触发应用程序生成错误消息,从而获取到关键信息。
以下是一些常见的基于错误的注入技术:•’ OR ‘1’=‘1’–:这是一种简单的注入技术,通过在输入框中输入该代码,攻击者可以绕过登录验证,获取到全部用户的信息。
•’ UNION SELECT null,username||password,null,null,null FROM users–:通过联合查询注入,攻击者可以获取到用户表中的用户名和密码等重要信息。
2. 基于联合查询的注入基于联合查询的注入是一种高级的SQL注入技术。
攻击者利用应用程序中存在的联合查询漏洞,执行恶意的SQL代码,并通过返回结果获得敏感信息。
以下是一些常见的基于联合查询的注入技术:•’ UNION SELECT 1,2,3,4,5–:通过联合查询注入获取列数,攻击者可以根据返回结果调整注入代码,进一步获取数据。
•’ UNION SELECT null,table_name,null,null,null FROMinformation_schema.tables–:通过联合查询获取数据库中的表名,攻击者可以进一步获取数据库结构信息。
3. 基于时间延迟的注入基于时间延迟的注入是一种高级的SQL注入技术,攻击者利用应用程序在执行查询时的延迟来判断注入是否成功。
sql注入方法
sql注入方法SQL注入是常见的攻击技术之一,攻击者利用Web应用程序存在的漏洞,向数据库中插入恶意的SQL代码,以获取敏感信息、修改数据、甚至控制整个数据库的操作。
以下是几种SQL注入的方法及其防范措施:1. 基于错误的注入攻击基于错误的注入攻击利用了应用程序对SQL语句错误的处理方式,将编写的恶意SQL语句嵌入到应用程序中,导致不稳定性和错误消息。
攻击者通过错误消息获取有关数据库的详细信息。
为了阻止这种攻击,应该尽可能减少错误可见性并修复SQL语句的错误处理。
2. 布尔盲注布尔盲注是一种在没有错误信息的情况下获取数据库信息的攻击技术。
它可以使攻击者在不知道准确的数据库信息的情况下,以布尔方式测试其猜测。
为了防止这种攻击,应该使用预处理语句和参数化查询。
3. 堆叠查询堆叠查询是通过一条恶意的SQL语句执行多个查询的技术。
攻击者在一个查询中将多个语句串联起来,并将每个查询的结果存储在查询的结果中。
为了防止这种攻击,应该使用参数化查询和限制查询执行的时间。
4. 时间盲注时间盲注是一种仅限于返回时间值的注入攻击技巧。
攻击者使用`SLEEP`函数来停止查询的执行,从而确定SQL注入的成功与否。
为了阻止这种攻击,应该对输入进行过滤,并对时间延迟进行限制。
总之,SQL注入是十分常见的攻击方式,开发人员应该遵循最佳实践以防止它的发生。
首先,要实行输入验证和过滤,确保输入的数据是格式正确的;其次,要实现参数化查询和限制查询执行时间来防止攻击;最后,要限制错误消息的可见性,并尽可能减少错误。
这样就可以大大减少SQL注入攻击对系统的威胁。
sql注入的方法
SQL注入的方法SQL注入是一种常见的Web应用程序安全漏洞,攻击者通过在应用程序接受用户输入的地方注入恶意的SQL代码,从而可以执行任意的SQL语句。
这种漏洞可能导致数据库被非法访问、数据泄露甚至整个系统被完全控制。
在本文中,我们将介绍SQL注入的方法,并提供一些预防措施。
1. 基于用户输入的SQL注入最常见的SQL注入类型是基于用户输入的注入。
攻击者通过修改用户输入的数据来执行恶意的SQL查询。
下面是一些常见的用户输入注入的方法:1.1 嵌入式SQL注入嵌入式SQL注入是通过在用户输入的字符串中插入额外的SQL代码来实现的。
例如,考虑以下的用户输入表单:SELECT * FROM products WHERE product_name = '$user_input';攻击者可以通过在$user_input中插入额外的代码来执行任意的SQL查询。
例如,如果用户输入' OR '1'='1,那么SQL查询会变成:SELECT * FROM products WHERE product_name = '' OR '1'='1';这将导致数据库返回所有的产品记录,因为'1'='1'始终为真。
1.2 盲注入盲注入是一种注入方式,攻击者无法直接获取查询结果,但可以根据应用程序对不同查询结果的响应来判断查询结果是否为真。
通常,攻击者会使用布尔逻辑来判断查询结果是否为真。
例如,攻击者可以使用以下查询:SELECT * FROM users WHERE username = 'admin' AND password LIKE '$password%';攻击者可以通过猜测$password的值来判断密码的正确性。
例如,攻击者可以使用以下查询:SELECT * FROM users WHERE username = 'admin' AND password LIKE 'a%' -- ';如果应用程序对于存在用户的情况返回不同的响应,那么攻击者可以根据响应时间或页面内容来推断密码的正确性。
sql注入的主要流程
sql注入的主要流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 寻找注入点:攻击者首先需要寻找目标网站或应用程序中可能存在 SQL 注入漏洞的地方。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
听说很多人想学SQL手工注入,但网上的资料都很不全,我在家没事就帮大家找了一些关于SQL手工注入经典的教程,希望能给大家带来帮助......SQL 注入天书 - ASP 注入漏洞全接触收藏引言随着 B/S 模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。
但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL Injection,即SQL注入。
SQL注入是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看 IIS 日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。
能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
根据国情,国内的网站用 ASP+Access 或 SQLServer 的占 70% 以上,PHP+MySQ 占 20%,其他的不足 10%。
在本文,我们从分入门、进阶至高级讲解一下 ASP 注入的方法及技巧,PHP 注入的文章由 NB 联盟的另一位朋友zwell 撰写,希望对安全工作者和程序员都有用处。
了解 ASP 注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。
大家准备好了吗? Lets Go...入门篇如果你以前没试过SQL注入的话,那么第一步先把 IE 菜单 =>工具 => Internet 选项 => 高级 => 显示友好 HTTP 错误信息前面的勾去掉。
否则,不论服务器返回什么错误,IE都只显示为 HTTP 500 服务器错误,不能获得更多的提示信息。
第一节、SQL注入原理以下我们从一个网站开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。
在网站首页上,有名为“ IE 不能打开新窗口的多种解决方法”的链接,地址为:/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:Microsoft JET Database Engine 错误 80040e14字符串的语法错误在查询表达式 ID=49 中。
/showdetail.asp,行8从这个错误提示我们能看出下面几点:网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
程序没有判断客户端提交的数据是否符合程序要求。
该SQL语句所查询的表中有一名为ID的字段。
从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
第二节、判断能否进行SQL注入看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?其实,这并不是最好的方法,为什么呢?首先,不一定每台服务器的 IIS 都返回具体错误提示给客户端,如果程序中加了 cint(参数) 之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。
请和系统管理员联络。
其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的那么,什么样的测试方法才是比较准确呢?答案如下:/showdetail.asp?id=49/showdetail.asp?id=49 ;and 1=1/showdetail.asp?id=49 ;and 1=2这就是经典的 1=1、1=2 测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了,可以注入的表现:正常显示(这是必然的,不然就是程序有错误了)正常显示,内容基本与 1 相同提示 BOF 或 EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof 时)、或显示内容为空(程序加了on error resume next)不可以注入就比较容易判断了,1 同样正常显示,2 和 3 一般都会有程序定义的错误提示,或提示类型转换时出错。
当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。
第三节、判断数据库类型及注入方法不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。
一般 ASP 最常搭配的数据库是 Access 和 SQLServer,网上超过 99% 的网站都是其中之一。
怎么让程序告诉你它使用的什么数据库呢?来看看: SQLServer 有一些系统变量,如果服务器 IIS 提示没关闭,并且 SQLServer 返回错误提示的话,那可以直接从出错信息获取,方法如下:/showdetail.asp?id=49 ;and user>0这句语句很简单,但却包含了 SQLServer 特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。
让我看来看看它的含义:首先,前面的语句是正常的,重点在 and user>0,我们知道,user 是 SQLServer 的一个内置变量,它的值是当前连接的用户名,类型为 nvarchar。
拿一个 nvarchar 的值跟 int 的数 0 比较,系统会先试图将 nvarchar 的值转成 int 型,当然,转的过程中肯定会出错, SQLServer 的出错提示是:将 nvarchar 值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc 正是变量 user 的值,这样,不废吹灰之力就拿到了数据库的用户名。
在以后的篇幅里,大家会看到很多用这种方法的语句。
顺便说几句,众所周知,SQLServer 的用户 sa 是个等同 Adminstrators 权限的角色,拿到了 sa 权限,几乎肯定可以拿到主机的 Administrator 了。
上面的方法可以很方便的测试出是否是用 sa 登录,要注意的是:如果是 sa 登录,提示是将 ”dbo” 转换成 int 的列发生错误,而不是”sa”。
如果服务器 IIS 不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access 和 SQLServer 和区别入手,Access 和 SQLServer 都有自己的系统表,比如存放数据库中所有对象的表,Access 是在系统表 [msysobjects ]中,但在Web 环境下读该表会提示“没有权限”,SQLServer 是在表 [sysobjects] 中,在Web 环境下可正常读取。
在确认可以注入的情况下,使用下面的语句:/showdetail.asp?id=49 ;and (select count(*) from sysobjects)>0/showdetail.asp?id=49 ;and (select count(*) from msysobjects)>0如果数据库是 SQLServer,那么第一个网址的页面与原页面/showdetail.asp?id= 49 是大致相同的;而第二个网址,由于找不到表 msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。
如果数据库用的是 Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。
大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启 IIS 错误提示时的验证。
进阶篇在入门篇,我们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。
接下来,我们就继续学习如何从数据库中获取想要获得的内容,首先,我们先看看SQL注入的一般步骤:第一节、SQL注入的一般步骤首先,判断环境,寻找注入点,判断数据库类型,这在入门篇已经讲过了。
其次,根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种:ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:Select * from 表名 where 字段=49注入的参数为ID=49 And [查询条件],即是生成语句:Select * from 表名 where 字段=49 And [查询条件]Class=连续剧这类注入的参数是字符型,SQL语句原貌大致概如下:Select * from 表名 where 字段=’连续剧’注入的参数为Class=连续剧’ and [查询条件] and ‘’=’ ,即是生成语句:Select * from 表名 where 字段=’连续剧’ and [查询条件] and ‘’=’’搜索时没过滤参数的,如 keyword=关键字,SQL语句原貌大致如下:Select * from 表名 where 字段 like ’%关键字%’注入的参数为keyword=’ and [查询条件] and ‘%25’=’,即是生成语句:Select * from 表名 where 字段like ’%’ and [查询条件] and ‘%’=’%’接着,将查询条件替换成SQL语句,猜解表名,例如:ID=49 And (Select Count(*) from Admin)>=0如果页面就与 ID=49 的相同,说明附加条件成立,即表 Admin 存在,反之,即不存在(请牢记这种方法)。
如此循环,直至猜到表名为止。
表名猜出来后,将 Count(*) 替换成 Count(字段名),用同样的原理猜解字段名。
有人会说:这里有一些偶然的成分,如果表名起得很复杂没规律的,那根本就没得玩下去了。
说得很对,这世界根本就不存在 100% 成功的黑客技术,苍蝇不叮无缝的蛋,无论多技术多高深的黑客,都是因为别人的程序写得不严密或使用者保密意识不够,才有得下手。
有点跑题了,话说回来,对于 SQLServer 的库,还是有办法让程序告诉我们表名及字段名的,我们在高级篇中会做介绍。
最后,在表名和列名猜解成功后,再使用 SQL 语句,得出字段的值,下面介绍一种最常用的方法-Ascii 逐字解码法,虽然这种方法速度很慢,但肯定是可行的方法。
我们举个例子,已知表 Admin 中存在 username 字段,首先,我们取第一条记录,测试长度:/showdetail.asp?id=49 ;and (select top 1 len(username) from Admin)>0先说明原理:如果 top 1 的 username 长度大于0,则条件成立;接着就是 >1、>2、>3 这样测试下去,一直到条件不成立为止,比如 >7成立,>8 不成立,就是 len(username)=8当然没人会笨得从 0,1,2,3 一个个测试,怎么样才比较快就看各自发挥了。