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

一、基础知识

系统数据库

【27】WEB安全学习----SQL server注入_第1张图片

master数据库

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

model数据库

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

msdb数据库

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

tempdb数据库

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

系统视图

sys.databases:所有数据库名

【27】WEB安全学习----SQL server注入_第2张图片

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

【27】WEB安全学习----SQL server注入_第3张图片

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

【27】WEB安全学习----SQL server注入_第4张图片

sys.database_files:数据库数据文件

【27】WEB安全学习----SQL server注入_第5张图片

注释

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

常用全局变量

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

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

【27】WEB安全学习----SQL server注入_第6张图片

逻辑运算符

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
)

 

【27】WEB安全学习----SQL server注入_第7张图片

【27】WEB安全学习----SQL server注入_第8张图片

连接运算符

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

【27】WEB安全学习----SQL server注入_第9张图片

函数

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):返回数据表达式的数据的实际长度

【27】WEB安全学习----SQL server注入_第10张图片【27】WEB安全学习----SQL server注入_第11张图片

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

【27】WEB安全学习----SQL server注入_第12张图片

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

【27】WEB安全学习----SQL server注入_第13张图片

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

【27】WEB安全学习----SQL server注入_第14张图片

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

【27】WEB安全学习----SQL server注入_第15张图片

 

二、环境介绍

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

【27】WEB安全学习----SQL server注入_第16张图片【27】WEB安全学习----SQL server注入_第17张图片

PHP代码

"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']."
"; echo "code: ".$error[ 'code']."
"; echo "message: ".$error[ 'message']."
"; } 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); } ?>

【27】WEB安全学习----SQL server注入_第18张图片【27】WEB安全学习----SQL server注入_第19张图片

三、联合注入

判断注入

【27】WEB安全学习----SQL server注入_第20张图片【27】WEB安全学习----SQL server注入_第21张图片

【27】WEB安全学习----SQL server注入_第22张图片

判断字段数

【27】WEB安全学习----SQL server注入_第23张图片【27】WEB安全学习----SQL server注入_第24张图片

进行联合查询

【27】WEB安全学习----SQL server注入_第25张图片

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

【27】WEB安全学习----SQL server注入_第26张图片

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

【27】WEB安全学习----SQL server注入_第27张图片

查询所有数据库

【27】WEB安全学习----SQL server注入_第28张图片

【27】WEB安全学习----SQL server注入_第29张图片

查看当前数据库中所有表

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

查询字段值

【27】WEB安全学习----SQL server注入_第30张图片

报错注入

修改PHP代码

"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']."
"; echo "code: ".$error[ 'code']."
"; echo "message: ".$error[ 'message']."
"; } 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); } ?>

报错注入查询版本信息

【27】WEB安全学习----SQL server注入_第31张图片

报错查询数据库

【27】WEB安全学习----SQL server注入_第32张图片

【27】WEB安全学习----SQL server注入_第33张图片

布尔盲注

修改PHP代码

"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']."
"; //echo "code: ".$error[ 'code']."
"; //echo "message: ".$error[ 'message']."
"; } 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); } ?>

【27】WEB安全学习----SQL server注入_第34张图片

【27】WEB安全学习----SQL server注入_第35张图片

时间盲注

修改PHP代码

"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']."
"; //echo "code: ".$error[ 'code']."
"; //echo "message: ".$error[ 'message']."
"; } 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); } ?>

时间盲注

【27】WEB安全学习----SQL server注入_第36张图片

【27】WEB安全学习----SQL server注入_第37张图片

你可能感兴趣的:(WEB安全学习笔记)