• 利用溢出扩展SQL注入

    日期:2011-10-22 | 分类:脚本攻防

    在看《hack in the box》杂志时,看到一篇关于结合溢出方式扩展SQL注入攻击手法的文章,因此在博客标记下,作个记录。我以前提到过结合溢出来XSS的方法(http://bbs.pediy.com/showthread.php?t=124209),思路有点类似,只是一个用来XSS,一个SQL注入,实现上有所不同。

    当用普通语句注入时可能会遇到如下错误,此时就可以考虑使用溢出来实现sql注入(作者是在MySQL 5.0.92上测试的):

    下面是作者给出的注入语句,其中第三行的28开头漏掉%了:

    在文末,作者还给出一些绕过WAF的注入语句,方法都比较旧,但有时需要注入时可以回头看下,算作个记录:

  • 之前在milw0rm上公布了一个关于A Better Member-Based ASP Photo Gallery 的SQL注入漏洞:http://www.milw0rm.org/exploits/8012,之后官方对其进行修补了。如果你打开下面的地址:http://www.ontarioabandonedplaces.com/ipguardian/gallery/view.asp?entry=-1+union+select+0,title,2,creator,Longitude,5,pics+from+photos
    就会回显下面一句:

    You poor shithead, SQL injection is for kids.

    下面下载补丁代码分析:

    'this is used to delete images
    If Request.Form("btnDelete") = DeleteButtonLabel Then
    val = request.form("fval")
    else
    val = request.querystring("entry")
    val = replace(val, "+", "")           ' 将"+"替换为"",其实这样的过滤并不咋滴,因为我们可用其它符号代替空格,
    比如用注释符/**/或者20%来替代,这也是很常用的
    val = replace(val, "-", "")            ' 将"-"也替换为""
    val = left(val,4)                         ' 只取val左边四个字符,这招够狠的,直接限制了注入语句的长度
    end if
    'above gets either location id from whats passed in wiki string or
    ' from delete form bel
    ow

     Set objConn = Server.CreateObject("ADODB.Connection")
     objConn.Provider = "Microsoft.Jet.OLEDB.4.0"
     objconn.ConnectionString = "Data Source=" & Server.Mappath ("database\photodb.mdb")
     objconn.open
     strSQL = "SELECT * FROM photos WHERE ID = " & val     ' 将变量val带入SQL语句

     set objRS = objConn.Execute(strSQL)                           '执行SQL

    实际上,上面的SQL注入漏洞还是存在的,只是增加了利用的难度.把注入语句限制为4个字符.大家可以讨论一下,看有什么方法可突破这种限制!