一、基础知识
系统数据库
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);
}
?>
时间盲注