簡單的SQL注入學習


引貼:

http://blog.163.com/lucia_gagaga/blog/static/26476801920168184648754/

首先需要編寫一個php頁面,講php頁面放入/opt/lampp/htdocs目錄下:

解釋一下這個頁面:

1.通過if語句判斷變量是否初始化

2.if語句中通過mysql_connect()函數連接數據庫

3.連接數據庫成功后,選擇一個數據庫

4.選擇完數據庫后執行一條mysql查詢

5.進行查詢結果的處理

6.使用echo講查詢結果輸出,便於查看

 

接下來配置數據庫mululu_testdb,創建users表,並且造數據

然后使用 sql 語句取到指定的記錄 參數從瀏覽器傳入
取到的記錄顯示在指定的位置 效果就醬紫:

先來看看 and 注入和 or 注入:

再來看看加法注入和減法注入:

以上就是最簡單的 SQL 注入示例;
通過傳入人為構造的參數 取得本來拿不到的數據;

 

如果要攻擊數據庫 最起碼要知道被攻擊的是什么數據庫 
首先從 Web 應用技術上就可以獲得一些線索:
如果是使用 ASP 或者 .NET 開發的系統 數據庫就可能是 SQLServer
如果是使用 PHP 開發的系統 數據庫就可能是 MySQL 或者 PostgreSQL
而如果是使用 Java 開發的系統 它掛的數據庫就可能是 Oracle 或者 MySQL

除了 Web 應用之外 底層操作系統也可以提供線索:
比如安裝 IIS 作為服務器平台 則后台數據庫就可能是 SQL Server
而允許 Apache 和 PHP 的 Linux 服務器 就可能使用 MySQL 或者 PostgreSQL

另外還可以借助錯誤信息來判斷數據庫類型
因為報錯中有可能直接顯示數據庫的類型:

 

為了獲知某個表里面存在多少個字段 可以注入 order by 子句:

 

還可以通過 union 語句注入的方式 獲得數據庫的用戶名和版本:

 

然后就可以通過注入語句 獲得所有的數據庫的名字:
select * from users where id = 1 union select null,schema_name,null from information_schema.schemata 

 

上圖所示 服務器上所有的數據庫就這樣暴露出來 。。。

有了數據庫的名字 還可以進一步獲取表的名字:
select * from users where id = 1 union select null,table_name,null from information_schema.tables where table_schema='bugfree' 

有了表名字 獲取字段名字也很容易:
select * from users where id = 1 union select null,column_name,null from information_schema.columns where table_name='bf_bug_info' and table_schema = 'bugfree' 

 

至此 我們已經利用 SQL 注入的方式 獲得了太多信息
然鵝 我們甚至還可以獲得更多 

在掌握數據庫連接密碼的情況下 我們來查詢一下 mysql.user 表:

那么如果沒有密碼呢 通過注入的方式 也可以獲得這些數據:
select * from users where id = 1 union select Host,user,password from mysql.user 

以上展示的就是最為基礎的 SQL 注入的實現形式了

假設 SQL 語句是 INSERT into 表名 values ('X',X,X); 

那么就往數據庫插入了非法數據了。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM