防止脚本注入

合集下载

安全编程:防止代码注入和提高程序的安全性

安全编程:防止代码注入和提高程序的安全性

安全编程:防止代码注入和提高程序的安全性安全编程是指在软件开发过程中,采取一系列的编程技巧和安全措施,以防止代码注入和提高程序的安全性。

在这篇文章中,我们将介绍一些常用的安全编程技术和方法,以帮助开发人员构建更安全的程序。

第一部分:代码注入的危害和防范措施代码注入是指攻击者通过在应用程序中插入恶意代码或者修改现有代码,以获取程序的控制权或者执行非法操作。

代码注入可能导致许多安全问题,包括数据泄漏、系统崩溃等。

下面是一些防范代码注入的常用措施:1.使用参数化查询:参数化查询是指在执行数据库查询时,使用参数替代直接将用户输入拼接到查询语句中。

这样可以防止攻击者通过输入恶意代码来修改查询的行为。

2.输入验证和过滤:对于所有用户输入的数据,都要进行有效性验证和过滤。

例如,可以使用正则表达式来验证输入的格式是否符合规范,过滤掉潜在的恶意输入。

3.防止脚本注入:如果程序中需要接受用户输入的脚本代码,必须对用户输入的内容进行严格的过滤和转义,以确保不会执行恶意脚本。

4.使用安全的编程语言和框架:选择使用已经经过安全审计和测试的编程语言和框架,可以降低代码注入的风险。

第二部分:程序安全性的提高除了防范代码注入外,我们还需要采取其他措施来提高程序的安全性。

下面是一些常用的方法和技术:1.身份验证和授权:为应用程序添加用户身份验证和授权机制,确保只有合法的用户可以访问敏感数据或者执行特定的操作。

2.加密和解密:对于敏感的数据,使用适当的加密算法进行加密,在需要使用数据时,再进行解密。

这样可以防止数据在传输过程中被窃取或篡改。

3.异常处理和日志记录:在程序中添加异常处理机制,及时捕获并处理异常,以防止未经处理的异常导致安全问题。

同时,记录应用程序的日志,以方便后续的安全审计和故障排查。

4.更新和补丁:及时更新和应用操作系统、数据库和其他相关软件的安全补丁,以保证系统的安全性。

5.安全审计和漏洞扫描:定期对应用程序进行安全审计和漏洞扫描,及时发现和修复潜在的安全漏洞。

Web应用开发安全性与防范措施

Web应用开发安全性与防范措施

Web应用开发安全性与防范措施随着互联网的飞速发展,越来越多的Web应用被开发出来应用于各行各业。

但是,Web应用开发中安全性问题也日益突出。

不安全的Web应用很容易被攻击者利用,造成严重的数据泄露、信息窃取甚至是恶意攻击。

那么我们应该如何保障Web应用的安全呢?本文将从Web应用的安全性问题入手,分析Web应用开发中可能存在的安全漏洞,并提出一些相应的防范措施。

1. SQL注入攻击SQL注入攻击是Web应用中非常常见的一种攻击方式。

攻击者通过在表单中注入恶意的SQL语句,从而实现绕过身份验证、欺骗数据库等非法操作。

避免SQL注入攻击的最简单方法是使用参数化查询,这样可以避免动态拼接SQL语句时忽略对用户输入的验证。

2. 跨站点脚本(XSS)攻击XSS攻击也是Web应用开发中常见的一种攻击方式。

攻击者利用Web页面中的漏洞,向页面中注入恶意脚本,从而窃取用户的敏感信息或进行其他非法操作。

在开发Web应用的过程中,必须进行输入验证,确保用户输入的内容不包含任何非法的脚本代码。

此外,我们可以使用CSP(内容安全策略)来定义哪些资源可以被加载,从而防止非法脚本的注入。

3. 文件读取漏洞文件读取漏洞是Web应用中的一种非常常见的漏洞,攻击者通过向Web应用中发送恶意请求,成功实现读取系统文件、读取敏感配置文件等非法操作。

