SQL注入之SQLmap入門

來源:互聯網
上載者:User

標籤:安裝   應用   興趣   station   資訊   pass   指定   欄位   har   

http://www.freebuf.com/articles/web/29942.html

 

簡介

    許多現實中對於網站的攻擊往往是由於網站沒有及時更新或者對於使用者的輸入沒有進行檢查。從緩衝區溢位說起,這樣一種針對系統脆弱性的威脅,最根本的問題還是在於對於使用者的輸入沒有進行檢查。作為主要威脅之一的SQL注入帶來了人們對於其應用和資料庫的擔憂。這個問題的出現有十年的時間了,但是現在仍舊在許多網站中出現。SQL注入就像許多當前主要的的web應用安全攻擊問題也被劃歸在了對於使用者輸入的檢查上。

本文

    許多web開發人員並不知道SQL語句能夠被自訂(handle)並且假定SQL語句是一個讓人信任的命令。這就讓SQL語句能夠繞過存取控制機制(access control),因此跳過標準的授權和認證檢查。甚至有些時候SQL語句能夠允許使用伺服器作業系統上的命令列的許可權。

    直接的SQL注入命令是一種方法,它被攻擊者構造或者是修改現成的SQL命令來暴露出隱藏的資料或者是覆蓋掉有價值的資料,甚至在伺服器上執行危險地系統指令

入門

結構化的語言是資料庫的標準聲明語言。這讓(語言)變的更加簡潔並且更便於使用。SQL起源於70年代的IBM實驗室。SQL被用來讓應用程式與資料庫之間進行通訊。

SQL使用如下的4種語言來對資料庫進行操作

SELECT -從資料庫中獲得一條記錄

INSERT-向資料庫中插入一條記錄

DELETE-從資料庫中刪除一條記錄

UPDATE-從資料庫中更新或者改變目前記錄

當使用者提交的語句被用作資料庫的查詢語句時SQL就能夠發生。比如當使用者被網站認證授權,使用者發送一個帶有"使用者名稱"和"密碼"的資訊,使用者名稱/密碼就與存放在資料庫中的內容進行核對。如果相同的話使用者就被允許登入,否則使用者登入失敗。以下是一個在後台進行登入的例子。

代碼
SELECT * FROM user WHERE username=‘$username‘ AND password=‘$password‘

這個語句簡單地指明了從user的表中查詢使用者名稱和username相等的,並且密碼和password相等的。所以,如果使用者發送使用者名稱為"admin",並且密碼為"12345",那麼SQL語句被建立如下:

SELECT * FROM user WHERE username=‘admin‘ AND password =‘12345‘
注入

那麼,如果使用者輸入‘ or ‘1‘=‘1,第一個引號會終止輸入的字串,剩下的會被當做SQL語句,並且在SQL語句中1=1恒為真,這就能夠讓我們繞過註冊機制

SELECT * FROM user WHERE username=‘admin‘ AND password =‘‘or ‘1‘=‘1‘ -TRUE

上述是一個SQL注入的簡單地例子,然而在實際過程中,SQL注入比這要複雜的多。在我們的滲透測試中,大多數時候我們有一個非常緊湊的計劃表,所以這個時候我們需要一個自動化的攻擊來為我們進行注入攻擊。

SQLMAP就是一能夠利用(系統)脆弱性的工具。它是開源的,並經常被用來在Python寫的脆弱的DBMS上進行入侵的滲透測試。它能夠檢測並利用SQL上的漏洞,讓我們舉例在作業系統和資料庫上使用sqlmap.py。

一步一步

我將儘可能地以最簡潔的方式展示出來。

