通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 原创精华 >> 文章正文
推荐:SQL注射原理超浓缩简单篇
责任编辑:古典辣M°   更新日期:2005-10-31
 

这是SQL注射原理的讲解。

通过暴库,下载数据库,阿剑剑对数据库也有了些感性的认识。可是,并不是所有时候我们都可以得到别人的数据库并打开来看的。听说有门技术叫SQL注射,不用下载数据库,也可以得到数据库中的信息。于是阿剑剑嚷嚷着要学它。
欠钱:“SQL注射是一门比较有难度的技术,因为要了解它和熟练它需要有ASP和数据库的基础。你认为自己有资格学习它吗?”
阿剑剑想了一下:“这些基础我是一点都没有啊,可是不是听说市面上有很多SQL注射的傻瓜工具吗?你教会我使用这些工具不就可以了?”
欠钱:“既然如此,那好吧,我首先把SQL最基本的语法告诉你,这样你才好理解那些SQL注射工具上的术语和使用步骤。”
阿剑剑:“欠钱你真是太好了,感动ing!不过,不会很难吧?”
“当然不难了!”欠钱拍着胸脯。
一个数据库一般都包含有若干张表,如同我们前面暴出的数据库中admin表包含有管理员信息,而user表则包含有所有的论坛用户信息一样。以下面这张表为例:
Dv_User

UserID     UserName     UserPassword     UserEmail     UserPost
1     admin     469e80d32c0559f8     eway@aspsky.net     0
2     Test     965eb72c92a549dd     1@2.com     0


这是DVBBS 7.0的数据库中所有用户资料的表,Dv_User 是表名。每一行代表一个用户,每一列是该用户的某种属性。我们最感兴趣的自然是用户名与密码这样的属性了。
SQL是一种用于操作数据库的规范化语言,不同的数据库(MSSQL、MYSQL、ORACLE……)大体上都是一样的。比如我们要查询数据库中的信息:
select UserName,UserPassword from Dv_User where UserID=1;
这就是一个最典型的SQL查询语句,它的意思是,在Dv_User这张表中,将UserID为1的用户名与密码查询出来。
得到的结果是:admin     469e80d32c0559f8
SELECT语句语法:
SELECT [列名],[列名2]…… FROM [表名] WHERE [限制条件]
例:
SELECT * FROM Dv_User where UserID=1
表示查询UserID为1的所有信息。
更新:
UPDATE [表名] SET [列名]=新值 WHERE [限制条件]
例:
UPDATE Dv_User set [UserPassword]=’ 965eb72c92a549dd’ WHERE UserName=’admin’
此语句将把Dv_User表中的UserName为admin的那一行中UserPassword的值改为965eb72c92a549dd。
删除:
DELETE FROM [表名] WHERE [限制条件]
例:
DELETE FROM Dv_User WHERE UserName=’test’
将用户名为test的那一行从Dv_User表中删除

二、SQL注射漏洞简述
阿剑剑仔细把上面四个SQL语句读了几遍,发现非常的容易,于是虚心请教欠钱:“SQL语法看起来很容易上手嘛,那SQL漏洞是怎么来的呢?”
欠钱打开一个页面,指着里面的代码:
if id<>"" then
sql="SELECT * FROM [日记] WHERE id="&id
rs.Open sql,Conn,1
阿剑剑看了一眼:“哎呀,头晕了!”
欠钱敲了他一下:“关于漏洞的成因我只讲这一次,如果怕难就不知道漏洞的由来了,而且实际上一点也不难的,看好了,我们这段代码是提取自BBSXP论坛的,经过我改动以后,把它做成了一个有漏洞的页面给你讲述SQL漏洞的原理。”
那张日记的表内容如下:
日记
id     username     title     content     adddate
1     职业欠钱     今天安装了BBSXP     这是5.16版,发现BBSXP体积虽小,可是功能一点也不少.完全够用,不知道安全性怎么样     2005-10-25
2     职业欠钱     再写一个日志吧     多写几个日志看看,玩玩,呵呵,反正这个论坛也只有我一个人在.. 555555555好寂寞     2005-10-25
我们访问http://localhost/bbsxp/blog.asp?id=1

的时候结果如图1。