为了预防文件读取漏洞,我们需要确保Web应用中的文件访问权限是正确配置的,并对用户的输入进行充分的验证。

4. CSRF攻击CSRF攻击是利用受害者的身份,在不知情的情况下,向目标网站发出请求,执行非法操作的一种攻击方式。

为了预防CSRF攻击,我们可以采用CSRF Token机制。

通过在页面中嵌入随机生成的Token值,可以在一定程度上降低CSRF攻击的风险。

5. 文件上传漏洞文件上传漏洞也是华夏银行快易付互联网金融投资平台常见的一种安全漏洞。

当Web应用对用户上传的文件没有进行充分的验证,攻击者可以通过上传恶意文件来实现窃取用户敏感信息、执行任意代码等操作。

跨站脚本攻击的危害和防护方法

跨站脚本攻击的危害和防护方法

跨站脚本攻击的危害和防护方法跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的 Web 应用程序安全漏洞,攻击者通过在合法网页中插入恶意脚本代码,使用户在浏览网页时受到攻击。

这种攻击可以导致诸如 cookie 盗取、恶意操作用户账户等危害。

为了保护用户数据和确保网站安全,开发人员需要采取一些防护措施来防范这种攻击。

1.会话劫持:攻击者可以通过窃取用户的会话ID,获得对用户账户的控制权,从而越过身份验证阶段访问受限资源和敏感信息。

2.数据窃取:攻击者可以通过注入恶意代码,将用户的敏感信息(如用户名、密码、信用卡号等)发送到恶意服务器上,从而导致用户信息泄露。

3.恶意操作:攻击者可以通过注入脚本代码,欺骗用户进行一些非法操作,如转账、删除数据等,导致用户财产损失或系统数据丢失。

为了防范跨站脚本攻击,开发人员可以采取以下几种防护方法:1.输入验证和过滤:开发人员需要对用户输入的数据进行有效的验证和过滤,避免恶意脚本的注入。

对于用户输入的特殊字符(如`<`,`>`,`"`,`'`,`/`等),需要进行转义处理或替换为安全字符。

2.输出编码:在将用户输入的数据输出到网页或其他输出端之前,需要进行适当的编码处理,确保输出内容被当作纯文本而不是可执行脚本来处理。

常见的输出编码方式包括HTML编码、URL编码等。

4. 使用 HttpOnly Cookie:在设置 Cookie 时,开发人员可以将它们标记为 HttpOnly,这样客户端脚本就无法通过 document.cookie API 来访问该 Cookie。

这可以减少 XSS 攻击者对用户 Cookie 的窃取。

5.安全的开发实践:开发人员需要遵循安全的开发实践,如避免在网页中直接嵌入脚本代码、使用安全套接字层(SSL/TLS)传输敏感数据、定期更新和升级服务器软件等。

6.持续安全审计:定期进行网站和应用程序的安全审计,检查是否存在潜在的跨站脚本攻击漏洞。

网络安全常见漏洞利用案例剖析

网络安全常见漏洞利用案例剖析

网络安全常见漏洞利用案例剖析网络安全是当前全球性的重要问题之一,各种漏洞的存在给网络安全带来了巨大的威胁。

本文将会通过剖析几个常见的网络安全漏洞利用案例,探讨其原因、影响以及防范措施,以期增强人们对网络安全的认识与防范意识。

一、跨站脚本攻击(Cross-Site Scripting,XSS)跨站脚本攻击是指攻击者通过注入恶意脚本来获取用户的敏感信息或控制用户的浏览器。

攻击者通常利用Web应用程序中未正确校验、过滤用户输入的漏洞,插入嵌入式脚本,从而篡改网页内容、窃取用户信息或进行其他恶意操作。

常见案例剖析:某电子商务网站存在未过滤用户输入的漏洞,攻击者利用该漏洞成功注入恶意脚本。

