20169221 2016——2017《網絡攻防》SQL注入

準備知識

1.SQL語言
結構化查詢語言(Structured Query Language)簡稱SQL:是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統;同時也是數據庫腳本文件的擴展名。
2.SQL注入
SQL注入:SQL注入能使攻擊者繞過認證機制,徹底控制遠程服務器上的數據庫。SQL是結構化查詢語言的簡稱,它是訪問數據庫的事實標準。目前,大多數Web應用都使用SQL數據庫來存放應用程序的數據。幾乎全部的Web應用在後臺都使用某種SQL數據庫。跟大多數語言同樣,SQL語法容許數據庫命令和用戶數據混雜在一塊兒的。若是開發人員不細心的話,用戶數據就有可能被解釋成命令,這樣的話,遠程用戶就不只能向Web應用輸入數據,並且還能夠在數據庫上執行任意命令了。
3.SQL注入危害
1)非法讀取、篡改、添加、刪除數據庫中的數據。
2)盜取用戶的各種敏感信息,獲取利益。
3)經過修改數據庫來修改網頁上的內容。
4)私自添加或刪除帳號。
5)注入木馬等等。php

環境搭建

1.啓動mysql:sudo mysqld_safe
2.啓動Apachesudo service apache2 start
3.配置DNS:sudo vim /etc/hosts

4.配置網站文件:sudo vim /etc/apache2/conf.d/lab.conf

5.輸入 sudo service apache2 restart 重啓服務
6.關閉php配置策略:sudo vim /etc/php5/apache2/php.inimysql

  1. 把magic_quotes_gpc=On 改成 magic_quotes_gpc = Off

實驗內容

1.lab1 select語句的sql注入
訪問:www.sqllabcollabtive.com;當咱們知道用戶而不知道到密碼的時候,能夠怎麼登錄?
查看登錄驗證文件:·sudo vim /var/www/SQL/Collabtive/include/class.user.php·
修改第375行
重啓一下
在$user後面加上) # 這樣就會只驗證用戶名,後面的會被#註釋
web

2.lab2 update語句的sql注入
Collabtive平臺中能夠更新用戶信息,咱們要實現經過本身的用戶去修改別人的用戶信息
訪問用戶編輯連接:http://www.sqllabcollabtive.com/manageuser.php?action=editform&id=1
在Collabtive web應用程序中,若是用戶想更新他們的我的資料,他們能夠去個人賬戶,單擊編輯連接,而後填寫表格以更新資料信息。在用戶發送更新請求到服務器,一個UPDATE SQL語句將建造在include/class.user.php。這句話的目的是修改用戶表中的當前用戶的配置信息。有一個在這個SQL語句中的SQL注入漏洞;sudo vim /var/www/SQL/Collabtive/include/class.user.php
咱們會發現​sql語句爲:SELECT ID WHERE name=​'$user',而且company的位置是存在注入漏洞,原理同lab1。這樣咱們就能夠越權來修改其餘用戶的信息及密碼;咱們使用任意用戶,如: bob bob 進行登陸;在編輯用戶的位置:user 填 ted 用戶;
Company 處填:sql

', pass = '9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684' WHERE ID = 4 # '
注:這裏的 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 就是pass的md5值;

修改後退出當前用戶,使用ted用戶登陸,這個時候ted用戶的密碼就是pass。
數據庫

防護策略

1.SQL注入漏洞的根本問題是數據與代碼的分離失敗,所以咱們能夠針對這個緣由進行防護
2.防護轉義特殊字符使用,默認開啓magic_quotes_gpc,將magic_quotes_gpc值設爲On。
3.避免使用特殊字符
MySQL提供一個函數 mysql_real_escape_string(),這個函數能夠用來過濾一些特殊字符;如\x00, \n, \r, , ', " and \x1a;
防護策略3--數據與sql語句的分離
經過SQL邏輯分離來告訴數據庫究竟是哪部分是數據部分,哪一部分是SQL語句部分;
提供以新的new mysqli()函數, 將這個函數寫入config/standary/config.php文件apache

相關文章
相關標籤/搜索