`
gstarwd
  • 浏览: 1525278 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一种防注入代码的绕过学习总结

阅读更多
摘要:1.使用URL编码我们传递的数据,比如select可以编码为selec%74(即将t转换为url编码),这样就可以实现注入了! 2.使用cookies注入。...

 

前些阵子讯时系统爆出了很多洞,先看他的怎么写的,下面是从他的admin_conn.asp文件中找到的。

  sss=LCase(request.servervariables(”QUERY_STRING”))
  if instr(sss,”select”)<>0 or instr(sss,”inster”)<>0 or instr(sss,”delete”)<>0 or
  instr(sss,”(”)<>0 or instr(sss,”‘or”)<>0 then
  response.write “你的网址不合法”
  response.end
  end if

代码使用了 request.servervariables的方法来获得传递过来的数据,然后赋值给sss。再判断传递过来的sss变量中是否含有 select,inster等敏感的字符串,只要有就结束程序。给普通注入造成了极大的麻烦,需要有新的东西出现来突破这个防注入。

现已知的有两种方法:
1.使用URL编码我们传递的数据,比如select可以编码为selec%74(即将t转换为url编码),这样就可以实现注入了!
2.使用cookies注入。

先看看第1种怎么实现的吧。因为程序接受的参数使用的是request.servervariables,呵呵,这个方法和我们平时的 request不太一样的,因为它接受的数据都会原封不动的接受的,比如我们传递了selec%74,那么这里sss里就会是selec%74,而不是已经解码的select 字符串了。当下面的判断语句来判断时会因为select<>selec%74而绕过检测!

第2种利用了request的cookie方法来传递数据,为什么呢?看程序的代码我们知道因为他只判断了使用 request.servervariables(”QUERY_STRING”)来接受的数据,我们如果用cookie来传递的话,程序当然不会去检测了,只要在前面的代码中找到一处使用request的方法接收变量的地方。这就是cookie的注射了。比如:前面有这样代码我们就可以实现cookie 注射了.这次代码在讯时admin_news_view.asp中截的。

  &lt;%   newsid=trim(request(”newsid”))   sql = “select * from news where id=”&amp;newsid   Set rs = Server.CreateObject(”ADODB.RecordSet”)   rs.Open sql,conn,1,1   title=rs(”title”)   dat=rs(”time”)   hit=rs(”hit”)+1   content=rs(”content”)   %&gt;

使用了request接收,而它会依次的去用3种数据集合(Form,QueryString,cookie)去判断,所以我们可以使用cookie来提交我们构造的SQL语句了.这里就不在截图了,具体可以参考这篇文章《最新版讯时新闻发布系统惊爆cookie漏洞》

但是并不是所有的程序都这么另人兴奋的哦,上次入侵一个站时,就碰到了这种情况,找到了源码下来看,却没有突破这个防注入。代码如下:

  sub check()
  Fy_Url=Request.ServerVariables(”QUERY_STRING”)
  Fy_a=split(Fy_Url,”&amp;”)
  redim Fy_Cs(ubound(Fy_a))
  On Error Resume Next
  for Fy_x=0 to ubound(Fy_a)
  Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),”=”)-1)
  Next
  For Fy_x=0 to ubound(Fy_Cs)
  If Fy_Cs(Fy_x)&lt;&gt;”" Then
  If Instr(LCase(Request(Fy_Cs(Fy_x))),”‘”)&lt;&gt;0 or Instr(LCase(Request(Fy_Cs
  (Fy_x))),”and”)&lt;&gt;0 or Instr(LCase(Request(Fy_Cs(Fy_x))),”select”)&lt;&gt;0 or Instr(LCase
  (Request(Fy_Cs(Fy_x))),”union”)&lt;&gt;0 or Instr(LCase(Request(Fy_Cs(Fy_x))),”from”)&lt;&gt;0 or
  Instr(LCase(Request(Fy_Cs(Fy_x))),” “)&lt;&gt;0 Then
  response.Write(”嘿嘿,不要你注射!屏蔽了关键字,但是这个屏蔽程序却不好——如何突破呢?”)
  Response.End
  End If
  End If
  Next
  end sub

这样的代码,都是用了Request.ServerVariables(”QUERY_STRING”)来接收的数据,但是你直接将注入的字符URL编码,会看到仍不能注射!

那到底怎么去突破呢?看下面!lake2大牛曾经写过一篇突破这种防注入的大作,这个方法也就是大牛发现的! 写的很详细哦,我们就引用大牛的话来解释一下这个绕过机制。

“Request.ServerVariables(”QUERY_STRING”)是得到客户端提交的字符串,这里并不会自动转换url编码,哈哈,如果我们把name进行url编码再提交的话,呵呵,那就可以绕过检查了。”下面是我的理解,因为程序使用 Instr(LCase(Request(Fy_Cs(Fy_x))),”‘”)<>0这样的判断语句,它是判断了name的值即 value,而且使用request来接收数据的.前面我们如果在url里value我们用url编码后来提交,然后当值传递到这里,就又会被解码了,所以程序可以检测得到.注意,但它只是判断了name的值即value,但对name,可以看到没有判断,而它又是通过name这个变量名来判断SQL语句的,所以只要用url编码name就可以了,然后程序仍是去判断name的值,但是这次是i%64,会被转换为id,可是我们并没有赋值给id而是 i%64,呵呵,那么id的值它就会认为是空,就这样绕过了哦!

可以看出只要能保证前面接收的方式不能解码,后面判断的语句可以解码就可以绕过了。后来胡思乱想到了chr()函数,只是YY了一下…..也没成。

而且这里是不是也可以用cookie注射呢?我测试的时候没有成,可能找的不是用request接受的地方….

分享到:
评论

相关推荐

    一种防注入代码的绕过学习总结脚本安全电脑资料.doc

    文档标题和描述提到了一种防注入代码的绕过学习,主要关注的是如何对抗SQL注入攻击。SQL注入是一种常见的网络安全威胁,攻击者通过在输入字段中插入恶意SQL代码,以获取、修改、删除数据库中的敏感信息或执行未授权...

    SQL 防注入代码全集

    SQL注入是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL语句来操纵数据库,获取、修改或删除敏感数据。本资源"SQL 防注入代码全集"提供了多种编程语言(如ASP和C#)的防御策略,帮助开发者保护其应用程序...

    mysql注入绕过技术

    在网络安全领域,SQL注入是一种常见的攻击手段,攻击者通过在应用程序中插入恶意SQL代码来控制数据库。针对这种威胁,许多开发者实施了过滤机制来防御潜在的SQL注入攻击。然而,正如Johannes Dahse在其2010年布拉格...

    Web应用安全:使用SQL注入绕过认证实验.doc

    Web应用安全领域中,SQL注入是一种常见的攻击手段,它允许恶意用户通过构造特定的SQL语句,绕过系统的身份验证,获取或修改数据库中的敏感信息。以下是对"使用SQL注入绕过认证"实验的详细说明: 一、实验目的 1. ...

    基于正则类sql注入防御的绕过技巧.pdf

    在防御SQL注入攻击时,使用正则表达式是一种常见的方法。正则表达式可以用来匹配恶意输入,例如SQL关键字、特殊字符等。但是,攻击者可以通过各种技巧来绕过这种防御机制。 本文将介绍基于注释类、长度类和终极类的...

    EAC反作弊绕过工具源代码_NP_dbd绕过eac_绕过np_绕过eac_np反作弊_

    "绕过eac"表示试图避开EAC的检测机制,而"np反作弊"则可能指的是一种针对EAC的反反作弊方法。 在压缩包中的"源代码"文件,很可能是开发人员或黑客社区分享的一种方法,用于演示如何编写程序来规避EAC的检测。这些源...

    深入了解SQL注入绕过waf和过滤机制

    缓冲区溢出也是一种绕过技术,例如使用缓冲区溢出来执行恶意代码,以避免 WAF 的检测。 最后,整合绕过是指将多种绕过技术结合使用,以避免 WAF 的检测。例如,将大小写混合、替换关键字、使用编码、使用注释、等价...

    asp防注入的代码(经典)

    在提供的"防注入asp代码"源码中,很可能是实现了上述的一种或多种防注入策略。通过查看源码,我们可以更深入地学习如何在实际项目中应用这些技术。然而,具体代码的细节在这里没有给出,建议下载并分析源码以获取更...

    郁金香代码注入器

    郁金香代码注入器是一种专门用于在目标进程中注入自定义代码的工具,它在IT行业中主要涉及的是系统编程、逆向工程和安全领域。代码注入技术通常被用来调试程序、性能分析,甚至进行恶意活动,如病毒或木马的传播。在...

    汇编代码注入器,支持x64和x86

    汇编代码注入器是一种在软件开发和逆向工程中广泛使用的工具,它允许开发者将汇编代码注入到正在运行的进程或系统中,以实现特定功能或进行调试。本文将围绕这个主题,详细讲解汇编代码注入器的原理、工作方式以及...

    Asp.Net通用Sql防注入源码

    "Asp.Net通用Sql防注入源码"是针对这个问题提供的一种解决方案,旨在帮助Asp.Net程序员更好地保护他们的应用程序免受SQL注入攻击。 SQL注入攻击通常发生在应用程序没有正确验证或清理用户输入时。例如,当用户在...

    常用的sql防注入代码

    SQL注入是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL语句来操纵数据库,获取敏感信息,甚至完全控制数据库服务器。以下是一些关于防止SQL注入的重要知识点: 1. **理解SQL注入原理**:SQL注入的基本...

    代码注入的几种方法(源码 文档)

    代码注入是一种黑客技术,通过将恶意代码插入到正在运行的进程或程序中,以实现对目标系统的控制或窃取敏感信息。在这个主题中,我们将深入探讨几种常见的代码注入方法,并结合提供的源码和文档资源进行学习。 1. *...

    代码注入的三种方法(中英文合集)

    代码注入是一种高级的编程技术,它允许程序在运行时将代码注入到另一个进程中执行,从而实现特定的功能或影响目标程序的行为。这种技术在多种场景下都有应用,如安全测试、调试、系统监控以及恶意软件的攻击。以下是...

    第十三节 SQL注入绕过技术-01

    双写绕过是另一种常见的 SQL 注入绕过方法。当程序中设置了关键字之后替换为空时,攻击者可以使用双写绕过来绕过过滤措施。例如,如果程序过滤了 "union" 关键字,那么攻击者可以使用 "UnunionIon" 等变体来绕过过滤...

    PHP代码层防护与绕过.pdf

    ##### 4.1 safe3防注入代码 **PHP防护代码示例**: ```php function customError($errno, $errstr, $errfile, $errline) { echo "&lt;b&gt;Error number:&lt;/b&gt; [$errno], error on line $errline in $errfile "; } ...

    易语言源码易语言SQL防注入源码.rar

    这个压缩包中的源码可能包含了上述的一种或多种防注入技术的实现,通过对源码的阅读和学习,开发者可以深入理解如何在易语言环境下编写安全的数据库操作代码,提高应用的安全性。同时,这也是一个很好的实战案例,...

    sql注入原理及php防注入代码.doc

    SQL注入是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL语句来操纵数据库。当应用程序没有正确地过滤或转义用户提供的数据时,就可能发生SQL注入。在PHP环境中,防止SQL注入至关重要,因为如果不采取适当...

Global site tag (gtag.js) - Google Analytics