当用户浏览包含该脚本的页面时,脚本会在用户浏览器中执行,窃取用户的登录凭证以及其他敏感信息。

影响:跨站脚本攻击可能导致用户个人资料泄露、账号被盗或者进行恶意操作等后果。

对于网站而言,会损害其声誉,导致用户流失。

防范措施:1. 对用户输入进行严格的过滤和校验,防止恶意脚本的注入。

2. 使用现代化的Web框架和开发工具,自动提供一些跨站脚本攻击的防护措施。

3. 及时更新和修复软件漏洞,加强系统安全配置。

4. 对用户敏感信息进行加密处理,确保安全传输。

二、SQL注入攻击(SQL Injection)SQL注入攻击是指攻击者通过在Web应用程序中注入恶意的SQL 代码来实现非法操作,例如修改、删除数据库中的数据。

攻击者通过修改输入数据,使得应用程序在执行SQL查询时发生意外,从而绕过访问控制,获取、篡改或删除敏感数据。

常见案例剖析:某社交网络应用程序的登录界面存在SQL注入漏洞,攻击者使用一条带有恶意注入脚本的SQL语句成功通过验证并登录到其他用户账号。

影响:SQL注入攻击可能导致用户个人隐私泄露、账号被盗、整个数据库被篡改或删除等后果。

这种攻击方式对网站和用户都造成了重大的损失。

防范措施:1. 对用户输入进行严格的限制和校验,过滤非法字符。

xss过滤器原理

xss过滤器原理

xss过滤器原理XSS过滤器原理XSS(Cross-Site Scripting)攻击是一种常见的Web安全漏洞,攻击者通过在Web页面中注入恶意脚本,从而获取用户的敏感信息或者控制用户的浏览器。

为了防止XSS攻击,Web应用程序通常会使用XSS过滤器来过滤用户输入的数据,从而防止恶意脚本的注入。

XSS过滤器的原理是通过对用户输入的数据进行过滤和转义,从而防止恶意脚本的注入。

具体来说,XSS过滤器会对用户输入的数据进行以下处理:1. 过滤特殊字符XSS攻击通常会利用一些特殊字符来注入恶意脚本,比如<、>、&、"、'等。

XSS过滤器会对这些特殊字符进行过滤,从而防止恶意脚本的注入。

2. 转义HTML标签XSS攻击通常会利用HTML标签来注入恶意脚本,比如<script>、<iframe>、<img>等。

XSS过滤器会将这些HTML标签转义成实体字符,从而防止恶意脚本的注入。

3. 过滤危险属性XSS攻击通常会利用一些危险属性来注入恶意脚本,比如onload、onclick、onerror等。

XSS过滤器会对这些危险属性进行过滤,从而防止恶意脚本的注入。

4. 过滤危险协议XSS攻击通常会利用一些危险协议来注入恶意脚本,比如javascript:、vbscript:、data:等。

XSS过滤器会对这些危险协议进行过滤,从而防止恶意脚本的注入。

XSS过滤器的原理是通过对用户输入的数据进行过滤和转义,从而防止恶意脚本的注入。

但是,XSS过滤器并不能完全防止XSS攻击,因为攻击者可以利用一些绕过XSS过滤器的技巧来注入恶意脚本。

因此,Web应用程序还需要采取其他措施来增强安全性,比如输入验证、输出编码、HTTPS等。

如何编写安全的Shell脚本防止命令注入和安全漏洞的高级技巧

如何编写安全的Shell脚本防止命令注入和安全漏洞的高级技巧

如何编写安全的Shell脚本防止命令注入和安全漏洞的高级技巧Shell脚本是系统管理和自动化任务的重要工具。

然而,由于Shell脚本的特性,其容易受到命令注入攻击和其他安全漏洞的影响。

为了保护系统和数据的安全,必须采取一些高级技巧来编写安全的Shell脚本。

本文将介绍一些有效的方法和技巧来防止命令注入和其他安全漏洞。