阿剑剑:“我明白了,访问blog.asp的时候,我们提交的参数id为1,那么放到SQL语句里就变成了:
SELECT * FROM [日记] WHERE id=1
所以就得到我们看到的那个页面,对吗?”
欠钱:“很好!正是如此!SQL漏洞的起源就从这里开始了!注意到了吗?id的值是由我们提交的,但是它却没有做任何的检查,也就是我们提交的id可以是任意字符串。假设我们提交一个单引号的话,SQL语句就会因为id=1’ 而出错”
“等等,为什么加单引号会出错呢?”
“因为单引号在SQL语句里有特殊的含义,它只能以’abc’这样的方式出现,表示abc为一个字符串,如果只出现一个单引号,整个句子肯定会出错了。”
“哦,那单引号和SQL注射有什么关系呢?”
“关系很密切,一般来说,常见的SQL语句有这么几种:
SELECT * FROM [表] WHERE id=12                   这是数字型,12由我们提交
SELECT * FROM [表] WHERE name=’admin’         这是字符型,admin由我们提交
SELECT * FROM [表] WHERE key like ‘%word%’     这是搜索型,word由我们提交
我们以第一种情况为例,假设我们提交 id=12 and 1=1,那么完整的SQL语句为:
SELECT * FROM [表] WHERE id=12 and 1=1
它并不出错,但是如果我们提交改为1=2,也就是
SELECT * FROM [表] WHERE id=12 and 1=2
此时注意到WHERE后面的条件,它要求存在一条记录,必须满足id=12,同时还要求1=2,由于1=2永远不成立,于是这个SQL语句尽管语法上没错误,可是搜索的结果却一定为空。于是将提示我们找不到记录。如图2。”

阿剑剑想了一下:“这么说,为了不让SQL语句出错,那么我们在字符型SQL语句中,要提交的变量就应该是
admin’ and ‘1’=’1
然后补到完整的SQL语句中,就是
SELECT * FROM [表] WHERE name=’admin’ and ‘1’=’1’
而字符型则是
word%’ and ‘%’=’
补充到完整的SQL语句为:
SELECT * FROM [表] WHERE key like ‘%word%’ and ‘%’=’%’

欠钱:“完全正确!这正是我们判断注射类型的方法!”
阿剑剑:“那我们怎么才能够得到数据库中的信息呢?”
欠钱:“最直接的方法自然是猜了,我们在提交的数据里加入一些其他的判断语句来代替and 1=1这样的条件。以数字型SQL查询语句为例,我们提交一个id的值如下:
id=1 and exists (select * from admin)
还原到完整的SQL语句中:
SELECT * FROM [表] WHERE id=1 and exists (select * from admin)
如果存在admin这张表的话,那么这个SQL语句将按原样返回,否则将返回空值。到blog.asp中去实验一下就知道了。如图3。”

阿剑剑:“提示不存在这张表,然后我就要再学习很多的SQL语句去猜测接下来的数据吗?”
欠钱:“呵呵,确实更改这个SQL语句我们就可以慢慢猜出数据库里的内容。首先猜一个数据库里有哪些表,然后逐个猜解这些表中有哪些列(以后称为字段),最后猜解个表中的具体内容。记住这个流程后,我们不打算深入下去了,因为我们已经有非常多的注射辅助工具了,这些工具会帮我们完成这些工作。”
“嗯,也好,至少我大致上知道了SQL注射是怎么样一个漏洞,具体的东西要靠我以后自学ASP和数据库才能提高吧,现在你就教我用那些工具吧,我已经迫不及待了!”

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章REAL蛀虫利用播放器漏洞下载恶意程序
    普通文章李彦宏:中国要在互联网领域逐渐超越美国
    普通文章马云:阿里巴巴的成功是一个生态链的成功
    普通文章Ingres用户认证非授权访问漏洞
    普通文章TCPreen FD_SET()函数远程栈溢出漏洞
    普通文章Winace UUE文件解压堆溢出漏洞
    普通文章Pclxav木马猎手第一代特征码引擎源代码
    普通文章IE收藏夹管理小精灵算法分析
    普通文章Extra Drive Pro算法分析历程
    普通文章雨过天晴自我注册
    精彩专题