生活随笔
收集整理的這篇文章主要介紹了
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 tablenamewhere 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 'hello';}else { 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 ) { } exit;}else {$row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC); if($row==NULL){ echo 'Empty record null';}else { 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 ) { } exit;}else {$row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC); if($row==NULL){ echo 'hello';}else { echo 'hello';}}sqlsrv_free_stmt($query);}?>
時間盲注
總結
以上是生活随笔為你收集整理的SQL server注入的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。