1. 使用强大和可靠的输入验证输入验证是编写安全Shell脚本的关键步骤之一。

不信任的用户输入可能包含恶意代码或特殊字符,导致命令注入。

因此,应该对用户的输入进行严格的验证和过滤。

可以使用正则表达式或特定功能来限制输入的内容和格式。

2. 使用引号防止命令注入在Shell脚本中,使用引号可以防止字符串中的命令被解释和执行。

建议在包含用户输入的命令中使用引号,以确保输入值被视为字符串而不是命令。

例如,可以使用单引号或双引号将变量和用户输入括起来,以防止注入攻击。

3. 限制命令执行的权限为了减小潜在攻击的危害范围,应该限制Shell脚本的执行权限。

可以通过更改脚本文件的权限设置为只可执行,以及通过限制脚本所能操作的文件和目录的权限来实现这一点。

此外,还可以使用sudo等工具,将脚本的执行权限仅限给特定的用户或用户组。

4. 使用安全的临时文件Shell脚本通常需要使用临时文件来处理数据。

然而,不安全或不正确的使用临时文件可能导致安全漏洞,例如竞争条件、路径遍历漏洞等。

为了防止此类漏洞,应该使用mktemp等工具来创建临时文件,并在使用完毕后立即删除。

5. 避免硬编码敏感信息在Shell脚本中避免硬编码敏感信息是一种好的实践。

硬编码的敏感信息(如用户名、密码、API密钥等)容易被恶意用户或攻击者获取。

相反,应该将这些敏感信息存储在安全的配置文件中,并在脚本运行时读取这些值。

6. 定期更新和维护Shell脚本Shell脚本一旦编写完成,不应该被忽视。

定期更新和维护脚本是防止安全漏洞的重要步骤。

随着时间的推移,系统和软件的安全要求可能会有所变化,可能会出现新的漏洞。

antisamy使用案例

antisamy使用案例

antisamy使用案例antisamy是一种用于防止跨站脚本攻击的工具,它可以对用户输入的数据进行过滤和清理,以防止恶意脚本的注入。

下面是一些关于antisamy使用案例的介绍。

1. 防止XSS攻击:antisamy可以对用户输入的数据进行过滤和清理,确保网站上不会出现恶意脚本。

例如,当用户在评论区输入一段包含脚本的内容时,antisamy可以将该脚本过滤掉,只保留用户的文字内容。

2. 保护用户隐私:antisamy可以过滤掉用户输入中的敏感信息,以保护用户的隐私。

例如,当用户在注册页面输入个人信息时,antisamy可以检测到其中包含的手机号码或邮箱地址,并对其进行处理,确保这些敏感信息不会被其他人获取。

3. 防止SQL注入:antisamy可以对用户输入的数据进行检测,确保不会出现SQL注入攻击。

例如,当用户在搜索框中输入一段可能包含SQL注入的字符串时,antisamy可以检测到并对其进行过滤,以防止数据库被非法访问。

4. 防止HTML注入:antisamy可以过滤用户输入中的HTML标签,确保网站不会受到HTML注入攻击。

例如,当用户在文章编辑器中输入一段包含恶意HTML标签的内容时,antisamy可以将这些标签过滤掉,以保证网站的安全性。

5. 防止文件上传漏洞:antisamy可以对用户上传的文件进行检测,以防止文件上传漏洞被利用。

例如,在用户上传头像的功能中,antisamy可以对上传的文件进行检测,并确保只有图片文件被接受,避免恶意文件被上传到服务器。

6. 防止恶意URL攻击:antisamy可以对URL进行检测和过滤,以防止恶意URL的攻击。

例如,当用户在网站的评论区输入一段包含恶意URL的内容时,antisamy可以对该URL进行检测,并阻止其被其他用户点击,避免用户受到恶意网站的攻击。

