實驗八 Web基礎 SQL注入原理

實驗八 Web基礎

實驗要求

(1)Web前端HTMLphp

能正常安裝、啓停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。html

(2)Web前端javascipt前端

理解JavaScript的基本功能,理解DOM。編寫JavaScript驗證用戶名、密碼的規則。java

(3)Web後端:MySQL基礎:正常安裝、啓動MySQL,建庫、建立用戶、修改密碼、建表mysql

(4)Web後端:編寫PHP網頁,鏈接數據庫,進行用戶認證web

(5)最簡單的SQL注入,XSS攻擊測試算法

功能描述:用戶能登錄,登錄用戶名密碼保存在數據庫中,登錄成功顯示歡迎頁面。sql

實驗原理

1.在Kali-Linux中能夠很方便地啓停Apache2服務,若是要更方便地進行訪問,咱們能夠先Kill掉佔用80端口的進程,這樣Apache啓動以後就會使用80端口,在訪問時就不須要選擇端口鏈接了!數據庫

HTML是超文本傳輸協議,能夠在CSS的幫助下製做出一個比較精美的靜態網頁界面,可是功能有限,若是加入了Java Script代碼後,界面就能動態處理一些事態,變得更靈活,用戶體驗也會更好一點。後端

HTTP的底層是TCP/IP。因此GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP連接。GET和POST能作的事情是同樣同樣的。你要給GET加上request body,給POST帶上url參數,技術上是徹底行的通的。因此本質上來說這二者沒有什麼區別,視須要使用就行了。

2.JavaScript能夠實現一個動態網頁,不像靜態的、死板的HTML文件,帶有JavaScript的JSP文件看起來更加生動。將一段Java代碼穿插寫在HTML文本中間,不影響HTML自己的做用,限制較少。

3.在後臺中通常來講會帶一個數據庫的軟件,我我的用得比較多的是Access,本次試驗用到的是mysql數據庫,是一個已經內置在Kali-Linux中的一款數據庫軟件,很省事,若是後臺採用Java語言編寫的話,須要加載Access驅動後用SQL語言訪問Access數據庫,存取你想要的數據。無論哪一個都是很好用的軟件,在命令上都是同樣的。

4.後臺會在用戶提交表單後,將數據進行一些處理,這裏面就能夠進行登陸驗證等不少事情,連接數據庫也是在這部分實現的。

5.SQL注入:在訪問數據庫時候,攻擊者使用設計好的字段令SQL語言作出其它的、預想以外的操做,以影響數據庫的正常工做,達到攻擊者篡改、破壞數據的目的。

實驗步驟

咱們循序漸進地按照實驗步驟,一點一點作~

首先打開Apache服務,若是有進程在佔用80端口必定要Kill掉,而後將本身作好的登陸頁面置入/var/www/html/這個目錄下面,用瀏覽器查看一下,看看可否正常訪問咱們置入的文件。

而後打開Kali-Linux自帶的mysql服務,進行一些簡單配置,更改root用戶的密碼,更新權限,創建一個test_db數據庫,存入咱們須要的登陸信息。

mysql這塊在敲命令行的時候必定要記住:加分號!!!此次被這些分好搞得焦頭爛額,不是很習慣……

最後咱們使用老師給出的一個login.php文件進行鏈接,在使用以前要更改用戶名、密碼使它能訪問本機的mysql數據庫,還要配合咱們製做的HTML頁面使得username和password的表單名稱能夠對應,不然不能正確讀取文本框裏面輸入的信息。

A-oooooooooo!!出錯了,這個是咱們鏈接不上數據庫的錯誤提示,我接下來嘗試了下面這些操做:

1.新建一個用戶

2.進行權限提高

3.更新文件內容

這些操做結束後……並無解決問題……不過卻是產生了不同的效果login.php什麼都不顯示了!Emmmmm…………

這個時候咱們要使用一款神器,他叫:別人的電腦!(別問我爲何每次實驗都會出現各類各樣奇奇怪怪的錯誤,我也不想啊……)

這個時候發生了一個小插曲(後來以爲這顯然比在別人電腦上作成功更靠譜一些):

反正也行不通了。。。不如試一下看看能不能找到某些網站的漏洞emmmm……因此先拿一些作工比較粗糙的網站下手試了試,雖然這些不是很正規的網站看起來有點low,可是遊民星空、遊俠網、3DM(這個登陸信息太多了啊)還有不少關掉就會忘掉的網站,等等這些網站仍是能夠有效抵擋的,他們會額外檢查用戶名這塊區域的字符合法性,因此不少sql注入的方式會被這層檢測攔下來,也不失爲一種防護手段,這裏面只有遊民星空這個網站出現了異樣,好久沒有登錄反饋,預測產生了一些影響吧,輸點別的仍是挺正常的。

而後就找了些網友們推薦的能夠嘗試一下的SQL注入點,這裏首先嚐試的是testfire的一個頁面,簡單的username='or 1=1#是不奏效的,我在嘗試時在Username字段中輸入admin'OR'l,在Password字段中輸入test'OR'1,單擊Login按鈕,你會發現你進入了用戶帳戶!你們均可以試一下,這個網站有故意成爲靶機的意思哦!

這個網站攻擊原理是將SQL語句改成了SELECT * FROM [users] WHERE username= 'admin' OR '1' AND password='test' OR '1'。是否是很巧妙,不光用戶名能夠設計,密碼字段也能夠稍加設計,作到SQL注入,這才使得咱們成功進入這個網站的後臺。

不知道這樣能不能算做一次SQL注入實驗呢?

i春秋還提供有SQL注入的更詳細的介紹和技巧,能夠跟進關注一下!

實驗感想

在網上找了很是多的登陸界面,嘗試使用SQL注入繞開登陸認證階段,可是事實上大部分的網站是沒法以現有水平進行攻擊的,如今的用戶名可能不是使用用戶輸入的原樣,合成SQL語句進行數據庫訪問,而是進行了一些處理和防範。有些網站會在頁面上寫入JavaScript進行用戶名格式判斷,過濾掉不符合要求的用戶名格式,用戶即便不點提交也會提示格式錯誤,這樣能夠在極大程度上避免純粹的SQL注入設計好的字符直接對數據庫進行處理,也是比較廉價的方式,相對應的,這個方式若是使用其它的手段繞過JavaScript檢測也是可行的,要斟酌一下這個代價是否划算。還有一種可能帶有防範措施,當服務器察覺到傳輸數據可能形成SQL注入,則會斷開鏈接,使瀏覽器與網站失去鏈接,也是比較常見的一種防禦措施。再有就是不直接使用用戶名進行查找,這個雖然是我本身想的可是頗有可能規避SQL注入攻擊,將輸入的這些字段進行哈希運算,近似一一對應很難撞庫暫不考慮這個特殊狀況,利用哈希值進行比對;因爲密碼哈希算法是不可逆的,從哈希值逆運算找到對應的明文計算上不可行,很難找到對應能夠SQL注入的明文,因此能夠實現SQL注入的防護。

總而言之,本次實驗能教給咱們的只是須要預防SQL,僅僅作實驗達到效果是遠遠不夠的,更須要咱們理解原理,想出應對之策,避免自身損失。

相關文章
相關標籤/搜索