最常見的檢測SQL注入的方法是通過在輸入處添加一個單引號(')並且期待(系統)返回一個錯誤,有些應用程式並不會返回錯誤。這個時候我們就會利用true/false語句來檢查是否這個應用程式會受到SQL注入的攻擊。

為了隨機的找到還有SQL注入的脆弱性的網站,你能夠使用如下格式的語句利用google dork:inurl:news.php id =1?將會出現一堆google dork的資料並且為你過濾你搜尋得到的結果提供了可能。那麼讓那個我們開始吧。

首先在backtrack上進入目錄:

cd /pentest/database/sqlmap

我們不會立即開始,查看sqlmap.py的菜單使用命令:

./sqlmap.py -h

讓我們運行sqlmap.py, 參數是[ --dbs],來發現DBMS中的所有資料庫

或者是使用參數 –current-db來發現當前目標使用的資料庫

參數-D表示目標的資料庫,–table顯示表列

我們將會檢查在資訊中是否包含感興趣的內容(admin_users),並把它們按列顯示出來,參數是-columns

在你列出表格之前每次指定目標資料庫(使用-D參數)是很重要的,因為如果沒有-D參數,程式將列出資料庫中所有的表格

-T =目標參數

-C=目標列(可以指定超過一列,如:使用者名稱(列),密碼(列))

–dump=獲得,提取資料

使用–proxy參數來使用代理

例如:./sqlmap.py –url "http://testphp.vulnweb.com/listproducts.php?cat=1" –dbs –proxy=http://183.223.10.108:80

我認為以上是對於初學者的基礎的命令。sqlmap同樣提供許多有趣的功能,我建議使用–prefix=PREFIX,–postfix=POSTFIX和takeover選項。更多關於該工具的使用可以訪問官方網站。

–dump是用來提取網站上的資料,調用時必須選中列,並且你必須明確從列中具體提取什麼內容,這裡我提取列中儲存的登入和密碼資訊。

通常,DBMS的"password"欄位是加密的。通常使用的密碼編譯演算法是SHA-1,MD5,這些演算法在使用時並沒有加入"salt"(指根據使用者的輸入直接進行演算法計算),這就使得破解更加容易。那麼(拿到加密的資料後)我們就需要對其進行解密,我們能夠使用許多線上解密網站如:

http://www.md5decrypt.org,https://crackstation.net/,http://www.onlinehashcrack.com/

或者嘗試手工暴力破解和彩虹表。此外你還能夠使用你的GPU來加快(破解)的過程,這就不是本文所要主要討論的內容了。

進階

幸運的是,sqlmap有一些非常好的指令碼,在如下的地址中你能夠發現它們。使用svn檢查

https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev

事實上,指令碼的作用是修改我們發出的請求來防止其被WAF(網路應用防火牆)攔截。在某些情況你可能需要把一些指令碼合并到一起才能過WAF。指令碼的完整列表訪問如下:

https://svn.sqlmap.org/sqlmap/trunk/sqlmap/tamper/

許多企業經常忽視當前(DBMS)的脆弱性而依賴於網路防火牆。不幸的是,經過簡單地代碼編碼就能繞過大部分防火牆。所以先生們,我想展示一下如何利用一些新功能來繞過WAF/IDF(入侵偵測系統)。

我將展示一些重要的指令碼如charencode.py和charcodeencode.py來與MySQL進行操作,這些指令碼能夠在backtrack5的
/pentest/web/scanners/sqlmap下面找到。

Hands-on:在你使用這些指令碼的時候,使用–tamper參數後面跟指令碼名字,在中我們使用了charencode命令

charencode.py總結

簡單的說,這個指令碼能夠繞過一些比較簡單的網路防火牆(WAF).. 其它的比較有趣的功能是(WAF)在匹配它們的規則之前會對url進行解碼。

例:

另一個好的指令碼是charunicodeencode.py,在我的實際滲透測試過程中,它協助我繞過了許多防火牆的限制。

嘿,我只是展示了一小部分指令碼,我強烈建議你將每個都使用一遍,因為它們往往適用於不同的環境。

注意:這並不是指令碼小子的做法,負責地,熟練地掌握這樣一個強大的工具是非常重要的

匿名

我將想你展示怎麼樣使用sqlmap和Onion路由器來保護你的IP,DNS等等,在linux中,在終端命令符為$時使用
sudo apt-get install tor tor-geoip

進入sqlmap的目錄後:./sqlmap.py -u "http://www.targetvuln.com/index/php?cata_id=1" -b -a -tor –check-tor–user-agent="Mozilla/5.0(compatible;Googlebot/2.1;+http://www.google.com/bot.html)"

參數–tor使用Tor,–check-tor會檢查Tor是否被正確地使用,如果沒有正確被使用,終端會提示錯誤資訊。使用者代理程式是googlebot,所有你的請求會被看起來像是Googlebot發出的一樣。

利用sqlmap的Tor我們能夠設定你的TOR代理來隱藏實際請求產生的地址

-tor-port,-tor-type:這兩個參數能夠幫你手動設定TOR代理,–check-tor參數會檢查你的代理是否被正確地安裝並正常的工作。

結語

當SQL注入在幾年前被發現時,許多目標都存在這樣的缺陷,注入的格式就是其中最難的部分。滲透測試者往往需要自己構造這樣的SQL語句。

接下來的發展就產生了自動注入的工具。當前最知名的工具可能就是sqlmap.py。SQLMAP是用python寫的開源的測試架構,支援MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP,MAXDB並支援6中SQL注入手段。

解決方案
1.定期檢查SQL伺服器(的處理請求)2.限制動態SQL語句3.避免從使用者直接獲得資料4.將資料庫的許可權資訊單獨存放在另外一個檔案中5.使用最小許可權原則6.使用預先準備好的(SQL)語句

在此非常感謝我的哥哥Rafay Baloch和RHA的同仁們。

SQL注入之SQLmap入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.