当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL注入奇致胜 Union查询轻松看电影

MSSQL
使用SQL Server数据库嵌套子查询的方法
SQL Server SQL Agent服务使用教程小结
五种提高 SQL 性能的方法
非常不错的SQL语句学习手册实例版
SQL语言查询基础:连接查询 联合查询 代码
SQL SERVER的优化建议与方法
简单的SQL Server备份脚本代码
sql基本函数大全
SQL查询语句精华使用简要
数据库分页存储过程代码
SQL查询连续号码段的巧妙解法
sql server中千万数量级分页存储过程代码
sql2000各个版本区别总结
如何远程连接SQL Server数据库图文教程
一个SQL语句获得某人参与的帖子及在该帖得分总和
通用分页存储过程,源码共享,大家共同完善
SQL查找某一条记录的方法
使用 GUID 值来作为数据库行标识讲解
非常详细的SQL--JOIN之完全用法
收缩后对数据库的使用有影响吗?

MSSQL 中的 SQL注入奇致胜 Union查询轻松看电影


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 70 ::
收藏到网摘: n/a

周末无聊,同学想让我帮他下载一些电影看,我爽快的答应了。看了这么多期X档案,水平自然长进不少。这次想免费下载些电影,没问题(我知道N多电影程序有漏洞)。闲话少说,切入正题。

  我打开Google,随便搜索了一下电影网站,点开了一个。看了一下界面,知道和电影系统关联很大。系统和"洞"网(7.0安全多啦,自己想的)差不多,也是有N多漏洞,比如注入啊,COOKIE欺骗什么的。我就在X档案03年11期看过一篇文章,写的是用ASC和MID函数对系统管理员帐户进行猜测。我也想用这种方法猜测,猜了半天都没猜对,真烦人,同学还在那边等我哪,这不是很丢人。我决定找个简单的办法,还是读读源码吧!

  下载了一个电影系统,看了一下,这么多个文件,头马上大了。还是在自己电脑上运行一下吧。注册了一个用户,点了一下找回密码,别人说这里有漏洞。看了一下,象是有漏洞的界面,有三个参数,还直接把密码显示出来。好,看一下源码。

39        <% if request("myuserid")="" then %>
...
58   <%else
set rs=server.createobject("adodb.recordset"
sql="select password from users where
 userid='"&request("myuserid")&"'and city='"&
request("ask")&"'and adress='"&request("answer")&"'"
rs.open sql,conn,1,1if rs.eof and rs.bof then%>

  这里果然没过滤。好多人都想到了可以用上面的方法注入了。能不能有更简单的方法呢?

  我仔细考虑语句的形式如下:

select password from users where userid=‘‘ and city=‘‘ and adress='‘

  如果用户名,密码提示问题(city),密码提示答案(adress)和表users一行匹配,便打印这行的password,而且是明文的。我想的过程就不写了,后来我想到了一种方法,就是利用union查询。Access功能是很弱的,不能执行命令,不能导出文本,还不能注释。有个子查询可以利用之外,也就剩下这个 union了。

  怎么利用呢?先在本机做实验。测试过程简略,直接写有所收获的结果。要是知道了一个该网站的一个用户名(比如abc),可以这样利用。在"你注册问题"处填: abc' or ‘1=1(如果用户名是bcd,就变为bcd' or ‘1=1)密码提示问题处随便填几个字母或数字,最好别有符号,容易影响结果: 比如字母a密码提示答案处随便填几个字母或数字,填个a回车后就看到该用户的密码了,简单吧(如图一)。其实这样一来,上面的语句就变为:

select password from users
where userid=‘abc'  or  ‘1=1‘ and city=‘a‘ and adress='a‘

  呵呵,程序无条件的执行了,因为被 or ‘1=1'跳过后面的验证了。可是网站用户名也不是轻易得到的啊。别急,得到用户名一样简单。如下:在"你注册问题"处随便处填几个字母或数字,最好别有符号,容易影响结果: 比如字母a密码提示问题处和上面一样,随便填:我也填个a关键是在密码提示答案:我填的是a' union select userid from users where oklook>=3 or '0上面就是要找黄金用户的帐户名,看到用户名后再用前面的方法找到密码。可以在where后面加很多参数并赋不同的值可