20169220 <網絡攻防實踐> 第十二週實驗—SQL注入

實驗環境

SEED Ubuntu鏡像環境配置php

實驗須要三樣東西,Firefox、apache、phpBB2(鏡像中已有):

  • ①運行Apache Server:鏡像已經安裝,只需運行命令%sudo service apache2 start
  • ②phpBB2 web應用:鏡像已經安裝,經過http://www.sqllabmysqlphpbb.com訪問,應用程序源代碼位於/var/www/SQL/SQLLabMysqlPhpbb/
  • ③配置DNS:上述的URL僅僅在鏡像內部能夠訪問,緣由是咱們修改了/etc/hosts文件使http://www.sqllabmysqlphpbb.com指向本機IP 127.0.0.1。若是須要在其餘機器訪問,應該修改hosts文件,使URL映射到phpBB2所在機器的IP。mysql

    關閉對抗措施

    PHP提供了自動對抗SQL注入的機制,被稱爲magic quote,咱們須要關閉它。

  • 1.找到/etc/php5/apache2/php.ini
  • 2.找到magic_quotes_gpc = On這一行
  • 3.改成magic_quotes_gpc = Off
  • 4.重啓Apache:」sudo service apache2 restartweb

    實驗任務

    1.對SELECT語句的攻擊

  • 這次任務,你須要經過訪問虛擬機內的URL:www.sqllabmysqlphpbb.com。在進入phpBB以前系統會要求你登錄。這個登錄認證由服務器上的login.php實現,須要用戶輸入用戶名和密碼來經過認證。界面以下


    sql

2.對UPDATE語句的攻擊

  • 當用戶想要在phpBB2中修改他們的資料時,能夠點擊Profile,而後填寫表單修改。用戶發送修改請求後,會執行include/usercp_register.php中的一條UPDATE SQL語句。在這條語句中一樣有一個SQL注入漏洞,請用它來達到如下目標:在不知道其餘人密碼的狀況下修改其資料。例如:你以Alice登錄,你的目標就是修改Ted的資料信息,包括他的密碼。攻擊成功後你將能夠登錄Ted的帳號

3.對抗SQL注入

SQL注入漏洞的根本緣由是沒有將代碼和數據區分開。當組建一個SQL語句時,程序(如PHP程序)知道哪一個部分是代碼哪一個部分是數據。不幸的是當SQL語句送往數據庫執行時,這個邊界被打破,當程序被注入時,SQL解釋器看到的邊界可能和最初的邊界不同。爲了解決這個問題,保持服務端程序和數據庫看到的邊界同樣就十分重要。數據庫

  • 使用magic_quotes_gpc避開特殊字符。好比修改/etc/php5/apache2/php.ini的magic_quotes_gpc = On,而後重啓Apache
  • 使用addslashes()來避開特殊字符
  • 使用mysql_real_escape_string避開特殊字符
  • Prepare Statement
相關文章
相關標籤/搜索