SQL注入實驗php
在本次實驗中,咱們修改 phpBB的web應用程序,而且關閉了phpBB實現的一些對抗SQL注入的功能。於是咱們建立了一個能夠被SQL注入的phpBB版本。儘管咱們的修改是人工的,可是它們表明着web開發人員的一些共同錯誤。學生的任務是發現SQL注入漏洞,實現攻擊者能夠達到的破壞,同時學習抵擋這樣的攻擊的技術。 html
結構化查詢語言(Structured Query Language)簡稱SQL:是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統;同時也是數據庫腳本文件的擴展名。mysql
常見SQL語句linux
SQL注入:SQL注入能使攻擊者繞過認證機制,徹底控制遠程服務器上的數據庫。SQL是結構化查詢語言的簡稱,它是訪問數據庫的事實標準。目前,大多數Web應用都使用SQL數據庫來存放應用程序的數據。幾乎全部的Web應用在後臺都使用某種SQL數據庫。跟大多數語言同樣,SQL語法容許數據庫命令和用戶數據混雜在一塊兒的。若是開發人員不細心的話,用戶數據就有可能被解釋成命令,這樣的話,遠程用戶就不只能向Web應用輸入數據,並且還能夠在數據庫上執行任意命令了。
sql注入原理講解web
非法讀取、篡改、添加、刪除數據庫中的數據。
盜取用戶的各種敏感信息,獲取利益。
經過修改數據庫來修改網頁上的內容。
私自添加或刪除帳號。
注入木馬等等。sql
實驗須要三樣東西, Firefox、 apache、 phpBB2(鏡像中已有):數據庫
① 運行 Apache Server:鏡像已經安裝,只需運行命令sudo service apache2 startapache
② phpBB2 web 應用:鏡像已經安裝,經過 http://www.sqllabmysqlphpbb.com 訪問,應用程序源代碼位於/var/www/SQL/SQLLabMysqlPhpbb/編程
③ 配置 DNS: 上述的 URL 僅僅在鏡像內部能夠訪問,緣由是咱們修改了/etc/hosts文件使 http://www.sqllabmysqlphpbb.com 指向本機 IP。若是須要在其餘機器訪問,應該修改 hosts 文件,使 URL 映射到 phpBB2 所在機器的 IP。緩存
④ 關閉對抗措施
PHP 提供了自動對抗 SQL 注入的機制,被稱爲 magic quote,咱們須要關閉它:
找到/etc/php5/apache2/php.ini
找到 magic_quotes_gpc = On 這一行改成 magic_quotes_gpc = Off
重啓 Apache:sudo service apache2 restart
① 對 SELECT 語句的攻擊
首先訪問虛擬機內的URL:www.sqllabmysqlphpbb.com
。在進入phpBB以前系統會要求你登錄。這個登錄認證由服務器上的 login.php 實現,須要用戶輸入用戶名
和密碼來經過認證。用戶鍵入用戶名和密碼後,login.php 會將它們與 mysql 數據庫中的 username 和user_password 字段進行比較,若是匹配就登錄主界面。和其餘大多數 web 應用程序同樣, PHP程序使用 SQL 語言與背後的數據庫交互。在 phpBB2 中,下面的語句實現了對用戶的認證。
SELECTuser_id,username,user_password,user_active,user_level, user_login_tries,user_last_login_try FROMUSERS_TABLE WHEREusername=‟$username‟ANDuser_password=‟md5($password)‟; if(foundonerecord) then{allowtheusertologin}
按常理來講,若是輸入錯誤的用戶名或密碼,確定是登陸不了的。可是對於有SQL注入漏洞的網站來講,只要構造特殊的「字符串」,就可以成功登陸。如在用戶名輸入框中輸入' or 1=1#
,密碼隨便輸入,此時合成的SQL查詢語句爲:select * from users where username='' or 1=1#' and password=md5('')
。
「#」在mysql中是註釋符,這樣井號後面的內容將被mysql視爲註釋內容,不會去執行。即select * from users where username='' or 1=1#' and password=md5('')
等價於select * from users where username='' or 1=1
,由於1=1永遠成立的,即where子句老是爲真,該sql語句進一步簡化以後,等價於select * from users
。因爲該頁面不讓輸入「=」,因此咱們只能輸入alice'#
,就能夠在不知道alice密碼的狀況下登陸了。
② 對 UPDATE 語句的攻擊
當用戶想要在 phpBB2 中修改他們的資料時,能夠點擊 Profile,而後填寫表單修改。用戶發送修改請求後,會執行include/usercp_register.php
中的一條 UPDATE SQL 語句。在這條語句中一樣有一個 SQL 注入漏洞。
下面演示以 alice 登錄,目標是修改ted 的資料信息,包括他的密碼。攻擊成功後將能夠登錄 Ted 的帳號。
點擊Memberlist查看ted的信息,能夠看到一個帶參數的腳本,猜想ted的id爲6。
咱們在profile頁面中修改ted的信息,只需在修改資料後面加上'where user_id=6#
,即將update語句中interests後的語句所有註釋掉,並將where條件設置成ted的id。
再次點擊Memberlist查看ted的信息,發現已經修改爲功!
③ 對抗 SQL 注入
SQL 注入漏洞的根本緣由是沒有將代碼和數據區分開。當組建一個 SQL 語句時,程序(如 PHP 程序)知道哪一個部分是代碼哪一個部分是數據。不幸的是當 SQL 語句送往數據庫執行時,這個邊界被打破,當程序被注入時, SQL 解釋器看到的邊界可能和最初的邊界不同。爲了解決這個問題,保持服務端程序和數據庫看到的邊界同樣就十分重要。
(1)使用 magic_quotes_gpc 避開特殊字符。咱們只須要在單引號前加一個反斜槓()PHP 提供了自動在單引號、雙引號、反斜槓和空字符前添加反斜槓的機制,若是這個
選項啓用,那麼全部這些從用戶輸入的特殊字符會被加反斜槓。啓用方法爲,修改/etc/php5/apache2/php.ini
的 magic_quotes_gpc = On
,而後重啓 Apache。
(2)使用 addslashes()來避開特殊字符。
PHP 的方法 addslashes()能夠達到 magic quote 一樣的功能。若是 magic quote 沒有棄用, phpBB2 的 代 碼 會 使 用 該 功 能 來 防 止 SQL 注 入 攻 擊 。 請 查 看 /var/www/SQL/SQLLabMysqlPhpbb 目錄下的 common.php。實際上爲了使 SQL 注入攻擊成 功,咱們註釋掉了 phpBB2 的保護措施。
請修改回 phpBB2 的保護功能,並觀察移除下面代碼中」and FALSE」先後的區別,描述 這個保護機制若是防止 SQL 注入攻擊的。
if( !get_magic_quotes_gpc() and FALSE )
爲了幫助描述區別,你須要打印出 SQL 語句。
(3)使用 mysql_real_escape_string 避開特殊字符。
(4)Prepare Statement
TCP/IP網絡協議攻擊實驗
實驗介紹
以SEED爲攻擊機,以Linux Metasploitable/Windows Metasploitable作靶機完成TCP/IP協議攻擊,提交本身攻擊成功截圖,加上本身的學號水印。任選兩個攻擊:
ARP緩存欺騙攻擊
ICMP重定向攻擊
SYN Flood攻擊
TCP RST攻擊
TCP 會話劫持攻擊
ARP緩存欺騙攻擊
ARP 緩存是 ARP 協議的重要組成部分。當使用 ARP 協議解析了某個 MAC 地址和 IP 地址的映射關係,該映射便會被緩存下來。所以就不用再使用 ARP 協議來解析已存在緩存 中的映射關係。可是由於 ARP 協議是無身份認證的,因此 ARP 緩存很容易被惡意的虛假 ARP 數據報實施欺騙。這樣的攻擊被稱爲 ARP 緩存欺騙(或 ARP 緩存投毒)。 在這樣的攻擊中,攻擊者經過僞造 ARP 數據報來欺騙被攻擊主機的電腦使之緩存錯誤 的 MAC 地址和 IP 地址映射。因攻擊者的動機不一樣,攻擊的結果也有不少。例如,攻擊者 可使被攻擊主機的默認網關 IP 映射到一個不存在的 MAC 地址達到 DoS 攻擊,攻擊者也 可使被攻擊主機的通訊重定向至其餘機器等等。 你的任務是演示 ARP 緩存欺騙攻擊是怎麼工做的。任務中一些有用的命令:linux 下可 以使用 arp 來檢查當前的 ARP 緩存。
SEED攻擊機IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶機IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
Linux靶機IP:192.168.110.136 MAC地址:00:0c:29:c1:3a:fc
用攻擊機ping通兩臺靶機,ping完以後拿arp -a命令進行查看:
netwox的33號工具參數說明:
利用33號工具構造ARP數據報文進行ARP欺騙攻擊:
將這兩個報文發送出去,以後咱們就能查出欺騙的mac和ip的對應信息:
能夠看到,靶機的MAC地址已經變爲攻擊機的MAC地址!
攻擊機經過netwox的88號工具能夠假裝MAC地址,使靶機B相信靶機A的ip對應的MAC地址爲僞造的MAC地址,將個人學號20179306做爲僞造的MAC地址,僞造MAC地址爲00:0c:20:17:93:06:
攻擊結果如圖:
MAC地址已經變爲個人學號。
ICMP重定向攻擊
ICMP 重定向報文是路由器爲網絡中的機器提供最新的路由信息以達到最短路由而使 用的。當主機收到一個 ICMP 重定向報文就會根據報文來更新本身的路由表。因爲缺少確認 機制,若是攻擊者想要使被攻擊主機使用特定路由,他們只要向被攻擊主機發送欺騙性的 ICMP 重定向報文,使它改變路由表便可。 你的任務是演示 ICMP 重定向攻擊是如何工做的,並描述一下觀察到的結果。在 linux 可使用 route 命令檢查路由表。
SEED攻擊機IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶機IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
記錄下最初靶機的路由表狀態:
這時咱們開啓netwox進行ICMP路由重定向,使用第86號工具,按照工具提示進行數據包的篡改:
這句話的意思是,嗅探網絡中來自主機192.168.110.137的TCP包,一旦出現,就以網關192.168.110.2的名義,向數據包的源地址發送一個ICMP重定向報文,使之使用192.168.110.134做爲默認的路由。
靶機ping baidu.com,能夠看到wireshark馬上截獲了靶機發往目標服務器的的相關報文,以下圖所示:
而後這時咱們再查看靶機的路由表,和以前的相對比,靶機已經錯誤的將網關更改成了咱們的攻擊機的IP地址:
SYN Flood攻擊(SYN洪泛攻擊)
SYN flood攻擊是DoS攻擊的一種形式,攻擊者向被攻擊主機的TCP端口大量發送SYN 請求包,但不去完成 TCP 的」三次握手」的過程,例如攻擊使用一個假的 IP 地址,或只是簡 單地再也不繼續創建 TCP 鏈接的過程,這都使被攻擊主機處於」半鏈接」狀態(即在」三次握手」 過程當中,有了前兩次握手,SYN 包和 SYN-ACK 包的傳輸,但沒有最後一次 ACK 包的確認)。 被攻擊主機的主機會使用一個隊列來保存這種半鏈接的狀態,當這個隊列存儲空間滿了的時
候,目標主機便沒法再接受任何其它鏈接。這一隊列的空間大小事實上是一個系統變量,在 Linux 中,能夠這樣查看它的大小: # sysctl –q net.ipv4.tcp_max_syn_backlog
我們還可使用」netstat -na」命令去檢查隊列的使用狀況。處於半鏈接的鏈接狀態被標示 爲」SYN-RECV」,完成了」三次握手」的鏈接被標示爲」ESTABLISHED」。
在這一任務中,你須要演示 SYN flood 攻擊。你可使用 Netwox 去實施攻擊,並使用嗅探器來獲取數據包。攻擊實施的過程當中,在被攻擊主機上運行」netstat -na」命令去觀察受攻擊的狀況。請描述你的攻擊是否成功。
SYN Cookie保護機制:若是你的攻擊看起來並不成功,你能夠檢查一下目標主機的 SYN Cookie 機制是否被開啓。
SYN cookie 是針對 SYN flood 攻擊的一種保護機制。這一機制會在探測到 SYN flood 攻擊時開始生效。你可使用 sysctl 命令去打開或關閉這一機制:
# sysctl -a | grep cookie (查看 SYN cookie 的當前狀態)
# sysctl -w net.ipv4.tcp_syncookies=0 (關閉 SYN cookie)
# sysctl –w net.ipv4.tcp_syncookies=1 (打開 SYN cookie)
請分別在 SYN cookie 機制打開和關閉兩種狀況下實施你的 SYN flood 攻擊,並比較結果。
實驗步驟
SEED攻擊機IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶機IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
Linux靶機IP:192.168.110.136 MAC地址:00:0c:29:c1:3a:fc
首先用Windows靶機鏈接Linux靶機的23號端口:
關閉Linux靶機的SYN cookie:
SEED攻擊機使用netwox的76號工具進行TCP SYN Flood拒絕服務攻擊:
靶機上運行」netstat -na」命令去觀察受攻擊的狀況:
靶機會收到大量TCP報文,影響正常通信。
23號端口鏈接失敗。
TCP RST攻擊
TCP RST攻擊也稱僞造TCP重置報文攻擊,它經過更改TCP協議頭的標誌位中的「reset」比特位(0變1),來關閉掉一個TCP會話鏈接。
SEED攻擊機IP:192.168.110.134 MAC地址:00:0c:29:36:7d:ab
Windows靶機IP:192.168.110.137 MAC地址:00:0c:29:16:54:9b
Linux靶機IP:192.168.110.136 MAC地址:00:0c:29:c1:3a:fc
首先用Windows靶機鏈接Linux靶機的23號端口:
利用netwox的78號工具進行攻擊:
此時鏈接已斷開:
wireshark當中也捕捉到了斷開鏈接的數據包: