别了,注入~

本文猫七博客首发,原文地址 http://www.miaoqiyuan.cn/p/bye-sql-bug
03-05年,我一度沉迷于拿站,收藏了一大堆注入工具。当时自己比较菜,一直都不得要领,觉得猜表名什么的好神奇。。。为了纪念那些日志,我写一个猜表名的教程。先把原理说一下。
如果单是看表名,可能永远也不会看懂,实际所有类型的数据库(如:access,mssql)都有一些隐藏的系统表来保存表格信息。猜表名的核心就在这里。
比如以下的例子:

< %
id=request("id")
set rs=conn.execute("select * from news where id="&id)
....
%>

访问test.asp?id=1则显示第一篇文章。单是没有任何的过滤,如果提交的是 test.asp?id=1 and (select count(name) from msysobjects where type=1 and left(name,1)=’n’)呢?

select * from news where id=1 and (select count(name) from msysobjects where type=1 and left(name,1)='n')

如果没有找到相关记录,说明没有表,正常显示呢?当然说明有记录哦,然后left(name,2)=’ne’;..用不了多大的功夫,数据库的所有表就都出来了哦。原理就是这么简单。。。。

刚看到网友小秦的留言,ASP访问Access数据库,确实没有读取的权限,看来Access猜表名只能靠运气了~,我当时只在Access里的查询的时候测试通过,忘了权限的问题。MSSQL猜表名有效

3 thoughts on “别了,注入~

  1. 小秦

    你有做过测试吗???
    你发这样的文章是会误导大家的明白不?
    ASP的SQL查询语句是没有权限访问 msysobjects 这个表的,
    如果你过一下测试,你的ASP就会告诉你

    错误描述: [Microsoft][ODBC Microsoft Access Driver] 不能读取记录;在 ‘msysobjects’ 上没有读取数据权限。

  2. mqycn 文章作者

    @小秦
    Access我只在查询里测试了,果然有问题。不过MSSQL是可以成功的。猜Access表只能靠运气了,如果你有好的方法,不妨分享下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据