`
gstarwd
  • 浏览: 1489841 次
  • 性别: 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

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

    SQL注入原理以及Spring Boot如何防止SQL注入(含详细示例代码)

    SQL注入是一种针对数据库的攻击技术,攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,从而在数据库服务器上执行非授权的SQL查询。这种攻击可能导致数据泄露、数据篡改、甚至执行任意命令。 SQL注入...

    如何防范PowerShell代码注入漏洞绕过受限语言模式

    导语:受限语言模式是缓解PowerShell攻击的一种方式,能够阻止执行任意未签名的代码。 介绍 受限语言模式是缓解PowerShell攻击的一种方式,能够阻止执行任意未签名的代码。当Device Guard或者AppLocker处于强制模式...

    渗透测试必备神器SQLMAP的所有绕waf脚本合集

    总结起来,SQLMAP是一种强大的、能够绕过防火墙检测的工具。它能够帮助你发现并利用应用程序中的SQL注入漏洞,及时修复这些漏洞,确保你的数据安全。所以,如果你想确保你的应用程序免受潜在威胁的影响,那么SQLMA

    sqlmap_自动化sql注入引擎_None_sqlmap_sql注入_sql_flath1c_vulnerability_

    SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页...

    浅谈SQL注入

    SQL注入是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施,可以绕过网页或Web应用...

    inject-macro:将VBA宏代码插入Excel文档

    这旨在作为一种准备带有宏有效负载的模板化Excel或Word文档的快速方法。 -感染 如果给出'-Infect'标志,则将提供的VBA宏注入到用户指定的'-Doc'目录路径中找到的所有Excel或Word文档中。 Inject-Macro将读取用户...

    ASP中SQL注入式攻击的防范

    SQL注入式攻击就是利用设计上的漏洞,将SQL命令插入到Web表单( form)的输入域或者Web页面请求的查询字符串中,在目标服务器上运行SQL命令以及进行其他方式进行攻击,动态生成SQL命令时没有对用户输入的数据进行验证,...

    DoppelGate:DoppelGate依靠读取磁盘上的ntdll来获取syscall存根,然后将这些syscall存根修补为所需的功能以绕过Userland挂钩

    如今,Userland挂钩已在许多安全产品中变得很普遍,绕过这些挂钩对于红队/戊二酯来说是绕过这些防御的一种好方法。 方法 之所以将该项目命名为DoppelGate,是因为借鉴了Process Doppelganging和Hell's Gate中使用的...

    【专题四】Rootkit的学习与研究

    9)内核中注入dll的一种流氓方法 10)另一种读写进程内存空间的方法 11)完整驱动感染代码 12)Hook Shadow SSDT 13)ring0检测隐藏进程 对于rootkit的研究,涉及到的内容比较多,需要在充分学习理解这些技术的...

    Rootkit的学习与研究

    看雪学院 Rootkit 专题 1. 内核hook 对于hook,从ring3有很多,ring3到... 9)内核中注入dll的一种流氓方法 10)另一种读写进程内存空间的方法 11)完整驱动感染代码 12)Hook Shadow SSDT 13)ring0检测隐藏进程

    Xss测试平台.zip

    XSSer——用于检测和利用XSS漏洞的自动Web测试框架工具 XSS是一种非常常见的漏洞类型,它分布非常广泛,且比较容易被检测到。...它包含几个可以绕过某些过滤器的选项,以及各种特殊的代码注入技术。

    xsser:跨站点“ Scripter”(又名XSSer)是一种自动框架,用于检测,利用和报告基于Web的应用程序中的XSS漏洞

    它提供了几个选项来尝试绕过某些过滤器以及各种特殊的代码注入技术。 XSSer已预先安装了[&gt; 1300 XSS]攻击媒介,并且可以绕过利用几种浏览器/ WAF的代码: [PHPIDS]: PHP-IDS [Imperva]: Imperva Incapsula WAF ...

    GuardianGenius(守护精灵) 1.0.rar

    内外任何一款公开版内部版网站漏洞扫描程序进行有效拦截,针对手工方式注入和注入代码变形绕过IDS等方式也有非常高的拦截率 ;与此同时对于程序正常使用中的各种数据提交不会产生误报,这是与当前网络上所有商业版...

    sqlmap中文版本(和谐渗透小组专用)

    直接的SQL注入命令是一种方法,它被攻击者构造或者是修改现成的SQL命令来暴露出隐藏的数据或者是覆盖掉有价值的数据,甚至在服务器上执行危险地系统指令 入门 结构化的语言是数据库的标准声明语言。这让(语言)变...

    Mimo-Crawler:使用Firefox和js注入与网页进行交互并抓取其内容的Web抓取工具,以nodejs编写

    Mimo是一种“最先进的”网络爬虫,它使用无头Firefox和js注入来爬网网页。 为什么选择Mimo? Mimo之所以与众不同,是因为它使用websockets作为非无头浏览器和客户端之间的通信通道,而不是使用DevTools协议和无头...

    ROOTKIT专题的研究

    对于ROOTKIT专题的研究,主要涉及的技术有如下部分: ... 9)内核中注入dll的一种流氓方法 10)另一种读写进程内存空间的方法 11)完整驱动感染代码 12)Hook Shadow SSDT 13)ring0检测隐藏进程

    WEB安全测试

    7.7 以交互方式冒充另一种设备 149 7.8 使用cURL模仿搜索引擎 151 7.9 通过假造Referer头信息来伪造工作流程 152 7.10 仅获取HTTP头 153 7.11 使用cURL发送POST请求 154 7.12 保持会话状态 156 7.13 操纵Cookie 157 ...

    8-14 B站 C++安全开发面经 《腾讯》.docx

    10.已知一个dll里面的很多函数(API)都被inline HOOK了,如何操作,才能绕过HOOK? 内核层开发:、NDS、内核数据结构 设计模式:单例模式、工厂模式对其进行复述 反向:汇编, 1.jump几种,占几字节? 答:短...

Global site tag (gtag.js) - Google Analytics