【JAVA安全】---JWT安全及預編譯CASE注入---day40


【Java安全】---JWT安全及預編譯CASE注入---day40

一、思維導圖

image-20210504171230516

image-20210504171735384

二、SQL Injection

1、防御sql注入,其實就是session,參數綁定,存儲過程這樣的注入。

//利用session防御,session內容正常情況下是用戶無法修改的:
select * from users where user = "'" + session.getAttribute("UserID") + "'";

//參數綁定方式,利用了sql的預編譯技術
預編譯講解:https://www.cnblogs.com/klyjb/p/11473857.html

String query = "SELECT * FROM users WHERE last_name = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1,accountNmae);
ResultSet results = statement.executeQuery();

上面說的方式也不是能夠絕對的進行SQL注入防御,只是減輕。
比如參數綁定的方式可以使用下面的方式繞過:
    通過使用case when語句可以將order by后的orderExpression表達式中添加select語句。

案例:WEBGOAT sql注入

在參數ip可以操作,可以去查看源碼有oder by 查詢,然后是通過預編譯的方法

抓包

image-20210504173429518

隨便輸入一個,報錯,爆出了sql語句

image-20210504173531810

在過關技巧那里,有case when的繞過方法。

https://blog.csdn.net/u013553529/article/details/82765062

目的學習就是通過oder by 解決預編譯注入。

三、JWT安全

1、結構

image-20210504174333666

頭 聲明 簽名

image-20210504174431726

流程:

image-20210504174658769

2、Javaweb-身份驗證攻擊-JWT修改偽造攻擊

image-20210504174803662

在webgoat里

image-20210507142725156

目的是使用普通用戶的token,變為管理員。

點一下右上角的users,選擇Tom。抓包

image-20210507142907526

然后點擊重新設置Tom

image-20210507142955132

就出現了access_token,這就是JWT的類型格式。使用在線解密:

JWT.IO:

https://jwt.io/

image-20210507143915984

后面的簽名,必須要密匙才能知道是啥。我們把上面的admin:false改為true就可以了。

image-20210507144049168

把修改后的JWT復制過去替換就可以了。但是發現會報錯,就是因為使用了加密算法,需要簽名的密匙的原因。

image-20210507144403887

我們只需要把第一部分算法改為none,然后拼接起來,復制過去應該就可以了。

image-20210507144835976

由於base64加密后有等於號,我們需要把等於號去掉。

image-20210507144935185

3、Javaweb-身份驗證攻擊-JWT密匙爆破攻擊

image-20210507145224949

進行解密:

image-20210507145332871

腳本:

image-20210507145405076

用到了fuzz字典。找到了密匙

image-20210507145454355

image-20210507145809847

4、Javaweb-jwt偽造冒充

購物以其他用戶購買,日志分析某用戶的jwt數據,進行修改偽造提交。

image-20210507150110103

點擊退房,抓包。

image-20210507150213318

補充jwt的交互原理:

image-20210507150252563

然后在題目那里,給了一個日志。查看一下。

image-20210507150344567

有個jwt_token。分析一下

image-20210507150411821

用戶是Tom。由於我們不知道密匙,所以還是修改alg為none進行偽造,並且修改失效的時間戳。

image-20210507151153466

放到Authorization中:

image-20210507151253174

5、JWT-最終挑戰

image-20210507151427271

點擊Tom下面的刪除,抓包:

image-20210507151722485

解密一下Token

image-20210507151747437

在源碼中有SQL語句

image-20210507152013796

image-20210507152036164

也就是說上面的kid是從jwt的頭部得到的。那么更改kid就可以形成注入。

6、Javaweb-身份驗證攻擊-JWT安全結合SQL注入

https://www.freebuf.com/vuls/216457.html

7、CTF-Node.js-前端jwt登錄安全-偽造admin實現getflag

#結題思路:
注冊用戶登錄-分析/controllers/api.js-用戶admin可獲取flag
抓取登錄數據包,進行反解密修改再加密,偽造登錄獲取flag。

靶場:CTFHUB

image-20210507155317063

注冊個賬號密碼

image-20210507155531106

完事之后,在登錄頁面抓包:

image-20210507155954275

登陸之后點擊,獲取flag,顯示權限被拒絕。

image-20210507160048041

說明就是要我們通過jwt改身份唄。

在下面的地址里可以查看源代碼:

image-20210507160210406

注意這個函數:

image-20210507160243403

image-20210507160410091

還是把alg改為none,拼接形成payload。

image-20210507160818742

然后此時再點獲取flag。

image-20210507160851470

得到flag。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM