【27】WEB安全学习----SQL server注入

一、基础知识

系统数据库

master数据库

master是SQL server最重要的数据库,是整个数据库的核心,用户不能直接修改。里面数据库包括用户的登陆信息、用户所在的组、所有系统的配置选项、服务器中本地数据库的名称和信息、初始化方式等。

model数据库

是SQL server创建数据库的模板,任何对model数据库中数据的修改都将影响所有使用模板创建的数据库。

msdb数据库

提供SQL server Agent工作的信息,SQL server Agent是SQL server中的一个Windows服务,该服务用来运行制定的计划任务。

tempdb数据库

是一个临时数据库,存在临时对象或中间结果。SQL server关闭后,该数据库将被清空。

系统视图

sys.databases:所有数据库名

INFORMATION_SCHEMA.TABLES:当前数据库中的表

INFORMATION_SCHEMA.COLUMNS:当前数据库中的列

sys.database_files:数据库数据文件

注释

T-SQL语句的注释有两种:/**/和--,和oracle一样。

常用全局变量

@@SERVERNAME:返回运行 SQL Server 的本地服务器的名称。

@@VERSION:返回当前的 SQL Server 安装的版本、处理器体系结构、生成日期和操作系统。

逻辑运算符

ALL:如果一组的比较都为True,那么为True

AND:如果两个布尔表达式都为True,则为True

ANY:如果一组的比较中任何一个为True,则为True

BETWEEN:如果操作数在某个范围内,那么为True

IN:如果操作数等于表达式列表之一,那么为True

LIKE:如果操作数与一种模式相匹配,则为True

NOT:对任何其他布尔运算的值取反

OR:如果两个布尔表达式中的一个为True,则为True

SOME:如果在一组比较中,有些为True,则为True

TOP

在SQL server中,没有MySQL中的LIMIT控制符,若要实现limit控制符功能则可以用top进行代替

select top (n-m+1) id from tablename
where id not in (
select top m-1 id from tablename
)

 

连接运算符

+号是字符串串联运算符:'aaa'+'bbb'='aaabbb'

函数

ASCII()、CHAR()、LEFT(str,i)、RIGHT(str,i)、LEN(str)、SUBSTRING(str,i,n)

STR(i):将数值转换到字符数据

类型转换:

CAST(x AS type) :将一个类型转换到另一个类型   CAST(10 AS CHAR(3))

系统函数:

COL_LENGTH(table,column):返回表中指定字段的长度值

COL_NAME(table_id,column_id):返回表中指定字段的名称

DATALENGTH(exp):返回数据表达式的数据的实际长度

DB_NAME(database_id):返回当前数据库的名称

HOST_NAME():返回服务器计算机的名称

SUSER_SNAME():返回当前用户的登录名

USER_NAME():返回数据库用户名

 

二、环境介绍

test数据库下users表,Flag数据库下flag_table表

PHP代码

<?php
  if(isset($_GET['id'])){
    $serverName = "192.168.234.131";
    $connectionInfo = array("UID"=>"sa","PWD"=>"admin","Database"=>"test");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if(!$conn){
      die(sqlsrv_errors());
    }
    $id=$_GET['id'];
    $sql="SELECT username,passwd FROM users WHERE id='{$id}'";
    $query=sqlsrv_query($conn,$sql);
    if($query === false){
      $errors=sqlsrv_errors();
      foreach( $errors as $error ) {
        echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
        echo "code: ".$error[ 'code']."<br />";
        echo "message: ".$error[ 'message']."<br />";
    }
    exit;
    }else {
      $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
      if($row==NULL){
        echo 'Empty record null';
      }else {
        echo "User:{$row['username']},PassWord:{$row['passwd']}";
      }
    }
    sqlsrv_free_stmt($query);
  }
?>

三、联合注入

判断注入

判断字段数

进行联合查询

查看数据库版本信息和服务器名

查看当前数据库名及当前用户

查询所有数据库

查看当前数据库中所有表

查询当前数据中users表中的字段

查询字段值

报错注入

修改PHP代码

<?php
  if(isset($_GET['id'])){
    $serverName = "192.168.234.131";
    $connectionInfo = array("UID"=>"sa","PWD"=>"admin520","Database"=>"test");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if(!$conn){
      die(sqlsrv_errors());
    }
    $id=$_GET['id'];
    $sql="SELECT username,passwd FROM users WHERE id='{$id}'";
    $query=sqlsrv_query($conn,$sql);
    if($query === false){
      $errors=sqlsrv_errors();
      foreach( $errors as $error ) {
        echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
        echo "code: ".$error[ 'code']."<br />";
        echo "message: ".$error[ 'message']."<br />";
    }
    exit;
    }else {
      $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
      if($row==NULL){
        //echo 'Empty record null';
        echo 'hello';
      }else {
        //echo "User:{$row['username']},PassWord:{$row['passwd']}";
        echo 'hello';
      }
    }
    sqlsrv_free_stmt($query);
  }
?>

报错注入查询版本信息

报错查询数据库

布尔盲注

修改PHP代码

<?php
  if(isset($_GET['id'])){
    $serverName = "192.168.234.131";
    $connectionInfo = array("UID"=>"sa","PWD"=>"admin520","Database"=>"test");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if(!$conn){
      die(sqlsrv_errors());
    }
    $id=$_GET['id'];
    $sql="SELECT username,passwd FROM users WHERE id='{$id}'";
    $query=sqlsrv_query($conn,$sql);
    if($query === false){
      $errors=sqlsrv_errors();
      foreach( $errors as $error ) {
        //echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
        //echo "code: ".$error[ 'code']."<br />";
        //echo "message: ".$error[ 'message']."<br />";
    }
    exit;
    }else {
      $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
      if($row==NULL){
        echo 'Empty record null';
      }else {
        //echo "User:{$row['username']},PassWord:{$row['passwd']}";
        echo 'hello';
      }
    }
    sqlsrv_free_stmt($query);
  }
?>



时间盲注

修改PHP代码

<?php
  if(isset($_GET['id'])){
    $serverName = "192.168.234.131";
    $connectionInfo = array("UID"=>"sa","PWD"=>"admin520","Database"=>"test");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if(!$conn){
      die(sqlsrv_errors());
    }
    $id=$_GET['id'];
    $sql="SELECT username,passwd FROM users WHERE id='{$id}'";
    $query=sqlsrv_query($conn,$sql);
    if($query === false){
      $errors=sqlsrv_errors();
      foreach( $errors as $error ) {
        //echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
        //echo "code: ".$error[ 'code']."<br />";
        //echo "message: ".$error[ 'message']."<br />";
    }
    exit;
    }else {
      $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
      if($row==NULL){
        echo 'hello';
      }else {
        //echo "User:{$row['username']},PassWord:{$row['passwd']}";
        echo 'hello';
      }
    }
    sqlsrv_free_stmt($query);
  }
?>

时间盲注

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值