7. 防止HTTP响应拆分攻击:antisamy可以检测和过滤掉用户输入中的非法字符,以防止HTTP响应拆分攻击。

前端开发中的防御代码注入攻击方法

前端开发中的防御代码注入攻击方法

前端开发中的防御代码注入攻击方法编写安全的前端代码是确保应用程序安全性的重要步骤之一、代码注入攻击是一种常见的网络攻击方法,它利用应用程序的漏洞,向应用程序注入恶意代码。

本文将介绍前端开发中常见的代码注入攻击方法,并提供一些防御策略。

1.XSS(跨站脚本攻击):XSS是一种常见的代码注入攻击方法,攻击者通过向网页中插入恶意脚本来执行非法操作,如窃取用户的敏感信息。

为了防止这种攻击,在前端开发中应该始终对输入的数据进行过滤和转义,并使用专门的安全库来处理用户输入。

2.SQL注入:SQL注入是一种通过在输入字段中插入SQL代码来攻击数据库的方法。

为了防止SQL注入攻击,前端开发人员应该使用参数化查询或存储过程,而不是直接拼接用户输入的数据到SQL查询中。

3.命令注入:命令注入是一种通过在输入字段中插入恶意命令来攻击操作系统的方法。

为了防止命令注入攻击,前端开发人员应该避免使用用户输入的数据来拼接命令,并使用安全的API来执行操作。

4.HTML注入:HTML注入是一种通过在输入字段中插入恶意HTML代码来攻击网页的方法。

为了防止HTML注入攻击,前端开发人员应该使用安全的HTML编码函数来处理用户输入的数据,以确保用户输入的内容不会被解析为HTML 代码。

5.HTTP头注入:HTTP头注入是一种通过在HTTP标题字段中插入恶意代码来攻击服务器的方法。

为了防止HTTP头注入攻击,前端开发人员应该始终对用户输入的数据进行过滤和转义,并使用安全的API来设置HTTP标题。

除了上述防御策略-应该定期更新应用程序的依赖库和框架,以获取最新的安全修复。

-应该对用户输入的数据进行验证,只接受预期格式的数据,拒绝任何带有恶意代码的输入。

-应该使用HTTPS来加密前端和后端之间的通信,以防止数据被窃取或篡改。

-应该监控应用程序的日志,及时发现和响应潜在的安全问题。

在开发过程中,前端开发人员应该始终将安全性作为优先考虑因素,采取适当的防御措施来防止代码注入攻击。

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

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。

但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。

用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。

能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。

根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。

在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP 注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。

了解ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。

大家准备好了吗?Let's Go...入门篇如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好HTTP 错误信息前面的勾去掉。

否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。

第一节、SQL注入原理以下我们从一个网站开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。

在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:Microsoft JET Database Engine 错误'80040e14' 字符串的语法错误在查询表达式'ID=49'' 中。

/showdetail.asp,行8 从这个错误提示我们能看出下面几点:1. 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。

2. 程序没有判断客户端提交的数据是否符合程序要求。

3. 该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测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:可以注入的表现:①正常显示(这是必然的,不然就是程序有错误了)②正常显示,内容基本与①相同③提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。

当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“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语句的原貌,按参数类型主要分为下面三种:(A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:Select * from 表名where 字段=49 注入的参数为ID=49 And [查询条件],即是生成语句:Select * from 表名where 字段=49 And [查询条件] (B) Class=连续剧这类注入的参数是字符型,SQL语句原貌大致概如下:Select * from 表名where 字段=’连续剧’注入的参数为Class=连续剧’and [查询条件] and ‘’=’,即是生成语句:Select * from 表名where 字段=’连续剧’and [查询条件] and ‘’=’’&copy; 搜索时没过滤参数的,如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一个个测试,怎么样才比较快就看各自发挥了。

在得到username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码,比如:id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0 同样也是用逐步缩小范围的方法得到第1位字符的ASCII码,注意的是英文和数字的ASCII码在1-128之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。

相关文档
最新文档